Sync your catalogue
Keep your items, prices and stock in Localoy, and link them to your Localoy listings so live inventory checks can ask your system.
Your catalogue is the list of items your own system sells — dishes, tickets, sessions, products —
as Localoy knows them. Each item is keyed by your ID, the externalId, so you never have to store
Localoy's IDs.
The catalogue does two things:
- It links your items to your Localoy listings. Link an item to one of your
bookables with
localoyRef, and Localoy asks your system about that item before accepting a booking. See Live inventory checks. - It keeps a record of changes. Every create, update and delete sends a
catalog.item.*webhook to your endpoints, so other systems of yours can follow along.
Note
Catalogue items are not shown to customers in the Localoy app. What customers see is your Localoy listing, which you manage in the Partner Portal.
Scopes you need#
| Task | Scope |
|---|---|
| Create or replace items | REGISTRATION |
| Update and delete items | UPDATE |
| Read items, list bookables | INVENTORY |
Create or replace an item#
POST /catalog/items is an upsert keyed on externalId: the first
call creates the item and answers 201; later calls update it and answer 200.
curl -X POST "$LOCALOY_BASE_URL/catalog/items" \
-H "Authorization: Bearer $LOCALOY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"externalId": "sku-4471",
"name": "Kacchi Biryani (full)",
"description": "Mutton kacchi with borhani",
"priceCents": 45000,
"currency": "BDT",
"available": true,
"stock": 12,
"metadata": { "posCategory": "mains" }
}'A repeat POST changes only the fields you send
When the item already exists, fields you leave out keep their stored values — they are not reset
to defaults. To clear a nullable field, send it as null.
Choosing externalId#
Use the ID your own system already has — a SKU, a product ID, a menu item code. It must be 1–128
characters, start with a letter or digit, and contain only letters, digits, ., _, : and -. It
cannot be changed later; to rename, delete the item and create it again.
Stock and availability#
| Field | Meaning |
|---|---|
available | Whether you are selling the item at all. |
stock: null | You do not track stock for this item. |
stock: 0 | You track stock and have none left. |
stock: 12 | You track stock and have 12. |
These values are stored as a snapshot. When a customer books a linked item, Localoy does not read them — it asks your inventory endpoint live. See Live inventory checks.
Link an item to a Localoy listing#
-
List what you can link to with
GET /bookables. It returns every ticket option, activity item and dining reservation of yours, each with atypeand anid.Response · 200{ "success": true, "data": { "items": [ { "type": "event_ticket", "id": "cm4t1ck3t0pt10n00000001", "name": "VIP", "experienceId": "cm4ev3nt000000000000001", "experienceName": "Jazz Night" }, { "type": "dining", "id": "cm4d1n1ng00000000000001", "name": "Table reservation", "experienceId": "cm4d1n1ng00000000000001", "experienceName": "Sultan's Dine" } ] } } -
Set
localoyRefon the item that stands for it:cURLcurl -X PATCH "$LOCALOY_BASE_URL/catalog/items/table-booking" \ -H "Authorization: Bearer $LOCALOY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "localoyRef": { "type": "dining", "id": "cm4d1n1ng00000000000001" } }'
A bookable can be linked to one item at a time. Linking a second item answers
409 open_network_bookable_already_linked; unlink the first by setting its localoyRef to null.
Keep it in sync#
- Send a write whenever an item changes in your system, rather than re-sending everything on a timer.
- Use
PATCHto change a few fields — for example onlystock. - Use
DELETEwhen you stop selling an item. Deletion is permanent. - To reconcile, page through
GET /catalog/itemswithlimitandoffsetand compare with your own records.
Items managed by an integration#
Some items in your catalogue can be written for you by an integration you connect in the Partner
Portal. Each such item carries a managedBy object naming the integration; items you create with your
own key have managedBy: null.
managedBy.type | The item was created by |
|---|---|
TECHNOLOGY_PROVIDER | A Technology Provider you connected — a ticketing, point-of-sale or booking platform acting for you. key and name identify it. |
ADAPTER | A store sync that Localoy runs for you, such as WooCommerce. |
Your key sees these items and can edit them like any other. The integration keeps writing them, though, so change them at their source:
- A Technology Provider writes its items from its own system, and its next write can overwrite your edit. When you disconnect the provider, the items it created are removed.
- A WooCommerce store is read every hour. Localoy mirrors your published products as items with
externalIdwoocommerce:{productId}, and never writes to your store. The next sync overwrites the fields that come from WooCommerce, so change them in WooCommerce instead.