Orders
Listing orders, fetching one, and advancing its status.
#List orders
GET /v1/ordersScope: orders:read.
| Parameter | Description |
|---|---|
page, limit | Pagination. limit defaults to 25, max 100 |
status | pending, confirmed, preparing, ready, delivering, completed, cancelled |
type | pickup, delivery, dine_in |
branchId | Restrict to one branch. Must be within the key's branch scope |
createdAfter | ISO timestamp, inclusive |
createdBefore | ISO timestamp, inclusive |
Ordered newest first.
curl -G https://api.tryrestro.com/v1/orders \
-H "Authorization: Bearer $RESTRO_API_KEY" \
-d status=completed \
-d createdAfter=2026-07-01T00:00:00Z \
-d limit=100#Fetch one order
GET /v1/orders/{reference}Scope: orders:read.
{reference} accepts either the order id or the order number — the sequential one your staff and customers see. Numbers are unique per restaurant, so GET /v1/orders/1042 works.
{
"id": "cmd8x2k9p0001abcdefghijkl",
"number": 1042,
"type": "delivery",
"status": "confirmed",
"paymentStatus": "paid",
"paymentProviderId": "stripe",
"currency": "EGP",
"subtotal": "160.00",
"discount": "10.00",
"creditsUsed": "0.00",
"deliveryFee": "15.00",
"vat": "19.00",
"tipAmount": "0.00",
"total": "184.00",
"refundedTotal": "0.00",
"notes": "Ring the bell twice",
"deliveryAddress": "12 Nile St, Maadi, Cairo",
"cancelReason": "",
"cancelledAt": null,
"branch": {
"id": "cmd8w9k1a0002abcdefghijkl",
"slug": "maadi",
"name": "Maadi",
"currency": "EGP"
},
"customer": {
"id": "cmd8wa2b30003abcdefghijkl",
"name": "Nour Hassan",
"email": "nour@example.com",
"phone": "+201000000000"
},
"lines": [
{
"id": "cmd8xb4c50004abcdefghijkl",
"menuItemId": "cmd8mn7d80005abcdefghijkl",
"title": "Falafel plate",
"quantity": 2,
"unitPrice": "60.00",
"lineTotal": "120.00",
"specialRequest": "extra tahini",
"options": [
{
"id": "cmd8op9e10006abcdefghijkl",
"customization": "Size",
"name": "Large",
"price": "10.00"
}
]
}
],
"refunds": [],
"createdAt": "2026-07-28T10:12:04.000Z",
"updatedAt": "2026-07-28T10:31:22.000Z"
}Line items store a snapshot of the title and price at the time of ordering. Renaming or repricing a menu item later does not rewrite past orders.
#Update status
POST /v1/orders/{reference}/statusScope: orders:update-status.
{
"status": "ready",
"reason": ""
}status is one of confirmed, preparing, ready, delivering, completed, cancelled. reason is optional and only recorded when cancelling.
curl -X POST https://api.tryrestro.com/v1/orders/1042/status \
-H "Authorization: Bearer $RESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"ready"}'Returns the full updated order.
#Rules
- An order that is already
completedorcancelledcannot be moved. That returns409. - Setting the status it already has is a no-op and returns the order unchanged.
- Moving to
confirmeddeducts recipe ingredients from stock, exactly as the dashboard does. - Moving to
cancelledreturns that stock and recordscancelReason. - Every change fires the matching webhook and is written to the activity log with your key's name as the actor.
#Branches
GET /v1/branchesNo scope required beyond a valid key. Returns the branches the key can see — useful for resolving the branchId values other endpoints want.
{
"data": [
{
"id": "cmd8w9k1a0002abcdefghijkl",
"name": "Maadi",
"slug": "maadi",
"currency": "EGP",
"status": "open",
"address": "12 Nile St, Maadi, Cairo",
"countryCode": "EG",
"timezone": "Africa/Cairo"
}
]
}Did this page miss something? Tell us.
Back to top