A purchase request form that asks before the buying

Updated 2026-10-30

A colleague buys a monitor, then asks for the money back. A manager hears about the order after the box arrives. I would rather the ask came first, with the price, the link and the reason, so I can say yes in one reading.

Who it is for

Small companies, school offices and clubs with no purchasing system, where one person approves spending.

What each question is for

  • Item, number and cost estimate: the figures I check against the budget.
  • Seller and product link: I see exactly what is being bought.
  • Needed by: shows what is urgent.
  • Reason and repeat: tells me if this is a one-off or a standing order.
  • Compared sellers box: a nudge to look around first.

What a requester's AI would ask

"What do you want to buy?" Then "How many?" Then "Why do you need it?" It shows the answers and sends them only after a yes. See agent-fillable forms.

Before you use it

The form takes no payment and no card details. It records the ask and nothing more, and you buy through your usual process. Sort the CSV by the needed-by date to see what is urgent.

A broken item is a repair, not a purchase, so use a work order request for it. Sellers you buy from often can fill in a vendor onboarding form. If you search for a procurement request form, this is the same idea in a smaller size. More tools are in IT and operations forms.

Questions

Can I set a spending limit?

Not as an approval rule. You can set a maximum on the cost field, but most owners sort the CSV by cost and decide for themselves.

How do I handle repeat orders?

Filter `repeat_purchase` for anything not marked one time. Those are candidates for a standing order, so you stop approving the same thing again and again.

Why ask whether sellers were compared?

It is a small prompt, not a check, because the form cannot verify the answer. It reminds people to look around, and you can ask for the comparison when the box is empty.

Try the form

Live demo ยท nothing is saved

Request a purchase

Tell us what you need and why. We reply before anything is ordered.

Why is it needed? (required)
Will you need this again?
I compared at least two sellers

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": "Request a purchase",
  "description": "Tell us what you need and why. We reply before anything is ordered.",
  "fields": [
    {
      "id": "requester_name",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "department",
      "label": "Team or department",
      "type": "short_text",
      "max_length": 100
    },
    {
      "id": "item_description",
      "label": "What do you want to buy?",
      "type": "short_text",
      "required": true,
      "max_length": 200
    },
    {
      "id": "quantity",
      "label": "How many?",
      "type": "number",
      "required": true,
      "min": 1,
      "max": 10000
    },
    {
      "id": "estimated_unit_cost",
      "label": "Estimated cost per item, in your local currency",
      "type": "number",
      "min": 0
    },
    {
      "id": "preferred_vendor",
      "label": "Preferred seller",
      "type": "short_text",
      "max_length": 150
    },
    {
      "id": "product_link",
      "label": "Link to the product",
      "type": "url"
    },
    {
      "id": "needed_by",
      "label": "Needed by",
      "type": "date"
    },
    {
      "id": "purchase_reason",
      "label": "Why is it needed?",
      "type": "single_choice",
      "required": true,
      "options": [
        "Replace something broken",
        "New team member",
        "New project",
        "Running low",
        "Upgrade",
        "Other"
      ]
    },
    {
      "id": "budget_code",
      "label": "Budget or cost code",
      "type": "short_text",
      "max_length": 60
    },
    {
      "id": "repeat_purchase",
      "label": "Will you need this again?",
      "type": "single_choice",
      "options": [
        "One time",
        "Every month",
        "Every quarter",
        "Every year"
      ]
    },
    {
      "id": "compared_sellers",
      "label": "I compared at least two sellers",
      "type": "checkbox"
    },
    {
      "id": "business_case",
      "label": "How will this help the work?",
      "type": "long_text",
      "required": true,
      "max_length": 1000
    }
  ]
}

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":"Request a purchase","description":"Tell us what you need and why. We reply before anything is ordered.","fields":[{"id":"requester_name","label":"Your name","type":"short_text","required":true,"max_length":150},{"id":"department","label":"Team or department","type":"short_text","max_length":100},{"id":"item_description","label":"What do you want to buy?","type":"short_text","required":true,"max_length":200},{"id":"quantity","label":"How many?","type":"number","required":true,"min":1,"max":10000},{"id":"estimated_unit_cost","label":"Estimated cost per item, in your local currency","type":"number","min":0},{"id":"preferred_vendor","label":"Preferred seller","type":"short_text","max_length":150},{"id":"product_link","label":"Link to the product","type":"url"},{"id":"needed_by","label":"Needed by","type":"date"},{"id":"purchase_reason","label":"Why is it needed?","type":"single_choice","required":true,"options":["Replace something broken","New team member","New project","Running low","Upgrade","Other"]},{"id":"budget_code","label":"Budget or cost code","type":"short_text","max_length":60},{"id":"repeat_purchase","label":"Will you need this again?","type":"single_choice","options":["One time","Every month","Every quarter","Every year"]},{"id":"compared_sellers","label":"I compared at least two sellers","type":"checkbox"},{"id":"business_case","label":"How will this help the work?","type":"long_text","required":true,"max_length":1000}]}'

JSON definition

json
{
  "title": "Request a purchase",
  "description": "Tell us what you need and why. We reply before anything is ordered.",
  "fields": [
    {
      "id": "requester_name",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "department",
      "label": "Team or department",
      "type": "short_text",
      "max_length": 100
    },
    {
      "id": "item_description",
      "label": "What do you want to buy?",
      "type": "short_text",
      "required": true,
      "max_length": 200
    },
    {
      "id": "quantity",
      "label": "How many?",
      "type": "number",
      "required": true,
      "min": 1,
      "max": 10000
    },
    {
      "id": "estimated_unit_cost",
      "label": "Estimated cost per item, in your local currency",
      "type": "number",
      "min": 0
    },
    {
      "id": "preferred_vendor",
      "label": "Preferred seller",
      "type": "short_text",
      "max_length": 150
    },
    {
      "id": "product_link",
      "label": "Link to the product",
      "type": "url"
    },
    {
      "id": "needed_by",
      "label": "Needed by",
      "type": "date"
    },
    {
      "id": "purchase_reason",
      "label": "Why is it needed?",
      "type": "single_choice",
      "required": true,
      "options": [
        "Replace something broken",
        "New team member",
        "New project",
        "Running low",
        "Upgrade",
        "Other"
      ]
    },
    {
      "id": "budget_code",
      "label": "Budget or cost code",
      "type": "short_text",
      "max_length": 60
    },
    {
      "id": "repeat_purchase",
      "label": "Will you need this again?",
      "type": "single_choice",
      "options": [
        "One time",
        "Every month",
        "Every quarter",
        "Every year"
      ]
    },
    {
      "id": "compared_sellers",
      "label": "I compared at least two sellers",
      "type": "checkbox"
    },
    {
      "id": "business_case",
      "label": "How will this help the work?",
      "type": "long_text",
      "required": true,
      "max_length": 1000
    }
  ]
}