You are viewing a non-production environment — the API surface may differ from production.
Ordering API

Orders

Customer orders and order management

GET
/api/v1/kitchen-dispatch-items

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Query Parameters

page?integer
Range1 <= value
Default1
limit?integer
Range1 <= value <= 1000
Default200
state?|array<string>

Item state(s) to include (single value or array)

printerGroupIds?|array<>

Keep only items whose root belongs to one of these prep (printer) groups

tabType?|array<string>

Filter by tab type (e.g. table, takeaway)

source?|array<string>

Order channel/source: POS, ONLINE, QR, KIOSK

startDate?string

ISO start of parent dispatch created_at range

endDate?string

ISO end of parent dispatch created_at range

excludeAbortedTabs?boolean

Hide items whose parent tab is aborted

sort?string

Value in

  • "created_at"
  • "kitchen_sort_order"
order?string

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  }}
DELETE
/api/v1/kitchen-dispatch-items/{id}

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Kitchen dispatch item UUID

Formatuuid

Response 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  }}
GET
/api/v1/kitchen-dispatch-items/{id}/split

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Kitchen dispatch item UUID (the split_of_kitchen_dispatch_item reference)

Formatuuid

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/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  }}
POST
/api/v1/kitchen-dispatch-items/{id}/split

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Kitchen dispatch item UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

numberOfParts*number

Number of parts to split the item into (2-10)

Range2 <= value <= 10
tabId*string

Tab UUID that the item belongs to

Formatuuid

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/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  }}
PATCH
/api/v1/kitchen-dispatch-items/{id}/takeaway

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Kitchen dispatch item UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

is_takeaway*boolean

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  }}
POST
/api/v1/kitchen-dispatch-items/{id}/void

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

id*string

Kitchen dispatch item UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

reasonCode*string

Reason code from the locked enum

Value in

  • "staff_mistake"
  • "customer_change"
  • "wrong_make"
  • "quality_issue"
  • "out_of_stock"
  • "allergy"
  • "other"
reasonNote?|

Optional free-text note; REQUIRED when reasonCode is "other"

Lengthlength <= 500
quantityCents?|

Optional partial-void quantity in basis-points (null = full quantity). Stored only in audit.

Range1 <= value
suppressKorrbong?boolean

When 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  }}
POST
/api/v1/kitchen-dispatch-items/advance

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

itemIds*array<>

Kitchen dispatch item UUIDs to advance

Items1 <= items
state*string

Target 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  }}
POST
/api/v1/kitchen-dispatch-items/void-batch

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

reasonCode*string

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"
reasonNote?|

Optional free-text note; REQUIRED when reasonCode is "other"

Lengthlength <= 500
items*array<>

Kitchen dispatch items to void

Items1 <= items <= 100
suppressKorrbong?boolean

When 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  }}
GET
/api/v1/orders

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Query Parameters

page?number

Page number

Range1 <= value
Default1
limit?number

Items per page (max 1000)

Range1 <= value <= 1000
Default50
includeItems?boolean

Include order items in response. Items are returned FLAT with parentKitchenDispatchItemId for hierarchy building.

Defaultfalse
includeNotes?boolean

Include tab notes attached to each order (notes are polymorphic, keyed by tab uuid). Used by the KDS.

Defaultfalse
includeChildren?boolean

Include authorized descendants of the selected X-Location-Id.

Defaultfalse
locationIds?string

Optional comma-separated subset of the resolved location hierarchy.

Match^[0-9]+(,[0-9]+)*$
Lengthlength <= 11000
forcePostgres?boolean

Force PostgreSQL only (skip BigQuery). Use for KDS/real-time displays where state must be fresh.

Defaultfalse
sharedKitchen?boolean

KDS-only: at a location that owns a prep group with owner_printers_serve_children, also return its descendant venues' orders, with items limited to those routed to the shared groups. No effect elsewhere.

Defaultfalse
keepActiveBeyondLimit?boolean

KDS-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.

Defaultfalse
excludeAbortedTabs?boolean

Hide 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.

Defaultfalse
dailyOrderNumber?number

Filter by daily order number

state?|array<string>

Filter by state(s)

tabType?|array<string>

Filter by tab type(s)

tableId?string

Filter by table/QR code ID

tabMemberEmail?string

Filter by tab member email (partial match)

minPrice?number

Minimum total price in cents

maxPrice?number

Maximum total price in cents

source?|array<string>

