Docs
Orders: Receiving orders
Orders

Receiving orders

Laayo orders arrive with your own item IDs, add-ons and notes. Print the KOT straight from the event, with no retyping.

#Webhooks or polling

  • Cloud or web POS: set an https webhook URL in the console or with PUT /v1/partner/webhook. We POST each event to it, signed. See Events.
  • Windows desktop or no public address: poll GET /v1/events. We hold the call open until something happens. See Polling for desktop POS.
  • Android tablet: your backend talks to Laayo and the tablet talks to your backend.

Both carry the same events. You get orders placed after the store was linked to you.

#The order

order.created
{
  "event": "order.created",
  "idempotency_key": "order.created:104812",
  "occurred_at": "2026-11-01T12:41:11+05:45",
  "data": {
    "laayo_order_id": "104812",
    "laayo_store_id": 9001,
    "external_store_id": "TK-01",
    "status": "pending",
    "order_type": "delivery",
    "payment_method": "cash_on_delivery",
    "payment_status": "unpaid",
    "order_amount": 545,
    "delivery_charge": 60,
    "total_tax": 0,
    "created_at": "2026-11-01T12:41:08+05:45",
    "scheduled": false,
    "schedule_at": null,
    "prep_minutes": null,
    "note": "Less spicy",
    "customer": { "name": "Sita", "phone": "+977*******521", "address": "Near Birtamod chowk" },
    "rider": null,
    "items": [
      { "id": 88213, "external_item_id": "MOMO-C-10", "name": "Chicken momo",
        "quantity": 2, "price": 180, "variation": null,
        "addons": [ { "name": "Extra achar", "quantity": 1, "price": 20 } ], "note": null }
    ],
    "timeline": { "confirmed": null, "processing": null, "handover": null,
      "picked_up": null, "delivered": null, "canceled": null }
  }
}

Read the same order again at any time with GET /v1/orders/{id}.

#Fields

FieldMeaning
external_store_idYour store ID from the link. Route the order with it.
laayo_order_idLaayo order ID. Use it for accept, preparing and ready.
statuspending, confirmed, processing, handover, picked_up, delivered, and so on. Always trust the latest one.
payment_methodHow the customer pays, for example cash_on_delivery. payment_status says whether it is paid already.
order_amountOrder total in rupees.
scheduledtrue for an order placed for later; schedule_at says when.
items[].external_item_idYour item ID. null if the item was not mapped when the order was placed.
items[].addonsAdd-ons with name, quantity and price, ready to print.
timelineWhen the order reached each step.

#Customer details

You get what the kitchen needs: the customer's name, the delivery address text and a masked phone number. Phone numbers typed into notes are masked too. Laayo riders deliver and handle the customer.

#Handling it

  • Answer the webhook with any 2xx within 10 seconds, then print. Slow work belongs after the answer.
  • Drop an event whose idempotency key you have already handled. Retries can send the same event twice.
  • Accept the order from the POS, see Accept, preparing, ready.
If your POS is down, orders still reach the restaurant through the Laayo vendor app. Nothing is lost.
Was this page clear?Updated 1 Nov 2026