Docs
Keep the store in sync: Menu changes
Keep the store in sync

Menu changes

Laayo never changes names or prices live from the POS. New dishes and price or name changes go to the owner in the Laayo vendor app, row by row.

#How it works

You upload your full menu
One call with every item your POS sells for that store.
Laayo compares it with the Laayo menu
By your item IDs: new, changed, missing, unchanged.
The owner reviews it
In the vendor app, approving or rejecting each row.
You read the result
With a GET on the same path, and in the console under Menu changes.

#Upload your menu

POST /v1/stores/{id}/menu/sync takes up to 2000 items with your ID, name, price in rupees, and optionally a category and availability. The answer is 202: the difference is saved and waits for the owner.

POST /v1/stores/31/menu/sync

{ "items": [
  { "external_item_id": "MOMO-C-10", "name": "Chicken momo", "price": 200, "category": "Momo" },
  { "external_item_id": "PAN-CHL", "name": "Paneer chilli", "price": 320, "category": "Starters" }
] }

202
{
  "data": {
    "diff_id": 318,
    "store_id": 31,
    "status": "pending",
    "created_at": "2026-11-01T18:02:11+05:45",
    "counts": { "new": 1, "changed": 1, "missing": 0, "unchanged": 66 },
    "rows": [
      { "row_id": 9, "kind": "changed", "external_item_id": "MOMO-C-10", "laayo_item_id": 47188,
        "pos": { "name": "Chicken momo", "price": 200, "category": "Momo" },
        "laayo": { "name": "Chicken momo", "price": 180 },
        "note": "price", "decision": "pending" }
    ]
  }
}

#Rows

kindMeaning
newIn your menu, not on Laayo.
changedOn both, with a different name or price. note says which.
missingOn Laayo, not in your menu.

Each row has its own decision: pending, approved or rejected.

#Follow the review

GET /v1/stores/{id}/menu/sync returns the latest upload for the store and the decision on each row. data is null if you never uploaded.

statusMeaning
pendingWaiting for the owner.
approvedThe owner approved it.
rejectedThe owner rejected it.
supersededA newer upload replaced it before review.

#What approval does in v1

Each approved row goes onto the Laayo menu: a new dish is added and mapped to your ID, a name or price changes, a missing item loses its mapping (the dish itself stays). Where Laayo checks new dishes before they go live, the dish waits for that check, already mapped, so your ID works the moment it is approved. Rejected rows change nothing.

#Rules

  • Send the full menu each time, not a patch. A new upload replaces a pending one.
  • An upload that is no longer pending cannot be changed: 409 diff_closed.
  • Over 512 KB returns 413 body_too_large.
  • Sold out and back is not a menu change. Use Sold out items; it never waits.
Photos, descriptions and add-ons stay with the owner in the vendor app.
Was this page clear?Updated 1 Nov 2026