The Catalog API organizes your menu into three levels: catalog, category, and item. Items have add-ons and can have different pricing and availability per sales channel (context).This guide shows when to call each endpoint. For hands-on examples, see Introduction. For the complete reference, see Endpoints.
List catalogs — GET /catalogs. Every store already has at least one.
Create categories — POST /categories groups items (sandwiches, drinks, desserts).
Create items — PUT /items sends item, products, option groups, and options in one call.
Update price and status — PATCH /items/price and PATCH /items/status for individual changes.
Track batch operations — GET /batch/{batchId} for asynchronous patches.
Item lifecycle
Every item has two states:
AVAILABLE — Customers can purchase.
UNAVAILABLE — Item paused. Does not appear in the app until it returns to AVAILABLE.
Use PATCH /items/status to toggle states without resending the complete item.
Choose the right endpoint
The change you want to make determines the endpoint:
Change
Endpoint
Notes
Create or rewrite a complete item
PUT /items
Sends item, products, groups, and options in one call. Idempotent.
Change item price
PATCH /items/price
Changes only item price. Supports batch.
Change add-on price
PATCH /options/price
Changes only add-on (option) price. Supports batch.
Pause or reactivate an item
PATCH /items/status
Changes only status. Supports batch.
Pause an add-on option
PATCH /options/status
Affects a single option.
Pause all options in a group
PATCH /optionGroups/status
Affects the entire group.
Adjust inventory
POST /inventory
Sets the maximum sellable quantity.
Remember: PUT /items replaces the complete item — omitted fields are removed. Use PATCH for individual changes.
Idempotency
PUT /items is idempotent: calling twice with the same payload does not create duplicates. The second call overwrites the first, simplifying retries on transient failures.
Batch patches run asynchronously. Check GET /batch/{batchId} until the status is COMPLETED before assuming changes are applied.
Multi-channel with contexts
Offer the same item across different channels (Delivery, Digital Menu, Dine-in) with distinct prices and statuses. Use contextModifiers instead of duplicating items: