☰ Menu · Orders
API reference
Orders
Carts guests send from the QR menu at a table.
The order object
- numberinteger
- Short number to say out loud and print on the kitchen ticket.
- statusstring
new,accepted,preparing,ready,served,completed,rejected,cancelled.- tablestring or null
- From the table link
?table=, or typed by the guest. - notestring or null
- The guest's comment.
- subtotal, currency, item_count
- Priced by us from the menu at the time of the order.
- items[]array
item_id,external_id(your SKU),name,quantity,unit_price,total,options[]with their ownexternal_idandprice_delta.- external_idstring or null
- Your order id, set on accept.
- guest_languagestring
- The menu language the guest used.
JSON
{
"object": "order",
"id": "0c69a81c-0fbc-4333-b26c-789566b9bea4",
"number": 10,
"status": "new",
"table": "7",
"note": "No onions, please",
"currency": "MDL",
"subtotal": 14000,
"item_count": 2,
"items": [
{
"item_id": "a48343bd-9f6e-424a-b003-fe790617f4d6",
"external_id": "2040",
"name": "Zeamă",
"quantity": 2,
"unit_price": 7000,
"total": 14000,
"options": []
}
],
"external_id": null,
"reject_reason": null,
"guest_language": "en",
"source": "qr_menu",
"livemode": true,
"created_at": "2026-10-06T18:14:48.233+00:00",
"accepted_at": null,
"completed_at": null,
"updated_at": "2026-10-06T18:14:48.233+00:00"
}GET
/v1/ordersScope: orders:read
Newest first. Filter by ?status=new (repeat it or separate with commas). Paginated.
curl
curl "https://loyaltyfy.io/api/v1/orders?status=new" \
-H "Authorization: Bearer sk_test_..."GET
/v1/orders/{order}Scope: orders:read
One order.
POST
/v1/orders/{order}/acceptScope: orders:write
Moves a new order to accepted. Pass your own order id as external_id; it must be unique per venue.
curl
curl -X POST https://loyaltyfy.io/api/v1/orders/0c69a81c-0fbc-4333-b26c-789566b9bea4/accept \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-d '{ "external_id": "POS-ORDER-55821" }'POST
/v1/orders/{order}/rejectScope: orders:write
Declines a new order. reason is optional and kept with the order.
curl
curl -X POST https://loyaltyfy.io/api/v1/orders/0c69a81c-0fbc-4333-b26c-789566b9bea4/reject \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-d '{ "reason": "Kitchen closes at 22:00" }'PATCH
/v1/orders/{order}Scope: orders:write
Sets status (forward only, steps can be skipped; any open order can be cancelled with a reason). Sending the current status again is a no-op. Sends order.updated with previous_status.
curl
curl -X PATCH https://loyaltyfy.io/api/v1/orders/0c69a81c-0fbc-4333-b26c-789566b9bea4 \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-d '{ "status": "ready" }'