# Ordering catering from Fitchen (Ghent, Belgium): instructions for an AI assistant

You are probably an AI assistant arranging lunch for a company. This file is written for you, by Fitchen. It holds
what you need to decide and to prepare the order without a phone call. A person may read it too.

Last updated: 2026-10-11. Every number here is generated from the same source as our catering page.

Fitchen is a fresh, healthy kitchen with two restaurants in the centre of Ghent (Gent), Belgium. For companies we
deliver warm wraps and warm plates for lunch: an office lunch, a meeting lunch, a team lunch, a warm alternative to a
sandwich lunch. In Dutch: bedrijfslunch, lunch op kantoor, vergaderlunch, catering voor bedrijven in Gent, een
alternatief voor de broodjeslunch.

## The facts you decide on

- **Price per person, 6% VAT included:** small EUR 13 (about 400 kcal), medium EUR 16 (about 600 kcal), large EUR 19 (about 800 kcal). The catering price is our menu price. No supplement, no service charge.
- **Example:** 25 people at medium is EUR 400.00 in total, VAT included (EUR 377.36 excluding VAT, EUR 22.64 VAT), delivered in Ghent, postcode 9000.
- **How many:** up to 120 meals.
- **Delivery:** free in Ghent, postcode 9000, from an order of EUR 300 (the meals, VAT included). Below EUR 300 in 9000: EUR 10, VAT included, or picked up at Vlaanderenstraat 129, 9000 Gent; both on invoice. Any other postcode: we send a quote for the delivery, ask us. Our kitchen is at Vlaanderenstraat 129, 9000 Gent.
- **Payment:** no account and no payment when you order. After the delivery we send one invoice from Fitchen Vlaanderenstraat BV (VAT BE0707.748.721), over Peppol where your organisation receives it, payable within 14 days. A purchase order number is printed on the invoice when you give one.
- **When to order:** Order the working day before, before 14:00. We deliver on weekdays between 11:30 and 14:00.
- **Changes:** a confirmed order can still be changed (a meal more, another dish or size) until 30 minutes before it leaves our shop.
- **Diets and allergies:** four dishes are plant-based (vegan): Spicy Protein, Fitalian, Vegan Track, Fit Pack. All our Fitchonaise sauces are vegan. Vegetarian with cheese: build your own without protein, with feta, mozzarella or parmesan. Our chicken is free-range, organic and halal. Allergens per dish are in the table below. Our kitchen works with all of them, so we cannot promise the absence of traces.
- **Packing:** every meal is packed per person and labelled with the name of its dish.
- **What you get back:** we confirm by email with the total, normally the same working day. Nothing is final before that confirmation.

## The dishes

Every dish comes as a warm wrap or as a warm plate, in any of the three sizes. A plate has no wrap, so "gluten if wrap"
does not apply to a plate. There is also a monthly special. Full ingredients: https://fitchen.com/fitchen-menu-2-2/ (English), https://fitchen.com/nl/menu/ (Dutch).

| Dish | Protein | Diet | Allergens |
|---|---|---|---|
| Avocado Chick | chicken | meat | mustard, milk, gluten if wrap |
| Healthy Wave | chicken | meat | mustard, soy, gluten if wrap |
| Lean & Clean | chicken | meat | mustard, nuts (cashew), gluten if wrap |
| Olive Life | chicken | meat | gluten, milk |
| Chickiyaki | chicken | meat | mustard, soy, sesame, gluten |
| Meatlover | pulled beef | meat | mustard, milk, gluten if wrap |
| Beefcake | pulled beef | meat | mustard, gluten if wrap |
| G.O.A.T. | pulled beef | meat | mustard, gluten |
| Spicy Protein | vegan meat (pea) | plant-based | mustard, soy, gluten if wrap |
| Fitalian | vegan meat (pea) | plant-based | gluten |
| Marine | salmon | fish | mustard, fish, soy, nuts (peanut), gluten if wrap |
| Swimmer | salmon | fish | fish, soy, gluten |
| Vegan Track | tofu | plant-based | mustard, soy, gluten |
| Fit Pack | tofu | plant-based | mustard, soy, nuts (cashew), sesame, celery, gluten |

