/v1, /admin/v1). Additive changes — new endpoints, new optional fields, new resource types — are non-breaking and ship within the current major version. Breaking changes are released under a new major version, so your integration keeps working as we evolve the platform.
Watch this page for new releases. Each entry is dated and labeled with the surfaces it affects: the public Chataigne API (
/v1) and the Admin API (/admin/v1).Initial release
The first public release of the Chataigne API. This launch ships two API surfaces and the Location & Organization Management resource family, along with the platform conventions every endpoint shares.Base URL
Two surfaces
| Surface | Base path | Key prefix | Use it to |
|---|---|---|---|
| Chataigne API | /v1 | ch_org_ | Read and manage a single organization, its locations, and their settings. |
| Admin API | /admin/v1 | ch_admin_ | Provision new organizations and locations across your account. |
x-api-key HTTP header.Location & Organization Management
Three core resources and a set of per-location settings sub-resources are available at launch. Every resource carriesid (opaque, prefixed), object, created_at, and updated_at (ISO 8601 UTC), and all field names use snake_case.Organizations
org_… — name, location_ids, active_location_ids. Expandable: locations.Locations
loc_… — name, currency, country, timezone, default_language, address.Special closings
scl_… — location_id, starts_at, ends_at, reason.order_settings, opening_hours, delivery_settings, acceptance_settings, and ai_instructions.Public endpoints — /v1
| Resource | Endpoints |
|---|---|
| Organizations | GET / PATCH /v1/organizations, GET /v1/organizations/{organization_id} |
| Organization locations | GET / POST /v1/organizations/{organization_id}/locations |
| Locations | GET / PATCH /v1/locations, GET /v1/locations/{location_id} |
| Order settings | GET / PATCH /v1/locations/{location_id}/order_settings |
| Opening hours | GET / PUT /v1/locations/{location_id}/opening_hours |
| Delivery settings | GET / PATCH /v1/locations/{location_id}/delivery_settings |
| Acceptance settings | GET / PATCH /v1/locations/{location_id}/acceptance_settings |
| AI instructions | GET / PATCH /v1/locations/{location_id}/ai_instructions |
| Special closings | GET / POST /v1/locations/{location_id}/special_closings, GET / PATCH / DELETE /v1/locations/{location_id}/special_closings/{special_closing_id} |
Admin endpoints — /admin/v1
| Resource | Endpoints |
|---|---|
| Organizations | GET / POST /admin/v1/organizations, GET / PATCH /admin/v1/organizations/{organization_id} |
| Organization locations | GET / POST /admin/v1/organizations/{organization_id}/locations |
| Locations | GET / POST /admin/v1/locations, GET / PATCH /admin/v1/locations/{location_id} |
Provision an organization and a location
An organization with an expanded location
Platform conventions
Every endpoint shares the same building blocks from day one.List endpoints return a
list object — { "object": "list", "data": [...], "has_more": bool, "url": "/v1/..." } — paginated with limit (1–100, default 10), starting_after, and ending_before (the cursor params are mutually exclusive). Lists are ordered by created_at by default.Filter any list with
created_after, created_before, updated_after, and updated_before (ISO 8601).Inline referenced objects with
expand[]. For example, GET /v1/organizations/org_4b7e2f10?expand[]=locations returns full location objects instead of ids.Resource-creating
POSTs require an Idempotency-Key header. Replaying the same key with the same body returns the original response with Idempotent-Replayed: true. The same key with a different body returns 409 idempotency_error; a concurrent in-flight duplicate returns 409 conflict_error. Keys are retained for 24 hours.Every response carries
X-Request-Id; error bodies mirror it as error.request_id. Echo your own correlation id through the x-request-id request header.Applied per key and per surface. Responses include
X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset; a 429 rate_limit_error adds Retry-After.Error model
All errors return a standard HTTP status with a structurederror body.error.type | HTTP status |
|---|---|
invalid_request_error | 400 |
authentication_error | 401 |
authorization_error | 403 |
not_found_error | 404 |
conflict_error | 409 |
idempotency_error | 409 |
rate_limit_error | 429 |
api_error | 500 |