All requests go to the base URL
https://server.chataigne.ai. Every resource is
identified by an opaque, prefixed id (for example org_…, loc_…,
scl_…) and exposes object, created_at, and updated_at (ISO 8601 UTC).The domain model
Organizations
The top-level container. Holds
location_ids and active_location_ids.Locations
A single restaurant: currency, country, timezone, language, address.
Settings
Per-location sub-resources: orders, hours, delivery, acceptance, AI.
Special closings
Time-bounded closures with an optional reason.
Organizations contain locations
An organization is the workspace boundary. It tracks the locations it owns and which of them are currently active.Unique identifier, prefixed
org_….Always
"organization".Display name of the organization.
All locations owned by the organization (
loc_…).Subset of
location_ids that are currently active.Creation timestamp (ISO 8601 UTC).
Last-update timestamp (ISO 8601 UTC).
Response
Locations have settings and special closings
A location represents one restaurant. It owns its locale and address, and is the parent of every settings sub-resource and special closing.Unique identifier, prefixed
loc_….The owning organization (
org_…), or null if standalone.One of
CHF, EUR, GBP, BRL, USD, MXN.One of
FR, CH, GB, BR, LU, MX, US.IANA timezone, e.g.
Europe/Zurich.Default language for the location.
{ line1, line2, postal_code, city, country, latitude, longitude }, or null.Location
Settings sub-resources
Each location exposes five settings objects. Read them withGET and update
them with PATCH — except opening_hours, which is replaced wholesale with
PUT.
| Sub-resource | Object type | Shape (key fields) | Methods |
|---|---|---|---|
order_settings | order_settings | auto_accept_orders, average_preparation_time (HH:MM), enable_multiple_order_per_customer | GET/PATCH |
opening_hours | opening_hours | delivery, pickup — each { monday…sunday: [{ from "HH:MM", to "HH:MM" }] } | GET/PUT |
delivery_settings | delivery_settings | delivery_enabled, pickup_enabled, provider, fee_strategy, min_order_amount, max_order_amount, max_items_number, max_delivery_radius_in_km, fee_percentage, max_delivery_fee ({amount,currency} | null), uber_direct_ums_enabled | GET/PATCH |
acceptance_settings | acceptance_settings | mode (online/busy/paused), extra_preparation_time, reason | GET/PATCH |
ai_instructions | ai_instructions | chatbot_instructions | GET/PATCH |
Special closings
A special closing temporarily takes a location offline for a bounded window.Unique identifier, prefixed
scl_….The location this closing applies to (
loc_…).Start of the closure (ISO 8601 UTC).
End of the closure (ISO 8601 UTC).
Optional human-readable reason.
Response
How a workspace maps to an API key
The Chataigne API exposes two surfaces, and your key prefix determines which one you can use. Both surfaces authenticate via thex-api-key header.
Chataigne API — /v1
Public surface, scoped to a single organization/location workspace.Key prefix:
ch_org_
Base path: /v1Admin API — /admin/v1
Administrative surface for provisioning organizations and locations.Key prefix:
ch_admin_
Base path: /admin/v1Works. The key’s workspace defines the organization and locations you can read
and write.
Rejected with
authorization_error.Rejected with
authorization_error.Rejected with
authentication_error.Authenticated request
Listing & pagination
List endpoints return alist object and use cursor-based pagination.
List shape
Page size, between
1 and 100.Cursor — return items after this id. Mutually exclusive with
ending_before.Cursor — return items before this id. Mutually exclusive with
starting_after.Filter to items created after this timestamp (ISO 8601).
Filter to items created before this timestamp (ISO 8601).
Filter to items updated after this timestamp (ISO 8601).
Filter to items updated before this timestamp (ISO 8601).
created_at by default.
Expansion
Replace id references with full objects usingexpand[]. For example, expanding
locations on an organization returns each location object inline.
Idempotency
Resource-creatingPOST requests require an Idempotency-Key header.
- Replaying the same key with the same body returns the original response,
with
Idempotent-Replayed: true. - Reusing a key with a different body returns
idempotency_error(409). - A concurrent in-flight duplicate returns
conflict_error(409). - Keys are retained for 24 hours.
Errors
Errors return the relevant HTTP status with a structured body.| Type | Status | When |
|---|---|---|
invalid_request_error | 400 | Malformed request or invalid params |
authentication_error | 401 | Missing or invalid API key |
authorization_error | 403 | Key not allowed on this surface |
not_found_error | 404 | Resource does not exist |
conflict_error | 409 | Concurrent duplicate / state conflict |
idempotency_error | 409 | Idempotency key reused with new body |
rate_limit_error | 429 | Per-key rate limit exceeded |
api_error | 500 | Unexpected server error |
error object may also include param and details. Every response
carries an X-Request-Id; error bodies mirror it as error.request_id. You can
echo your own id with the x-request-id header.
Rate limits are enforced per key, per surface. Responses include
X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset; a 429
additionally returns Retry-After.Versioning
The API is versioned in the path (/v1). Additive changes are non-breaking and
ship within the current major version. Breaking changes are introduced under a
new major version.
Resource reference
Organizations
GET /v1/organizations, GET/PATCH /v1/organizations/{id},
GET/POST /v1/organizations/{id}/locationsLocations
GET /v1/locations, GET/PATCH /v1/locations/{id}Settings
order_settings, opening_hours, delivery_settings,
acceptance_settings, ai_instructionsSpecial closings
GET/POST /v1/locations/{id}/special_closings,
GET/PATCH/DELETE .../{special_closing_id}