Filter by order source/channel (POS, ONLINE, QR, KIOSK)

itemId?number

Filter orders containing a specific inventory item ID

printerGroupIds?|array<string>

Filter by prep group (printer group) IDs

scopeToUser?boolean

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.

Defaultfalse
startDate?string

Filter orders created after this date (date or date-time; default: 24h ago)

Match^\d{4}-\d{2}-\d{2}(T.*)?$
endDate?string

Filter orders created before this date (date-only = inclusive end-of-day; default: now)

Match^\d{4}-\d{2}-\d{2}(T.*)?$
sort?string

Field to sort by

Default"created_at"

Value in

  • "created_at"
  • "daily_ordinal_number"
  • "updated_at"
order?string

Sort order

Default"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  }}
POST
/api/v1/orders/{kitchenDispatchId}/cancel

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

kitchenDispatchId*string

Kitchen dispatch UUID to cancel

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

returnToCheckout?boolean
tabMemberId?string
Formatuuid
guestSessionId?string
Formatuuid
reason?string

Optional 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  }}
POST
/api/v1/orders/{kitchenDispatchId}/sync

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

kitchenDispatchId*string

UUID of the kitchen dispatch to sync

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

tabId*string

UUID of the tab the dispatch belongs to (validated server-side)

Formatuuid
locationId*number
order_channel*string

Value in

  • "ONLINE"
  • "QR"
  • "KIOSK"
  • "POS"
voids*array<>

KDI UUIDs to set to item_state=aborted. Already-aborted ids pass through.

inserts*array<>

New items to insert into the dispatch (same shape as /orders/create items[]).

suppressKorrbong?boolean

When true, skip the order.reversed webhook so printer-functions does not print a KORRBONG. Cafe-mode locations pass this; merchant locations omit it.

voidReasonCode?string

Reason for the voids. Defaults to "customer_change".

Value in

  • "staff_mistake"
  • "customer_change"
  • "wrong_make"
  • "quality_issue"
  • "out_of_stock"
  • "allergy"
  • "other"
voidReasonNote?|

Required when voidReasonCode === "other".

Lengthlength <= 500

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/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  }}
GET
/api/v1/orders/{orderId}

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

orderId*string

Order ID (kitchen_dispatch.uuid)

Formatuuid

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/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  }}
PATCH
/api/v1/orders/{orderId}

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

orderId*string
Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

customFields*array<|>

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.

Itemsitems <= 100

Response 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": {}    }  }}
POST
/api/v1/orders/{orderId}/accept

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

orderId*string

Order ID (kitchen_dispatch.uuid)

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

prepTimeExtraMinutes?unknown

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": {}}
POST
/api/v1/orders/{orderId}/advance-items

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

orderId*string

Order ID (kitchen_dispatch.uuid)

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

state*string

Target state to advance items to

Value in

  • "pending"
  • "accepted"
  • "in_preparation"
  • "ready_to_deliver"
  • "delivered"
  • "rejected"
printerGroupId?string

Optional: advance only items in this prep group (printer group)

Formatuuid
coursingOrder?integer

Optional: 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  }}
PATCH
/api/v1/orders/{orderId}/edit-items

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

orderId*string

Kitchen dispatch UUID to edit

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

items*array<>

Items to edit. Set quantityCents to 0 to remove an item.

Items1 <= items

Response 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  }}
PATCH
/api/v1/orders/{orderId}/item-comments

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

orderId*string

Kitchen dispatch UUID the lines belong to

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

items*array<>

Lines to write notes on. Send the full note list per line.

Items1 <= items

Response 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  }}
POST
/api/v1/orders/{orderId}/items/{itemId}/status

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

orderId*string

Kitchen dispatch (order) UUID

Formatuuid
itemId*string

Kitchen dispatch item UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

status*|

Item status: COMPLETED, UNAVAILABLE, or null (reset)

modificationId?number

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  }}
GET
/api/v1/orders/{orderId}/items/{itemId}/status/logs

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

orderId*string

Kitchen dispatch (order) UUID

Formatuuid
itemId*string

Kitchen dispatch item UUID

Formatuuid

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/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  }}
POST
/api/v1/orders/{orderId}/items/status

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

orderId*string

Kitchen dispatch (order) UUID

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

updates*array<>

Array of status updates

Items1 <= items

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/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  }}
POST
/api/v1/orders/{orderId}/serving-center-state

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

orderId*string

