Skip to content
Billzova Developers

API reference · Orders

Place an order

POST/v1/orders

Places the order into the restaurant's POS. Staff see it in their Online orders inbox and accept or reject it.

Body

…
Everything from Quote an order, plus:
customer.namestring 1–80required
Customer name (printed on the KOT and bill).
customer.phonestringrequired
10-digit Indian mobile number (+91 optional).
payment"PAY_AT_COUNTER" | "CASH_ON_DELIVERY"required
Pickup → PAY_AT_COUNTER, delivery → CASH_ON_DELIVERY.
notestring ≤ 300
Note for the restaurant.
expectedTotalinteger (paise)
The quote's total.amount. If the price changed since, you get PRICE_CHANGED with the new quote — recommended.

Request

curl https://api.billzova.com/v1/orders \
  -H "Authorization: Bearer $BILLZOVA_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f0e1d2c-order-1042" \
  -d '{"type":"DELIVERY","items":[{"menuItemId":"m-full","quantity":1}],
       "delivery":{"address":"Flat 4, Gomti Nagar","pincode":"226010"},
       "customer":{"name":"Rahul","phone":"9876543210"},
       "payment":"CASH_ON_DELIVERY","expectedTotal":33600}'

Response

201 · application/json
{
  "id": "0b8e…",
  "object": "order", "test": false,
  "number": "17",
  "status": "PENDING",
  "type": "DELIVERY",
  "customer": { "name": "Rahul", "phone": "9876543210" },
  "delivery": { "address": { "address": "Flat 4, Gomti Nagar", "pincode": "226010" }, "person": null },
  "lines": [ … ],
  "subtotal": { "amount": 32000, "currency": "INR", "display": "₹320" },
  "tax": { "total": { "amount": 1600, "currency": "INR", "display": "₹16" } },
  "charges": [],
  "total": { "amount": 33600, "currency": "INR", "display": "₹336" },
  "trackingUrl": "https://billzova.com/track/Vd3…",
  "timeline": { "placedAt": "2026-10-24T13:02:11.000Z", "acceptedAt": null, "outForDeliveryAt": null, "completedAt": null }
}

Good to know

  • Statuses: PENDING → ACCEPTED → PREPARING → READY → OUT_FOR_DELIVERY → COMPLETED, or REJECTED (by the restaurant, with rejectionReason) / CANCELLED (by the customer, or not accepted in time).
  • Orders the restaurant does not accept in time (default 15 minutes) are cancelled automatically.

Errors

CodeHTTPMeaning
IDEMPOTENCY_KEY_REQUIRED400Send an Idempotency-Key header with every create.
IDEMPOTENCY_KEY_REUSED422The same Idempotency-Key was used with a different body.
IDEMPOTENCY_IN_PROGRESS409The first request with this Idempotency-Key is still running. Retry the same request in a second or two.
PRICE_CHANGED409The total changed since the quote — the new quote is in the error.
ORDERING_OFF403Online ordering is switched off.
CLOSED409The restaurant is closed now. opensAt says when it opens.
NOT_ACCEPTING409No staff device is online to take the order.
RESTAURANT_UNAVAILABLE403The restaurant cannot take orders or bookings (subscription or account).
PAYMENT_MODE_NOT_ALLOWED422That payment mode is not allowed for this order type / restaurant.
OUT_OF_AREA422The pincode is outside the delivery area.
BELOW_MINIMUM422Below the minimum order amount (minimum in the error).
ITEM_UNAVAILABLE422A menu item or add-on is sold out / switched off.
ADDON_INVALID422Wrong add-on for the item, a duplicate, or above the group maximum.
VALIDATION_FAILED422The body is invalid — field says where.
RATE_LIMITED429Too many requests — wait for Retry-After seconds.