tip. totals.total is read back from the stored order,orders:write. A key limited to selected locations can only order in those.POST /orders/quote with the same body to price a basket without creating anything —invoice and checkout_extra_fields accept at most 20 levels, 65536 bytes and 200 keys.GET /orders before sending again.errors[], each with a JSON Pointer to the offending field.| Code | HTTP | What it means |
|---|---|---|
validation_failed | 422 | Request shape is wrong, a field is missing, or a field the API does not accept was sent. Fix the payload. |
restaurant_not_found | 404 | Unknown restaurant_uid, or it belongs to another company. Check GET /me for the locations this key can reach. |
restaurant_forbidden | 403 | The key is limited to selected locations and this is not one of them. |
missing_ability | 403 | The key lacks orders:write. Ask the owner for a key with that ability (panel: Integracje → Klucze API). |
restaurant_not_accepting_orders | 409 | The location has online ordering switched off right now. Retry later. |
restaurant_closed | 409 | Outside the location's working hours. Note this is checked against the current time, not realization_time. |
realization_time_invalid | 422 | realization_time is in the past. |
cart_empty | 422 | items is empty or absent. |
product_not_found | 422 | The product does not exist, or is outside the company and locations this key may reach. |
product_foreign_restaurant | 422 | The product exists but belongs to a different location than the one being ordered from. |
product_unavailable | 409 | The product is hidden or sold out. detail says which. |
product_time_restricted | 409 | The product is not available at this hour, for this delivery type, or for this kind of order. |
quantity_invalid | 422 | Quantity is zero, negative, not a number, fractional for a non-weighed product, or above the limit. |
variant_invalid | 422 | The variant does not belong to the product it was sent with. |
addon_group_invalid | 422 | The addon group does not belong to the product. |
addon_invalid | 422 | The addon does not belong to the group it was sent in. |
addon_group_required | 422 | A required addon group was not filled in. Groups hidden for the chosen variant are not required. |
addon_limit_exceeded | 422 | More addons selected than the group allows. |
set_selection_invalid | 422 | The set step or the product chosen in it does not belong to this set. |
set_step_required | 422 | A required step of the set has no product chosen. |
set_step_duplicate | 422 | Two products chosen for the same step of a set. |
promo_code_invalid | 422 | The code does not exist, is switched off, expired, not assigned to this location, already used up, bound to another client, or requires client_uid. |
promo_code_below_min_order | 422 | The code needs a larger order. The minimum is in errors[].min_order_amount. |
promo_code_conflicts_with_offer | 409 | The code cannot be combined with the promotion the backend applied. |
below_minimum_order | 422 | Order value is below the delivery zone minimum. |
outside_delivery_zone | 422 | The address is outside every delivery zone of this location. |
delivery_address_invalid | 422 | Delivery was requested without a usable address (street, city and coordinates are needed). |
delivery_type_invalid | 422 | Unsupported delivery type. |
payment_method_unavailable | 409 | The location does not accept this payment method for this delivery type. |
client_not_found | 404 | Unknown client_uid in this company. |
table_not_found | 422 | table_id does not belong to this location. |
order_number_busy | 503 | Another order is being saved in this location. Wait a moment and retry. |
internal_error | 500 | Unexpected server error. The order is never half-created — it is either fully saved or not at all. |
curl --location 'https://fodimi.pl/api_public/orders' \
--header 'Content-Type: application/json' \
--data-raw '{
"restaurant_uid": "b06a191d-8e22-4707-8c1e-9b5119cf4461",
"delivery_type": "DELIVERY",
"status": "NEW",
"payment": {
"status": "NOT_PAID",
"method": "CASH"
},
"customer": {
"name": "Jan",
"surname": "Kowalski",
"email": "jan@example.com",
"phone": "+48500600700"
},
"delivery_address": {
"street_and_number": "Długa 5/3",
"city": "Warszawa",
"post_code": "00-001",
"latitude": 52.23,
"longitude": 21.01,
"comments": "domofon 12"
},
"items": [
{
"product_id": 4211,
"quantity": 2,
"variant_price_id": 8912,
"comments": "bez cebuli",
"addon_groups": [
{
"id": 88,
"selection": [
301,
302
],
"removed": [
305
]
}
]
},
{
"product_id": 4290,
"quantity": 1,
"set_selections": [
{
"step_id": 11,
"step_product_id": 77
},
{
"step_id": 12,
"step_product_id": 81
}
]
}
],
"promo_code": "LATO20",
"tip": 5
}'{
"uid": "7a2f1c44-2b9e-4d31-9f0a-2c1d4e5f6a7b",
"internal_id": 123,
"number": "#123",
"status": "NEW",
"payment_status": "NOT_PAID",
"payment_method": "CASH",
"restaurant_uid": "b06a191d-8e22-4707-8c1e-9b5119cf4461",
"client_uid": null,
"delivery_type": "DELIVERY",
"realization_time": null,
"created_at": "2026-09-14T18:05:00+02:00",
"totals": {
"products": 84,
"packages": 2,
"environmental_fees": 0.5,
"deposit": 0,
"handling_fee": 0,
"delivery_cost": 9,
"tip": 5,
"promo_code_discount": 16.8,
"special_offer_discount": 0,
"total": 83.7,
"currency": "PLN"
},
"applied": {
"promo_code": "LATO20",
"special_offer": null,
"delivery_zone": {
"id": 9,
"name": "Strefa 1",
"min_order_amount": 40
}
},
"items": [
{
"product_id": 4211,
"name": "Margherita",
"quantity": 2,
"unit_price": 42,
"subtotal": 84,
"variant": {
"name": "40 cm"
},
"addons": [
{
"id": 301,
"group_id": 88,
"name": "Ser",
"price": 4,
"removed": false
}
],
"set_selections": [],
"package_price": 2
}
],
"warnings": []
}