Orders
Customer orders and order management
Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Query Parameters
1 <= value11 <= value <= 1000200Item state(s) to include (single value or array)
Keep only items whose root belongs to one of these prep (printer) groups
Filter by tab type (e.g. table, takeaway)
Order channel/source: POS, ONLINE, QR, KIOSK
ISO start of parent dispatch created_at range
ISO end of parent dispatch created_at range
Hide items whose parent tab is aborted
Value in
- "created_at"
- "kitchen_sort_order"
Value in
- "asc"
- "desc"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/v1/kitchen-dispatch-items"{ "status": "string", "data": { "items": [ { "amounts": { "grossAmountCents": 0, "vatAmountCents": 0, "netAmountCents": 0, "basis": "current", "vatComplete": true }, "vatRateBasisPoints": 0 } ], "pagination": { "page": 0, "limit": 0, "total": 0, "totalPages": 0, "hasMore": true } }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Kitchen dispatch item UUID
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/api/v1/kitchen-dispatch-items/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "status": "success", "data": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba", "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63", "kitchenDispatchEmptied": true, "deleted": true }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Kitchen dispatch item UUID (the split_of_kitchen_dispatch_item reference)
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/v1/kitchen-dispatch-items/497f6eca-6276-4993-bfeb-53cbbbba6f08/split"{ "status": "success", "data": { "items": [ { "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", "basePrice": 0, "modificationPrice": 0, "price": 0, "title": "string", "currencyCode": "string", "modifications": [ { "title": "string", "variantId": 0, "variantGroupId": 0, "type": "variant", "amount": 0 } ] } ], "originalItemId": "615bd467-16ca-431b-ba18-1f0f53c5dd98" }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Kitchen dispatch item UUID
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Number of parts to split the item into (2-10)
2 <= value <= 10Tab UUID that the item belongs to
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/kitchen-dispatch-items/497f6eca-6276-4993-bfeb-53cbbbba6f08/split" \ -H "Content-Type: application/json" \ -d '{ "numberOfParts": 2, "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63" }'{ "status": "success", "data": { "splitItemIds": [ "5ee8fb4d-dece-4cbd-a7ce-6c04b3d533f4" ], "originalItemId": "615bd467-16ca-431b-ba18-1f0f53c5dd98" }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Kitchen dispatch item UUID
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Whether the item is takeaway
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/api/v1/kitchen-dispatch-items/497f6eca-6276-4993-bfeb-53cbbbba6f08/takeaway" \ -H "Content-Type: application/json" \ -d '{ "is_takeaway": true }'{ "status": "string", "data": { "uuid": "string", "isTakeaway": true }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Kitchen dispatch item UUID
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Reason code from the locked enum
Value in
- "staff_mistake"
- "customer_change"
- "wrong_make"
- "quality_issue"
- "out_of_stock"
- "allergy"
- "other"
Optional free-text note; REQUIRED when reasonCode is "other"
length <= 500Optional partial-void quantity in basis-points (null = full quantity). Stored only in audit.
1 <= valueWhen true, suppress the order.reversed webhook so printer-service does not print a KORRBONG correction ticket. Used by cafe-mode void-and-replace flows.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/kitchen-dispatch-items/497f6eca-6276-4993-bfeb-53cbbbba6f08/void" \ -H "Content-Type: application/json" \ -d '{ "reasonCode": "staff_mistake" }'{ "status": "success", "data": { "kitchenDispatchItemId": "bd4e0699-db8c-4617-88c6-d7e731311ade", "previousItemState": null, "newItemState": "aborted", "reasonCode": "staff_mistake", "reasonNote": null, "dispatchAborted": true }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Kitchen dispatch item UUIDs to advance
1 <= itemsTarget item state
Value in
- "pending"
- "accepted"
- "in_preparation"
- "ready_to_deliver"
- "delivered"
- "rejected"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/kitchen-dispatch-items/advance" \ -H "Content-Type: application/json" \ -d '{ "itemIds": [ "0e636f28-7bba-4a96-9d8b-f3b7350a8339" ], "state": "pending" }'{ "status": "string", "data": { "itemsAdvanced": 0, "dispatches": [ {} ] }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Reason code from the locked enum, applied to every item in the batch
Value in
- "staff_mistake"
- "customer_change"
- "wrong_make"
- "quality_issue"
- "out_of_stock"
- "allergy"
- "other"
Optional free-text note; REQUIRED when reasonCode is "other"
length <= 500Kitchen dispatch items to void
1 <= items <= 100When true, suppress the order.reversed webhook so printer-service does not print a KORRBONG per affected dispatch. Used by cafe-mode void-and-replace flows.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/kitchen-dispatch-items/void-batch" \ -H "Content-Type: application/json" \ -d '{ "reasonCode": "staff_mistake", "items": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08" } ] }'{ "status": "success", "data": { "reasonCode": "staff_mistake", "reasonNote": null, "results": [ { "kitchenDispatchItemId": "bd4e0699-db8c-4617-88c6-d7e731311ade", "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba", "previousItemState": null, "newItemState": "aborted", "dispatchAborted": true } ], "affectedDispatchIds": [ "32c56ec6-120d-4dfe-bf7b-e9dc2e042af2" ] }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Query Parameters
Page number
1 <= value1Items per page (max 1000)
1 <= value <= 100050Include order items in response. Items are returned FLAT with parentKitchenDispatchItemId for hierarchy building.
falseInclude tab notes attached to each order (notes are polymorphic, keyed by tab uuid). Used by the KDS.
falseInclude authorized descendants of the selected X-Location-Id.
falseOptional comma-separated subset of the resolved location hierarchy.
^[0-9]+(,[0-9]+)*$length <= 11000Force PostgreSQL only (skip BigQuery). Use for KDS/real-time displays where state must be fresh.
falseKDS-only: apply limit to terminal/done dispatches only and always return every active (in-progress) dispatch in the window, so an open ticket never ages out of the newest-N set at a high-volume venue. Leave off for paginated history/audit views.
falseHide KDs whose parent tab was force-closed (aborted). Use for the active KDS so staff don't see orphan tickets they cannot advance. Leave off for order history and audit views.
falseFilter by daily order number
Filter by state(s)
Filter by tab type(s)
Filter by table/QR code ID
Filter by tab member email (partial match)
Minimum total price in cents
Maximum total price in cents
Filter by order source/channel (POS, ONLINE, QR, KIOSK)
Filter orders containing a specific inventory item ID
Filter by prep group (printer group) IDs
Narrow to the orders credited to the calling staff member. Attribution is per line item — who rang the item in, falling back to the tab's initiator — the same rule the POS sales report and the purchase history use. There is deliberately no parameter for scoping to another staff member: narrowing is only ever to the caller. Requires a staff (retailer user) token.
falseFilter orders created after this date (date or date-time; default: 24h ago)
^\d{4}-\d{2}-\d{2}(T.*)?$Filter orders created before this date (date-only = inclusive end-of-day; default: now)
^\d{4}-\d{2}-\d{2}(T.*)?$Field to sort by
"created_at"Value in
- "created_at"
- "daily_ordinal_number"
- "updated_at"
Sort order
"desc"Value in
- "asc"
- "desc"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/v1/orders"{ "status": "success", "data": { "items": [ { "amounts": { "grossAmountCents": 0, "vatAmountCents": 0, "netAmountCents": 0, "basis": "current", "vatComplete": true }, "currentVatBreakdown": [ { "grossAmountCents": 0, "vatAmountCents": 0, "netAmountCents": 0, "basis": "current", "vatComplete": true, "vatRateBasisPoints": 0 } ], "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {}, "provider": "FOODORA", "customerName": "string", "customerPhone": "string", "fulfilment": "delivery", "deliveryAddress": { "street": "string", "city": "string", "postalCode": "string", "formattedAddress": "string", "comment": "string" }, "pricing": { "discountCents": 0, "merchantDiscountCents": 0, "discountUnattributedCents": 0, "grossByLine": { "property1": 0, "property2": 0 }, "fees": { "totalCents": 0, "discountsCents": 0, "liabilityCents": 0, "parts": [ { "type": "string", "amountCents": 0, "vatPercentage": 0 } ] }, "platform": { "grandTotalCents": 0, "totalNetCents": 0, "vatTotalCents": 0, "payRestaurantCents": 0, "collectFromCustomerCents": 0, "riderTipCents": 0, "deliveryFees": [ { "name": "string", "amountCents": 0 } ] } }, "acceptance": { "twoStep": true, "acceptedAt": "string" } }, "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", "locationId": 0, "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63", "dailyOrderNumber": 0, "externalOrderId": "string", "externalOrderNumber": "string", "state": "not_sent", "orderType": "TAKEAWAY", "orderChannel": "ONLINE", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "completedAt": "2019-08-24T14:15:22Z", "tabType": "string", "storefrontQrCodeId": "string", "tabMemberEmail": "user@example.com", "tabMemberName": "string", "tabMemberImageUrl": "string", "memberCount": 0, "totalPrice": 0, "itemCount": 0, "totalVatAmountCents": 0, "vatBreakdown": [ { "vatRateBasisPoints": 0, "vatAmountCents": 0 } ], "message": "string", "source": "string", "venueName": "string", "tableName": "string", "items": [ { "amounts": { "grossAmountCents": 0, "vatAmountCents": 0, "netAmountCents": 0, "basis": "current", "vatComplete": true }, "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", "itemId": 0, "title": "string", "titlePrep": "string", "imageUrl": "string", "quantity": 0, "quantityCents": 0, "measurement": { "unit": "string", "amountMicros": 0, "priceQuantityMicros": 0, "unitPriceCents": 0 }, "price": 0, "basePrice": 0, "discount": 0, "status": "string", "comments": null, "variants": [ { "id": 0, "name": "string", "price": 0, "quantityCents": 0, "priceCents": 0, "modification_id": 0, "status": "string" } ], "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917", "createdAt": "2019-08-24T14:15:22Z", "servingCenterId": 0, "printerGroupId": "71e7d528-f1da-4bb0-b22e-a22ff39f2668", "tabMemberEmail": "user@example.com", "tabMemberName": "string", "parentKitchenDispatchItemId": "3bbaeadd-7090-47af-ac54-fe01e185210d", "itemState": "string", "firedAt": "2019-08-24T14:15:22Z", "salesItemType": "string", "surplusEntryId": 0, "zeroTicket": true, "isTakeaway": true, "vatRateBasisPoints": 0, "vatAmountCents": 0 } ], "notes": [ { "uuid": "string", "entityType": "string", "entityId": "string", "note": "string", "locationId": 0, "sortOrder": 0, "createdByRetailerUserId": 0, "createdByName": "string", "updatedByRetailerUserId": 0, "updatedByName": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ], "events": [ { "event": "string", "created_at": "2019-08-24T14:15:22Z" } ], "desiredPickupTime": "2019-08-24T14:15:22Z", "storeCommitmentTimeout": "2019-08-24T14:15:22Z", "paymentBlocked": true, "printTickets": [ { "destinationKey": "string", "latestJobId": "286355e0-1170-49f6-afc1-77b69d8511c3", "printerGroupId": "71e7d528-f1da-4bb0-b22e-a22ff39f2668", "printerGroupName": "string", "printerId": "dcfa0f1a-9e85-45da-bde8-dd0c8dec8352", "printerName": "string", "printerOnline": true, "state": "printed", "attempts": 0, "failedAttempts": 0, "firstCreatedAt": "2019-08-24T14:15:22Z", "lastUpdatedAt": "2019-08-24T14:15:22Z", "failureReason": "string", "jobs": [ { "jobId": "9d222c6d-893e-4e79-8201-3c9ca16a0f39", "state": "string", "createdAt": "2019-08-24T14:15:22Z", "failureReason": "string", "isReprint": true } ] } ], "deliveredAt": "2019-08-24T14:15:22Z" } ], "pagination": { "page": 1, "limit": 1, "total": 0, "totalPages": 0 } }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Kitchen dispatch UUID to cancel
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
uuiduuidOptional cancellation reason (for audit trail)
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08/cancel" \ -H "Content-Type: application/json" \ -d '{}'{ "status": "success", "data": { "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba", "previousState": "string", "newState": "aborted", "cancelledAt": "2019-08-24T14:15:22Z", "cancelledBy": 0, "reason": "string", "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63" }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
UUID of the kitchen dispatch to sync
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
UUID of the tab the dispatch belongs to (validated server-side)
uuidValue in
- "ONLINE"
- "QR"
- "KIOSK"
- "POS"
KDI UUIDs to set to item_state=aborted. Already-aborted ids pass through.
New items to insert into the dispatch (same shape as /orders/create items[]).
When true, skip the order.reversed webhook so printer-functions does not print a KORRBONG. Cafe-mode locations pass this; merchant locations omit it.
Reason for the voids. Defaults to "customer_change".
Value in
- "staff_mistake"
- "customer_change"
- "wrong_make"
- "quality_issue"
- "out_of_stock"
- "allergy"
- "other"
Required when voidReasonCode === "other".
length <= 500Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08/sync" \ -H "Content-Type: application/json" \ -d '{ "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63", "locationId": 0, "order_channel": "ONLINE", "voids": [ "d24fced2-52dd-4999-8879-9cca746d9981" ], "inserts": [ { "id": 0, "quantity_cents": 1, "variants": [ { "id": 0 } ], "comments": [ "string" ] } ] }'{ "status": "success", "data": { "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba", "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63", "inheritedItemState": "string", "dispatchAborted": true, "voided": [ { "kitchenDispatchItemId": "bd4e0699-db8c-4617-88c6-d7e731311ade", "previousItemState": null, "newItemState": "aborted", "wasAlreadyAborted": true } ], "inserted": [ { "kitchen_dispatch_item_id": "c16d6b21-40da-4a68-bd1f-47966ffa79cb", "item_id": 0, "quantity": 0, "quantity_cents": 0, "price_cents": 0, "measurement": { "unit": "string", "amountMicros": 0, "priceQuantityMicros": 0, "unitPriceCents": 0 }, "status": "string" } ] }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Order ID (kitchen_dispatch.uuid)
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "status": "success", "data": { "amounts": { "grossAmountCents": 0, "vatAmountCents": 0, "netAmountCents": 0, "basis": "current", "vatComplete": true }, "currentVatBreakdown": [ { "grossAmountCents": 0, "vatAmountCents": 0, "netAmountCents": 0, "basis": "current", "vatComplete": true, "vatRateBasisPoints": 0 } ], "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {}, "provider": "FOODORA", "customerName": "string", "customerPhone": "string", "fulfilment": "delivery", "deliveryAddress": { "street": "string", "city": "string", "postalCode": "string", "formattedAddress": "string", "comment": "string" }, "pricing": { "discountCents": 0, "merchantDiscountCents": 0, "discountUnattributedCents": 0, "grossByLine": { "property1": 0, "property2": 0 }, "fees": { "totalCents": 0, "discountsCents": 0, "liabilityCents": 0, "parts": [ { "type": "string", "amountCents": 0, "vatPercentage": 0 } ] }, "platform": { "grandTotalCents": 0, "totalNetCents": 0, "vatTotalCents": 0, "payRestaurantCents": 0, "collectFromCustomerCents": 0, "riderTipCents": 0, "deliveryFees": [ { "name": "string", "amountCents": 0 } ] } }, "acceptance": { "twoStep": true, "acceptedAt": "string" } }, "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", "locationId": 0, "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63", "dailyOrderNumber": 0, "externalOrderId": "string", "externalOrderNumber": "string", "state": "not_sent", "orderType": "TAKEAWAY", "orderChannel": "ONLINE", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "completedAt": "2019-08-24T14:15:22Z", "tabType": "string", "storefrontQrCodeId": "string", "tabMemberEmail": "user@example.com", "tabMemberName": "string", "tabMemberImageUrl": "string", "memberCount": 0, "totalPrice": 0, "itemCount": 0, "totalVatAmountCents": 0, "vatBreakdown": [ { "vatRateBasisPoints": 0, "vatAmountCents": 0 } ], "message": "string", "source": "string", "venueName": "string", "tableName": "string", "items": [ { "amounts": { "grossAmountCents": 0, "vatAmountCents": 0, "netAmountCents": 0, "basis": "current", "vatComplete": true }, "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", "itemId": 0, "title": "string", "titlePrep": "string", "imageUrl": "string", "quantity": 0, "quantityCents": 0, "measurement": { "unit": "string", "amountMicros": 0, "priceQuantityMicros": 0, "unitPriceCents": 0 }, "price": 0, "basePrice": 0, "discount": 0, "status": "string", "comments": null, "variants": [ { "id": 0, "name": "string", "price": 0, "quantityCents": 0, "priceCents": 0, "modification_id": 0, "status": "string" } ], "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917", "createdAt": "2019-08-24T14:15:22Z", "servingCenterId": 0, "printerGroupId": "71e7d528-f1da-4bb0-b22e-a22ff39f2668", "tabMemberEmail": "user@example.com", "tabMemberName": "string", "parentKitchenDispatchItemId": "3bbaeadd-7090-47af-ac54-fe01e185210d", "itemState": "string", "firedAt": "2019-08-24T14:15:22Z", "salesItemType": "string", "surplusEntryId": 0, "zeroTicket": true, "isTakeaway": true, "vatRateBasisPoints": 0, "vatAmountCents": 0 } ], "notes": [ { "uuid": "string", "entityType": "string", "entityId": "string", "note": "string", "locationId": 0, "sortOrder": 0, "createdByRetailerUserId": 0, "createdByName": "string", "updatedByRetailerUserId": 0, "updatedByName": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ], "events": [ { "event": "string", "created_at": "2019-08-24T14:15:22Z" } ], "desiredPickupTime": "2019-08-24T14:15:22Z", "storeCommitmentTimeout": "2019-08-24T14:15:22Z", "paymentBlocked": true, "printTickets": [ { "destinationKey": "string", "latestJobId": "286355e0-1170-49f6-afc1-77b69d8511c3", "printerGroupId": "71e7d528-f1da-4bb0-b22e-a22ff39f2668", "printerGroupName": "string", "printerId": "dcfa0f1a-9e85-45da-bde8-dd0c8dec8352", "printerName": "string", "printerOnline": true, "state": "printed", "attempts": 0, "failedAttempts": 0, "firstCreatedAt": "2019-08-24T14:15:22Z", "lastUpdatedAt": "2019-08-24T14:15:22Z", "failureReason": "string", "jobs": [ { "jobId": "9d222c6d-893e-4e79-8201-3c9ca16a0f39", "state": "string", "createdAt": "2019-08-24T14:15:22Z", "failureReason": "string", "isReprint": true } ] } ], "deliveredAt": "2019-08-24T14:15:22Z" }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Optional custom field operations, saved atomically with this record. Omitted values are unchanged; null clears. Use fieldId or a stable key. expectedVersion is optional; supply it to reject conflicting edits.
items <= 100Response Body
application/json
curl -X PATCH "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{ "customFields": [ {} ] }'{ "status": "string", "data": { "id": "string", "locationId": 0, "customFields": [ { "fieldId": "string", "key": "string", "label": "string", "group": "string", "type": "string", "displayValue": "string", "value": null, "version": 0, "status": "string" } ], "metadata": { "customFields": {} } }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Order ID (kitchen_dispatch.uuid)
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Extra minutes of preparation time the kitchen bought when accepting, as a whole number of minutes. Same semantics and same deliberate schema looseness as on the state transition endpoint: values outside 1–25 whole minutes are dropped server-side rather than 400'd, because a schema rejection would block the ACCEPT itself — and an unanswered marketplace order is auto-rejected against the venue's SLO.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08/accept" \ -H "Content-Type: application/json" \ -d '{}'{ "status": "success", "data": { "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5", "acceptedAt": null, "alreadyAccepted": true, "twoStep": true, "previousState": "string", "state": "string", "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63" }, "meta": {}}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Order ID (kitchen_dispatch.uuid)
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Target state to advance items to
Value in
- "pending"
- "accepted"
- "in_preparation"
- "ready_to_deliver"
- "delivered"
- "rejected"
Optional: advance only items in this prep group (printer group)
uuidOptional: advance only items in this course
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08/advance-items" \ -H "Content-Type: application/json" \ -d '{ "state": "pending" }'{ "status": "success", "data": { "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5", "targetState": "string", "itemsAdvanced": 0, "derivedOrderState": "string", "previousOrderState": "string", "heldItems": { "property1": 0, "property2": 0 } }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Kitchen dispatch UUID to edit
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Items to edit. Set quantityCents to 0 to remove an item.
1 <= itemsResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08/edit-items" \ -H "Content-Type: application/json" \ -d '{ "items": [ { "kitchenDispatchItemId": "bd4e0699-db8c-4617-88c6-d7e731311ade", "quantityCents": 0 } ] }'{ "status": "success", "data": { "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5", "updated": 0, "removed": 0 }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Kitchen dispatch UUID the lines belong to
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Lines to write notes on. Send the full note list per line.
1 <= itemsResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08/item-comments" \ -H "Content-Type: application/json" \ -d '{ "items": [ { "kitchenDispatchItemId": "bd4e0699-db8c-4617-88c6-d7e731311ade", "comments": [ "string" ] } ] }'{ "status": "success", "data": { "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5", "tabId": "string", "items": [ { "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", "comments": [ "string" ] } ] }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Kitchen dispatch (order) UUID
uuidKitchen dispatch item UUID
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Item status: COMPLETED, UNAVAILABLE, or null (reset)
If provided, update this modification (variant) instead of the item
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/497f6eca-6276-4993-bfeb-53cbbbba6f08/status" \ -H "Content-Type: application/json" \ -d '{ "status": "COMPLETED" }'{ "status": "success", "data": { "success": true, "itemId": "f11b669d-7201-4c21-88af-d85092f0c005", "status": "COMPLETED" }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Kitchen dispatch (order) UUID
uuidKitchen dispatch item UUID
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/497f6eca-6276-4993-bfeb-53cbbbba6f08/status/logs"{ "status": "success", "data": { "logs": [ { "id": 0, "itemId": "string", "status": "COMPLETED", "isModification": true, "retailerUserId": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ] }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Kitchen dispatch (order) UUID
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Array of status updates
1 <= itemsResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08/items/status" \ -H "Content-Type: application/json" \ -d '{ "updates": [ { "id": "string", "status": "COMPLETED" } ] }'{ "status": "success", "data": { "success": true, "updatedCount": 0, "failedItems": [ { "id": "string", "isModification": true, "error": "string" } ] }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Order ID (kitchen_dispatch.uuid)
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
The serving center ID to update state for
The new serving center state
Value in
- "pending"
- "accepted"
- "in_preparation"
- "ready_to_deliver"
- "delivered"
- "rejected"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08/serving-center-state" \ -H "Content-Type: application/json" \ -d '{ "servingCenterId": 0, "state": "pending" }'{ "status": "success", "data": { "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5", "servingCenterId": 0, "previousServingCenterState": "string", "newServingCenterState": "string", "orderState": "string", "orderStateChanged": true, "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63", "updatedAt": "2019-08-24T14:15:22Z", "updatedBy": 0 }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Path Parameters
Order ID (kitchen_dispatch.uuid)
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
The new state to transition to
Value in
- "not_sent"
- "pending"
- "accepted"
- "in_preparation"
- "ready_to_deliver"
- "delivered"
- "rejected"
- "rejected_and_acknowledged"
- "staged_awaiting_payment"
- "scheduled"
- "aborted"
Why the order was rejected, in provider-neutral terms: items_unavailable, closing_soon or other. Only meaningful when transitioning to rejected, rejected_and_acknowledged or aborted on a marketplace order — the KDS asks staff and the value rides the order.updated event out to the originating marketplace, which turns it into its own reason code and consumer-facing copy. Omitted for first-party rejections. Deliberately NOT constrained by an enum here: an unrecognised value is dropped and the marketplace falls back to a generic reason, because a schema rejection would block the rejection itself — and an unanswered marketplace order is auto-rejected against the venue's SLO.
Extra minutes of preparation time the kitchen bought when accepting, as a whole number of minutes. Only meaningful when transitioning to accepted on a marketplace order — the KDS offers +10 / +15 / +25 on the accept action and the value rides the order.updated event out to the originating marketplace, which expresses it in its own terms (Wolt: an absolute adjusted_pickup_time on the accept call, capped at +25 minutes over its own estimate). Omitted means accept at the marketplace's proposed time, which is the historical behaviour. Deliberately declared with NO type and no bounds: values outside 1–25 whole minutes are dropped server-side rather than 400'd, because a schema rejection would block the ACCEPT itself — and an unanswered marketplace order is auto-rejected against the venue's SLO.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08/state" \ -H "Content-Type: application/json" \ -d '{ "state": "not_sent" }'{ "status": "success", "data": { "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5", "previousState": "string", "newState": "string", "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63", "updatedAt": "2019-08-24T14:15:22Z", "updatedBy": 0 }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
UUID of the kitchen dispatch to append to
uuidUUID of the tab the dispatch belongs to (validated server-side)
uuidLocation ID (validated against dispatch)
Source channel (POS-only flows pass POS so price-override gating works)
Value in
- "ONLINE"
- "QR"
- "KIOSK"
- "POS"
Items to append (same shape as /orders/create items)
1 <= itemsOptional custom field operations, saved atomically with this record. Omitted values are unchanged; null clears. Use fieldId or a stable key. expectedVersion is optional; supply it to reject conflicting edits.
items <= 100Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/orders/append-to-dispatch" \ -H "Content-Type: application/json" \ -d '{ "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba", "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63", "locationId": 0, "order_channel": "ONLINE", "items": [ { "id": 0, "quantity_cents": 1, "variants": [ { "id": 0 } ], "comments": [ "string" ] } ] }'{ "status": "success", "data": { "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba", "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63", "dailyOrderNumber": 0, "inheritedItemState": "string", "appendedItems": [ { "kitchen_dispatch_item_id": "c16d6b21-40da-4a68-bd1f-47966ffa79cb", "item_id": 0, "quantity": 0, "quantity_cents": 0, "price_cents": 0, "measurement": { "unit": "string", "amountMicros": 0, "priceQuantityMicros": 0, "unitPriceCents": 0 }, "status": "string" } ] }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Location ID
Source of the order
Value in
- "ONLINE"
- "QR"
- "KIOSK"
- "POS"
Service model - TAKEAWAY (pickup, fresh prep), OTC (over the counter), QR (customer scanned QR code or POS table order), TABLE (waiter service), SURPLUS (pre-prepared discounted item, anytime pickup).
Value in
- "TAKEAWAY"
- "OTC"
- "QR"
- "TABLE"
- "SURPLUS"
Where the order should be routed
Value in
- "QR"
- "TAB"
- "KD"
- "NONE"
UUID of the destination (QR code, tab, or kitchen dispatch)
uuidUser identification for the order
Order-scoped guest contact. This is not used for user resolution; shop gift cards use the buyer name and email, and the phone is used for fulfilment SMS notifications.
Items to include in the order
1 <= itemsVoucher codes to apply
Unix timestamp for desired pickup time
If true, order will be held (not_sent) and not sent to kitchen automatically
Tab notes drafted in the POS before the tab existed. Written to the tab inside the commit, so they reach the first kitchen ticket. Note text already on the tab is skipped.
Per-tab switch drafted with those notes: merged into tabs.metadata.showNotesOnMap, which draws the tab's top note on the table map as text. Only sent when the POS flipped it; left out, the tab keeps the default, which is on.
POS channel only. Keys shallow-merged into the tab's metadata as part of the commit, before tab.opened is emitted. Ignored on other channels.
Optional custom field operations, saved atomically with this record. Omitted values are unchanged; null clears. Use fieldId or a stable key. expectedVersion is optional; supply it to reject conflicting edits.
items <= 100Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/orders/create" \ -H "Content-Type: application/json" \ -d '{ "locationId": 0, "order_channel": "ONLINE", "order_type": "TAKEAWAY", "order_destination": "QR", "items": [ { "id": 0, "quantity_cents": 1, "variants": [ { "id": 0 } ], "comments": [ "string" ] } ] }'{ "status": "success", "data": { "kitchenDispatchId": "1e12a9f2-ac1a-493a-ab73-6bcc45c0d9ba", "dailyOrderNumber": 0, "tabId": "f4c36190-e358-41c0-b3ad-58e9e89eba63", "tabMemberId": "eacdba71-5d30-4031-bb4d-d05e652a7917", "items": [ { "kitchen_dispatch_item_id": "c16d6b21-40da-4a68-bd1f-47966ffa79cb", "measurement": { "unit": "string", "amountMicros": 0, "priceQuantityMicros": 0, "unitPriceCents": 0 }, "item_id": 0, "quantity_cents": 0, "price_cents": 0, "variants": [ { "id": 0, "quantity_cents": 0, "price_cents": 0 } ], "status": "string" } ], "totalAmount": 0, "discountAmount": 0, "finalAmount": 0, "appliedVouchers": [ { "voucherCode": "string", "discountAmountCents": 0, "discountType": "string" } ], "invalidVouchers": [ "string" ], "estimatedReadyTime": 0, "paymentRequired": true, "orderFlow": "string", "kitchenDispatchItemIds": [ "52d947b1-75a2-4292-bd56-cb6aeb53d4ea" ], "minCommittedCoursingOrder": 0 }, "meta": { "requestId": "string", "timestamp": "2019-08-24T14:15:22Z", "executionTimeMs": 0 }}Authorization
ApiKeyAuth API key authentication. Format: karma_live_* or karma_dev_*
In: header
Query Parameters
Page number
1 <= value1Items per page (max 1000)
1 <= value <= 100050Include order items in response. Items are returned FLAT with parentKitchenDispatchItemId for hierarchy building.
falseInclude tab notes attached to each order (notes are polymorphic, keyed by tab uuid). Used by the KDS.
falseInclude authorized descendants of the selected X-Location-Id.
falseOptional comma-separated subset of the resolved location hierarchy.
^[0-9]+(,[0-9]+)*$length <= 11000Force PostgreSQL only (skip BigQuery). Use for KDS/real-time displays where state must be fresh.
falseKDS-only: apply limit to terminal/done dispatches only and always return every active (in-progress) dispatch in the window, so an open ticket never ages out of the newest-N set at a high-volume venue. Leave off for paginated history/audit views.
falseHide KDs whose parent tab was force-closed (aborted). Use for the active KDS so staff don't see orphan tickets they cannot advance. Leave off for order history and audit views.
falseFilter by daily order number
Filter by state(s)
Filter by tab type(s)
Filter by table/QR code ID
Filter by tab member email (partial match)
Minimum total price in cents
Maximum total price in cents
Filter by order source/channel (POS, ONLINE, QR, KIOSK)
Filter orders containing a specific inventory item ID
Filter by prep group (printer group) IDs
Narrow to the orders credited to the calling staff member. Attribution is per line item — who rang the item in, falling back to the tab's initiator — the same rule the POS sales report and the purchase history use. There is deliberately no parameter for scoping to another staff member: narrowing is only ever to the caller. Requires a staff (retailer user) token.
falseFilter orders created after this date (date or date-time; default: 24h ago)
^\d{4}-\d{2}-\d{2}(T.*)?$Filter orders created before this date (date-only = inclusive end-of-day; default: now)
^\d{4}-\d{2}-\d{2}(T.*)?$Field to sort by
"created_at"Value in
- "created_at"
- "daily_ordinal_number"
- "updated_at"
Sort order
"desc"Value in
- "asc"
- "desc"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/v1/orders/stream""string"