A cake order form that brings every detail in one go

Updated 2026-10-30

A cake order by text message is half an order. "Chocolate, for Saturday" leaves you asking how big, which filling and who is allergic to what. I would send one link so every order arrives complete.

How it works

  1. The customer gives a name, phone and the date they need the cake, so you can plan your week.
  2. They choose the occasion, servings and tiers, so you can size the cake.
  3. They pick a flavour, filling and icing, and link to a picture of a cake they like.
  4. They type the inscription exactly as they want it written.
  5. They name allergies and say whether they will collect or want delivery.

What a customer's AI would ask

"Which date do you need the cake?" Then "How many servings?" Then "What should the inscription say?" It shows every answer and sends them only after a yes. Learn about agent-fillable forms.

Good to know

Spelling mistakes on icing are painful, so the form asks customers to type the inscription exactly. Read the CSV each morning and reply to confirm. For biscuits and party favours, use a cookie order form. For loaves, buns and pastries, a bakery order form fits better. See forms for restaurants and food businesses and forms for ecommerce and Shopify stores.

Questions

Does the form take a deposit?

No. The form takes no payment. Agree the amount and any deposit yourself by message or invoice once you have read the order and checked your diary.

How do I avoid taking too many orders for one day?

Sort the CSV by pickup_date to see how loaded each day is. Set close_at ahead of busy holidays, so orders stop before you run out of oven space.

How should I handle allergies?

The allergy question is required, so customers write none or name the allergen. Read it first on every order, and message the customer if you cannot make a safe cake.

Try the form

Live demo ยท nothing is saved

Order a custom cake

Tell us about your cake. We read every order and message you to confirm the details.

What is the occasion?
How many tiers?
Cake flavour (required)
Icing style

Type it exactly as it should be written.

Write none if there are none.

Collection or delivery? (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": "Order a custom cake",
  "description": "Tell us about your cake. We read every order and message you to confirm the details.",
  "fields": [
    {
      "id": "customer_name",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 120
    },
    {
      "id": "customer_phone",
      "label": "Phone",
      "type": "phone",
      "required": true
    },
    {
      "id": "customer_email",
      "label": "Email",
      "type": "email"
    },
    {
      "id": "pickup_date",
      "label": "Date you need the cake",
      "type": "date",
      "required": true
    },
    {
      "id": "occasion",
      "label": "What is the occasion?",
      "type": "single_choice",
      "options": [
        "Birthday",
        "Wedding",
        "Anniversary",
        "Baby shower",
        "Graduation",
        "Corporate event",
        "Just because"
      ]
    },
    {
      "id": "servings",
      "label": "How many servings?",
      "type": "number",
      "required": true,
      "min": 4,
      "max": 200
    },
    {
      "id": "tiers",
      "label": "How many tiers?",
      "type": "single_choice",
      "options": [
        "One tier",
        "Two tiers",
        "Three tiers"
      ]
    },
    {
      "id": "cake_flavour",
      "label": "Cake flavour",
      "type": "single_choice",
      "required": true,
      "options": [
        "Vanilla",
        "Chocolate",
        "Red velvet",
        "Lemon",
        "Carrot",
        "Coffee",
        "Fruit",
        "Other"
      ]
    },
    {
      "id": "filling",
      "label": "Filling",
      "type": "short_text",
      "max_length": 150
    },
    {
      "id": "icing_style",
      "label": "Icing style",
      "type": "single_choice",
      "options": [
        "Buttercream",
        "Fondant",
        "Naked cake",
        "Chocolate ganache drip",
        "Whipped cream"
      ]
    },
    {
      "id": "colours_and_theme",
      "label": "Colours or theme",
      "type": "short_text",
      "max_length": 200
    },
    {
      "id": "inscription",
      "label": "What should the inscription say?",
      "type": "short_text",
      "help": "Type it exactly as it should be written.",
      "max_length": 80
    },
    {
      "id": "reference_link",
      "label": "Link to a cake you like",
      "type": "url"
    },
    {
      "id": "allergies",
      "label": "Allergies we must know about",
      "type": "long_text",
      "required": true,
      "help": "Write none if there are none.",
      "max_length": 500
    },
    {
      "id": "fulfilment",
      "label": "Collection or delivery?",
      "type": "single_choice",
      "required": true,
      "options": [
        "I will collect",
        "Please deliver"
      ]
    }
  ]
}

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":"Order a custom cake","description":"Tell us about your cake. We read every order and message you to confirm the details.","fields":[{"id":"customer_name","label":"Your name","type":"short_text","required":true,"max_length":120},{"id":"customer_phone","label":"Phone","type":"phone","required":true},{"id":"customer_email","label":"Email","type":"email"},{"id":"pickup_date","label":"Date you need the cake","type":"date","required":true},{"id":"occasion","label":"What is the occasion?","type":"single_choice","options":["Birthday","Wedding","Anniversary","Baby shower","Graduation","Corporate event","Just because"]},{"id":"servings","label":"How many servings?","type":"number","required":true,"min":4,"max":200},{"id":"tiers","label":"How many tiers?","type":"single_choice","options":["One tier","Two tiers","Three tiers"]},{"id":"cake_flavour","label":"Cake flavour","type":"single_choice","required":true,"options":["Vanilla","Chocolate","Red velvet","Lemon","Carrot","Coffee","Fruit","Other"]},{"id":"filling","label":"Filling","type":"short_text","max_length":150},{"id":"icing_style","label":"Icing style","type":"single_choice","options":["Buttercream","Fondant","Naked cake","Chocolate ganache drip","Whipped cream"]},{"id":"colours_and_theme","label":"Colours or theme","type":"short_text","max_length":200},{"id":"inscription","label":"What should the inscription say?","type":"short_text","help":"Type it exactly as it should be written.","max_length":80},{"id":"reference_link","label":"Link to a cake you like","type":"url"},{"id":"allergies","label":"Allergies we must know about","type":"long_text","required":true,"help":"Write none if there are none.","max_length":500},{"id":"fulfilment","label":"Collection or delivery?","type":"single_choice","required":true,"options":["I will collect","Please deliver"]}]}'