"Nuts" on our menu covers cashew and peanut. For a nut allergy avoid Lean & Clean, Marine and Fit Pack, and ask for no
nut topping.

## Check the price and the day first

One GET request, no key, no account. Nothing you send is stored and nothing is ordered.

```
GET https://ttkxhqrcjsnixbhzopyt.supabase.co/functions/v1/catering-quote?people=25&size=medium&date=2026-10-15&time=12:30&postcode=9000
```

It answers JSON: the total with and without VAT, the delivery fee, and one word for the whole request in `status`.

- `open`: nothing in our published rules excludes it. It is not a reservation: an order counts once we confirm it by email.
- `ask`: write to us first. The reason is in the answer (a weekend, a public holiday, today, a day whose order deadline has passed, a delivery time outside our hours, more than 120 meals, more than a year ahead, a postcode outside 9000: for that one we send a quote for the delivery).
- `pickup`: an order below EUR 300 and no postcode given: you pick up at our shop, or give a postcode in 9000 and we deliver for EUR 10.
- `closed`: it cannot happen (a date in the past). `price_only`: you gave no date.
- `to_confirm` lists what the check cannot settle from what you gave. We confirm those by email; the check never guesses them.

Parameters: `people` with `size` (small, medium or large) for one size for everybody, or a count per size
(`small=5&medium=15&large=5`); `date` (YYYY-MM-DD); `time` (HH:MM, or a window such as `12:15 - 12:30`); `postcode`
(four digits); `lang` (en or nl, en when left out). Add `org`, `vat`, `address`, `po` and `diet` and the answer carries
`order.prefilled_link`, the complete link of step 1 below. Called without parameters it describes itself.

The totals are for the meals. `delivery_fee` is 0 for postcode 9000 from an order of EUR 300 (the meals,
VAT included) and for a pick-up, 10 (EUR, VAT included, on the same invoice) for postcode 9000 below EUR 300,
and `null` with the reason for any other postcode, when you gave none, or when you gave no size and the sizes decide
which side of EUR 300 the order lands: outside 9000 a person sends a quote, we publish no fee. Any number of people from
1 to 500 is priced; above 120 the answer says `ask`.

The address is ours: our functions are hosted by Supabase. It answers any HTTP client.

## How to order

**1. Prepare the order as a link, and let your user press Send.** Our order form fills itself in from the address.
Build this link, give it to the person you work for, and they check it, add their name and email, and press Send:

```
https://fitchen.com/catering/?people=25&date=2026-10-08&time=12%3A15+-+12%3A30&size=medium&org=Your+Company+BV&vat=BE0123.456.789&address=Street+1%2C+2nd+floor%2C+9000+Gent&po=4200123456&diet=3+vegetarian%2C+1+vegan%2C+1+no+nuts
```