Order ID (kitchen_dispatch.uuid)

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

servingCenterId*number

The serving center ID to update state for

state*string

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  }}
POST
/api/v1/orders/{orderId}/state

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Path Parameters

orderId*string

Order ID (kitchen_dispatch.uuid)

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

state*string

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"
rejectionReason?string

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.

prepTimeExtraMinutes?unknown

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  }}
POST
/api/v1/orders/append-to-dispatch

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

kitchenDispatchId*string

UUID of the kitchen dispatch to append to

Formatuuid
tabId*string

UUID of the tab the dispatch belongs to (validated server-side)

Formatuuid
locationId*number

Location ID (validated against dispatch)

order_channel*string

Source channel (POS-only flows pass POS so price-override gating works)

Value in

  • "ONLINE"
  • "QR"
  • "KIOSK"
  • "POS"
items*array<>

Items to append (same shape as /orders/create items)

Items1 <= items
customFields?array<|>

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.

Itemsitems <= 100

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/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  }}
POST
/api/v1/orders/create

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

locationId*number

Location ID

order_channel*string

Source of the order

Value in

  • "ONLINE"
  • "QR"
  • "KIOSK"
  • "POS"
order_type*string

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"
order_destination*string

Where the order should be routed

Value in

  • "QR"
  • "TAB"
  • "KD"
  • "NONE"
order_destination_id?|

UUID of the destination (QR code, tab, or kitchen dispatch)

Formatuuid
tab_member?|

User identification for the order

commerce?
order_contact?

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*array<>

Items to include in the order

Items1 <= items
vouchers?array<string>

Voucher codes to apply

desiredPickupTime?|

Unix timestamp for desired pickup time

hold?boolean

If true, order will be held (not_sent) and not sent to kitchen automatically

tab_notes?array<string>

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.

show_notes_on_map?boolean

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.

tab_metadata?|

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.

customFields?array<|>

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.

Itemsitems <= 100

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/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  }}
GET
/api/v1/orders/stream

Authorization

ApiKeyAuth
X-API-Key<token>

API key authentication. Format: karma_live_* or karma_dev_*

In: header

Query Parameters

page?number

Page number

Range1 <= value
Default1
limit?number

Items per page (max 1000)

Range1 <= value <= 1000
Default50
includeItems?boolean

Include order items in response. Items are returned FLAT with parentKitchenDispatchItemId for hierarchy building.

Defaultfalse
includeNotes?boolean

Include tab notes attached to each order (notes are polymorphic, keyed by tab uuid). Used by the KDS.

Defaultfalse
includeChildren?boolean

Include authorized descendants of the selected X-Location-Id.

Defaultfalse
locationIds?string

Optional comma-separated subset of the resolved location hierarchy.

Match^[0-9]+(,[0-9]+)*$
Lengthlength <= 11000
forcePostgres?boolean

Force PostgreSQL only (skip BigQuery). Use for KDS/real-time displays where state must be fresh.

Defaultfalse
sharedKitchen?boolean

KDS-only: at a location that owns a prep group with owner_printers_serve_children, also return its descendant venues' orders, with items limited to those routed to the shared groups. No effect elsewhere.

Defaultfalse
keepActiveBeyondLimit?boolean

KDS-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.

Defaultfalse
excludeAbortedTabs?boolean

Hide 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.

Defaultfalse
dailyOrderNumber?number

Filter by daily order number

state?|array<string>

Filter by state(s)

tabType?|array<string>

Filter by tab type(s)

tableId?string

Filter by table/QR code ID

tabMemberEmail?string

Filter by tab member email (partial match)

minPrice?number

Minimum total price in cents

maxPrice?number

Maximum total price in cents

source?|array<string>

Filter by order source/channel (POS, ONLINE, QR, KIOSK)

itemId?number

Filter orders containing a specific inventory item ID

printerGroupIds?|array<string>

Filter by prep group (printer group) IDs

scopeToUser?boolean

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.

Defaultfalse
startDate?string

Filter orders created after this date (date or date-time; default: 24h ago)

Match^\d{4}-\d{2}-\d{2}(T.*)?$
endDate?string

Filter orders created before this date (date-only = inclusive end-of-day; default: now)

Match^\d{4}-\d{2}-\d{2}(T.*)?$
sort?string

Field to sort by

Default"created_at"

Value in

  • "created_at"
  • "daily_ordinal_number"
  • "updated_at"
order?string

Sort order

Default"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"