Skip to content

Orders

Prefix: /v1/orders on the Public API. Auth: Customer for every route.

MethodPathPurpose
POST/v1/ordersPlace the current cart
GET/v1/ordersList the customer's orders
GET/v1/orders/:orderIdOrder detail
POST/v1/orders/:orderId/cancelCancel

Place order

The server snapshots the cart, delivery selection, and prices. Empty carts fail with CART_EMPTY.

Send the customer JWT. Guests cannot place an order.

Body

FieldRequiredNotes
paymentMethodyescod or wallet only
notesnoMax 256 chars
addressnoCheckout address details (label, block, street, …)
deliverySlotscheduled delivery{ templateId, date } where date is YYYY-MM-DD

Example

http
POST /v1/orders
Content-Type: application/json
Authorization: Bearer <accessToken>

{
  "paymentMethod": "cod",
  "notes": "Call on arrival",
  "address": {
    "label": "Home",
    "block": "4",
    "street": "1",
    "building": "12",
    "phone": "50000000"
  },
  "deliverySlot": {
    "templateId": "665f0c0c0c0c0c0c0c0c0c0e",
    "date": "2026-09-13"
  }
}

results is the full order document (ids, lines, totals in fils, status placed).

Wallet payment fails if the balance is insufficient. Online methods are rejected even if dashboard toggles show them.

List and get

GET /v1/orders is paginated. GET /v1/orders/:orderId returns one order the customer owns.

Cancel

Body

FieldRequiredValues
reasonyeschanged_mind, ordered_by_mistake, too_slow, found_elsewhere, other
notenoMax 256

Cancellation is only allowed while the order is still in a cancellable status (typically before picking completes). Staff may cancel later from the dashboard with a different reason set.

Status values

StatusCustomer meaning
placedSubmitted
confirmedStore accepted; waiting for a picker
pickingBeing picked
readyPacked / ready for driver or pickup
out_for_deliveryOn the way
deliveredDone
delivery_failedLast attempt failed
cancelledCancelled

After confirmed, the Picker API and Driver API own the remaining transitions.