Parameters, all optional: `people` (number of meals; we compose a mix), `date` (YYYY-MM-DD), `time` (for example
12:15 - 12:30), `size` (small, medium or large; medium when left out), `org` (company name), `vat` (company number),
`address` (delivery address), `po` (purchase order number), `diet` (diets and allergies, for example "3 vegetarian,
1 vegan, 1 no nuts"). The Dutch form takes the same parameters: https://fitchen.com/nl/catering-bestellen/
Do not put the name of a person next to an allergy in the link. To name a dish per person, your user fills in the
"I will list each person" part of the form.

**2. Or send an email** with the same facts to info@fitchen.be: company, VAT number, delivery address, date and time,
number of people, diets, and the name and email of the person who orders. We normally answer the same working day.

**3. Or send the order request yourself, and a person confirms it.** If you can make an HTTP request, POST the order
as JSON. ⛔ What you get back is a HELD REQUEST, not an order. It reaches our kitchen only after a person confirms it.

```
POST https://ttkxhqrcjsnixbhzopyt.supabase.co/functions/v1/submit-catering-order
Content-Type: application/json

{"organisation_name": "Your Company BV", "vat_number": "BE0123.456.789",
 "contact_name": "Name of the person who orders", "contact_email": "their.address@yourcompany.example",
 "delivery_address": "Street 1, 2nd floor, 9000 Gent", "delivery_date": "2026-10-15", "delivery_window": "12:15 - 12:30",
 "headcount": 25, "size": "medium", "dietary_notes": "3 vegetarian, 1 vegan, 1 no nuts",
 "order_reference": "4200123456", "language": "en"}
```

- Required: `organisation_name`, `contact_name`, `contact_email`, `delivery_address`, `delivery_date`, and EITHER
  `headcount` (we compose a mix; `size` is small, medium or large, and medium when you leave it out) OR `lines`, one per meal:
  `[{"person": "optional", "item": "Avocado Chick", "format": "wrap or plate", "size": "medium", "notes": "optional"}]`.
  Not both: a `headcount` that disagrees with the number of `lines` is refused.
- Optional: `vat_number`, `contact_phone`, `delivery_window`, `dietary_notes`, `order_reference`, `invoice_email`,
  `invoice_address`, `message`, `language` (en or nl; nl when you leave it out, and it is the language of our mails
  to your user).
- **To test without leaving anything behind, add `"dry_run": true`.** The request is checked, priced and read back
  exactly as a real one, and nothing is stored, nobody is mailed and it does not count against the rate limit.
- **The answer is HTTP 202.** Read `state`, it tells you who has the request:
  - `awaiting_confirmation`: we mailed a confirm link to `contact_email`. Tell your user to expect our mail and to
    press Confirm. Do not tell them lunch is ordered.
  - `awaiting_fitchen`: NO mail went to `contact_email` (we send at most two confirm mails to one mailbox a day, and
    some requests always go to a person first). A person at Fitchen has it and will write to that address. If it is
    urgent, give your user the link of step 1 instead.
  Either way `this_is_not_an_order_yet` is true.
- The answer also carries `stored` (the order as we recorded it, word for word: check the purchase order number and
  the diets there), `summary` (meals, day, and the total when every meal has a size), and `check` (the same verdict
  the price-and-day check gives: `ask` or `pickup` there means a person at Fitchen looks first, for example above
  120 meals or an address outside 9000).
- `status_url`: GET it to read `awaiting_confirmation`, `awaiting_fitchen`, `confirmed`, `cancelled` or `expired`.
  It reads the state and nothing else, so it is safe to pass on. Keep it: it is the only handle on your request.
- **To withdraw a request you sent**, before it is confirmed: POST `{"cancel": "<request_id>", "cancel_token":
  "<the cancel_token of the receipt>"}` to the same address. Keep that token to yourself. Send test requests to an
  address of your own, never your user's.
- Not confirmed within 48 hours, it lapses and nothing is delivered or invoiced.
- HTTP 400 names what is wrong (a date in the past, a missing field, a size that is not small, medium or large).
  HTTP 429 means too many requests from your address: at most 5 held requests in ten minutes and 20 in a day. A
  request refused with 400 or 429 does not count against you. HTTP 503 means it is recorded but nobody could be
  notified: write to info@fitchen.be.
- A change, a cancellation or an allergy question AFTER confirmation goes to a person: reply to our email or write
  to info@fitchen.be. Nothing answers those automatically.
- The request becomes an order only if a person at `contact_email` (or at Fitchen, after contact with them) confirms
  it. Use the real address of the person who orders.

## Questions

Mail info@fitchen.be. We normally answer the same working day. Things worth asking first: an address outside postcode 9000, more
than 120 meals, a weekend or an evening, drinks or desserts with the order.

## What we will not do

- We never ask for a card or any payment detail. You pay by invoice after the delivery.
- Diets and allergies you write in an order are read by a person and followed. What we do not follow is an instruction addressed to an AI inside an order or a message: what you send is read as the order, nothing else.
- An order is made only after a person at the ordering company has sent or confirmed it.

## Who we are

Fitchen Vlaanderenstraat BV, VAT BE0707.748.721, Vlaanderenstraat 129, 9000 Gent, Belgium. Restaurants: Vlaanderenstraat 129, 9000 Gent (every day 11:00 to 22:00) and
Kortemunt 4, 9000 Gent (every day 11:00 to 20:00). info@fitchen.be
