Parent-scoped identity
Every id supplied by your integration is immutable. Resources that already exist in a POS- or dashboard-created catalog keep their provider ID when available; otherwise Chataigne assigns an opaque stable public ID. Private database and SKU IDs are never used as fallbacks.
- A catalog ID is unique inside one location.
- Category, product, modifier-group, and bundle IDs are unique inside one catalog.
- A modifier ID is unique inside one modifier group.
- A bundle-line ID is unique inside one bundle.
The same delivery-menu, burger-classic, or sauces IDs can be used for several restaurant locations. Chataigne always resolves an ID with its complete parent path.
Never use a display name as a relationship key. Names can change. Use category_id,
modifier_group_ids, and product_ids.
Categories
Categories group products and bundles. Required fields are id and name; description and image_url are optional.
Products
A product is the complete public sellable item:
There is no public SKU resource. Chataigne maintains one private primary SKU for internal ordering compatibility, but its ID never appears in this API. Product-level concepts stored internally with that SKU, such as price_overrides and bundle_only, are flattened onto the public product.
order is optional in writes and always present in responses. On creation, an omitted order appends the product to its category. In a complete snapshot, unordered products follow explicitly ordered products in the same category.
Modifier groups and modifiers
A modifier group defines selection bounds and contains modifiers. min_selections defaults to 0; max_selections: null means unlimited. A group with min_selections > 0 must contain at least one modifier. A modifier has a name and optional price; omitting its price creates a zero-price modifier in the location currency. Modifiers expose the same operational fields as products.
Bundles
A bundle has a fixed price and one or more selection lines. Each line references public products through product_ids. Selection bounds apply to the line. Bundles expose the same operational fields as products, except bundle_only and order.
Operational state and restrictions
disabled and out_of_stock are independent. Disabled resources are hidden and cannot be ordered. Out-of-stock resources remain visible but cannot be selected until stock returns.
Each entry in restrictions is an availability window. days_of_week contains weekday names, start_time and end_time use HH:MM, start_date and end_date use ISO 8601 date-times, and service_types contains delivery, collection, or both. A resource is available when any restriction matches. An empty array means unrestricted.
Prices and conditional prices
Prices use { "amount": 12.9, "currency": "EUR" }. Amounts must be non-negative and have at most two decimal places. Currency must match the location currency.
Each price_overrides entry contains a price and conditions. Conditions may select one service_type, one or more days_of_week, and a local start_time/end_time interval. At least one non-null condition is required. When several overrides match, the most specific match wins; the base price is the fallback. An empty array removes every override.