Order cancellation form for orders that need to stop

Updated 2026-10-30

A cancellation message that arrives after the parcel has shipped is a headache for both sides. I would rather catch it early, with the order number and the reason in one place.

Before it is open

Decide your cut-off, for example before dispatch, and write it in the form description. Link the form from your order messages, because the form itself sends no email to buyers.

While it is open

Customers give the order number, whether they want the whole order or part of it, the reason, and whether it has shipped as far as they know. One question asks if a change would solve it, such as a new address. A customer's AI might ask "What is your order number?" Then "Do you want to cancel everything or part of it?" Then "Would a change solve it instead?" It shows the answers and sends only after a yes. See agent-fillable forms.

After it closes

Sort the CSV by shipped status and act first on orders that have not left. This is a form, not legal advice. Check your cancellation rules with a professional. The form decides nothing.

People often cancel a pre-order before it ships. When a customer leaves a plan for good, an exit survey tells you why. Made-to-order sellers can compare a cookie order form. More ideas are in forms for Ecommerce and Shopify stores.

Questions

Does the form cancel the order by itself?

No. It sends you the request. You check the order status in your shop and cancel or refund there yourself.

How do I handle orders that already shipped?

Sort the CSV by the shipped answer. For those rows, reply with your return steps instead of a cancellation, and say so in the form description.

What can I learn from the reasons?

Count the reason column. Many mistakes point to a confusing checkout. Many late-delivery reasons point to delivery times that are unclear at checkout.

Try the form

Live demo ยท nothing is saved

Cancel an order

Need to stop an order? Tell us which one. If it has not shipped yet, we will do our best to catch it.

What do you want to cancel? (required)

Only needed if you chose part of the order.

Why are you cancelling?
Has the order already shipped?
Would a change solve it instead?
I may order again later
I understand the order may already be in progress (required)

Or paste the JSON

Give this to your AI. It needs the AI Form API MCP server or an API key. It makes the form and sends you the link.

text
Create this form with the AI Form API create_form tool (or POST https://aiformapi.com/v1/forms with my API key). Then reply with the public_url.

{
  "title": "Cancel an order",
  "description": "Need to stop an order? Tell us which one. If it has not shipped yet, we will do our best to catch it.",
  "fields": [
    {
      "id": "customer_name",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "order_email",
      "label": "Email used for the order",
      "type": "email",
      "required": true
    },
    {
      "id": "order_ref",
      "label": "Order number",
      "type": "short_text",
      "required": true,
      "max_length": 100
    },
    {
      "id": "order_placed_on",
      "label": "When did you place the order?",
      "type": "date"
    },
    {
      "id": "cancel_scope",
      "label": "What do you want to cancel?",
      "type": "single_choice",
      "required": true,
      "options": [
        "The whole order",
        "Part of the order"
      ]
    },
    {
      "id": "items_in_question",
      "label": "Which items?",
      "type": "long_text",
      "help": "Only needed if you chose part of the order.",
      "max_length": 800
    },
    {
      "id": "why_cancelling",
      "label": "Why are you cancelling?",
      "type": "single_choice",
      "options": [
        "I ordered by mistake",
        "I found another option",
        "Delivery is taking too long",
        "The price changed",
        "My plans changed",
        "Something else"
      ]
    },
    {
      "id": "shipped_status",
      "label": "Has the order already shipped?",
      "type": "single_choice",
      "options": [
        "No, as far as I know",
        "Yes",
        "I am not sure"
      ]
    },
    {
      "id": "change_instead",
      "label": "Would a change solve it instead?",
      "type": "single_choice",
      "options": [
        "No, I want to cancel",
        "Yes, change the address",
        "Yes, change the item",
        "Yes, change the delivery date"
      ]
    },
    {
      "id": "order_again_later",
      "label": "I may order again later",
      "type": "checkbox"
    },
    {
      "id": "cancel_understood",
      "label": "I understand the order may already be in progress",
      "type": "checkbox",
      "required": true
    }
  ]
}

Or call the API

bash
curl -X POST https://aiformapi.com/v1/forms \
  -H "Authorization: Bearer $AIFORMAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Cancel an order","description":"Need to stop an order? Tell us which one. If it has not shipped yet, we will do our best to catch it.","fields":[{"id":"customer_name","label":"Your name","type":"short_text","required":true,"max_length":150},{"id":"order_email","label":"Email used for the order","type":"email","required":true},{"id":"order_ref","label":"Order number","type":"short_text","required":true,"max_length":100},{"id":"order_placed_on","label":"When did you place the order?","type":"date"},{"id":"cancel_scope","label":"What do you want to cancel?","type":"single_choice","required":true,"options":["The whole order","Part of the order"]},{"id":"items_in_question","label":"Which items?","type":"long_text","help":"Only needed if you chose part of the order.","max_length":800},{"id":"why_cancelling","label":"Why are you cancelling?","type":"single_choice","options":["I ordered by mistake","I found another option","Delivery is taking too long","The price changed","My plans changed","Something else"]},{"id":"shipped_status","label":"Has the order already shipped?","type":"single_choice","options":["No, as far as I know","Yes","I am not sure"]},{"id":"change_instead","label":"Would a change solve it instead?","type":"single_choice","options":["No, I want to cancel","Yes, change the address","Yes, change the item","Yes, change the delivery date"]},{"id":"order_again_later","label":"I may order again later","type":"checkbox"},{"id":"cancel_understood","label":"I understand the order may already be in progress","type":"checkbox","required":true}]}'

JSON definition

json
{
  "title": "Cancel an order",
  "description": "Need to stop an order? Tell us which one. If it has not shipped yet, we will do our best to catch it.",
  "fields": [
    {
      "id": "customer_name",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "order_email",
      "label": "Email used for the order",
      "type": "email",
      "required": true
    },
    {
      "id": "order_ref",
      "label": "Order number",
      "type": "short_text",
      "required": true,
      "max_length": 100
    },
    {
      "id": "order_placed_on",
      "label": "When did you place the order?",
      "type": "date"
    },
    {
      "id": "cancel_scope",
      "label": "What do you want to cancel?",
      "type": "single_choice",
      "required": true,
      "options": [
        "The whole order",
        "Part of the order"
      ]
    },
    {
      "id": "items_in_question",
      "label": "Which items?",
      "type": "long_text",
      "help": "Only needed if you chose part of the order.",
      "max_length": 800
    },
    {
      "id": "why_cancelling",
      "label": "Why are you cancelling?",
      "type": "single_choice",
      "options": [
        "I ordered by mistake",
        "I found another option",
        "Delivery is taking too long",
        "The price changed",
        "My plans changed",
        "Something else"
      ]
    },
    {
      "id": "shipped_status",
      "label": "Has the order already shipped?",
      "type": "single_choice",
      "options": [
        "No, as far as I know",
        "Yes",
        "I am not sure"
      ]
    },
    {
      "id": "change_instead",
      "label": "Would a change solve it instead?",
      "type": "single_choice",
      "options": [
        "No, I want to cancel",
        "Yes, change the address",
        "Yes, change the item",
        "Yes, change the delivery date"
      ]
    },
    {
      "id": "order_again_later",
      "label": "I may order again later",
      "type": "checkbox"
    },
    {
      "id": "cancel_understood",
      "label": "I understand the order may already be in progress",
      "type": "checkbox",
      "required": true
    }
  ]
}