JSON definition

json
{
  "title": "Order a custom cake",
  "description": "Tell us about your cake. We read every order and message you to confirm the details.",
  "fields": [
    {
      "id": "customer_name",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 120
    },
    {
      "id": "customer_phone",
      "label": "Phone",
      "type": "phone",
      "required": true
    },
    {
      "id": "customer_email",
      "label": "Email",
      "type": "email"
    },
    {
      "id": "pickup_date",
      "label": "Date you need the cake",
      "type": "date",
      "required": true
    },
    {
      "id": "occasion",
      "label": "What is the occasion?",
      "type": "single_choice",
      "options": [
        "Birthday",
        "Wedding",
        "Anniversary",
        "Baby shower",
        "Graduation",
        "Corporate event",
        "Just because"
      ]
    },
    {
      "id": "servings",
      "label": "How many servings?",
      "type": "number",
      "required": true,
      "min": 4,
      "max": 200
    },
    {
      "id": "tiers",
      "label": "How many tiers?",
      "type": "single_choice",
      "options": [
        "One tier",
        "Two tiers",
        "Three tiers"
      ]
    },
    {
      "id": "cake_flavour",
      "label": "Cake flavour",
      "type": "single_choice",
      "required": true,
      "options": [
        "Vanilla",
        "Chocolate",
        "Red velvet",
        "Lemon",
        "Carrot",
        "Coffee",
        "Fruit",
        "Other"
      ]
    },
    {
      "id": "filling",
      "label": "Filling",
      "type": "short_text",
      "max_length": 150
    },
    {
      "id": "icing_style",
      "label": "Icing style",
      "type": "single_choice",
      "options": [
        "Buttercream",
        "Fondant",
        "Naked cake",
        "Chocolate ganache drip",
        "Whipped cream"
      ]
    },
    {
      "id": "colours_and_theme",
      "label": "Colours or theme",
      "type": "short_text",
      "max_length": 200
    },
    {
      "id": "inscription",
      "label": "What should the inscription say?",
      "type": "short_text",
      "help": "Type it exactly as it should be written.",
      "max_length": 80
    },
    {
      "id": "reference_link",
      "label": "Link to a cake you like",
      "type": "url"
    },
    {
      "id": "allergies",
      "label": "Allergies we must know about",
      "type": "long_text",
      "required": true,
      "help": "Write none if there are none.",
      "max_length": 500
    },
    {
      "id": "fulfilment",
      "label": "Collection or delivery?",
      "type": "single_choice",
      "required": true,
      "options": [
        "I will collect",
        "Please deliver"
      ]
    }
  ]
}