Skip to main content
Each location exposes five independent settings sub-resources that control how it takes orders. They live under a location and are read and updated individually:
Sub-resourceobjectPathUpdate verb
Order settingsorder_settings.../order_settingsPATCH
Opening hoursopening_hours.../opening_hoursPUT
Delivery settingsdelivery_settings.../delivery_settingsPATCH
Acceptance settingsacceptance_settings.../acceptance_settingsPATCH
AI instructionsai_instructions.../ai_instructionsPATCH
All paths are relative to https://server.chataigne.ai/v1/locations/{location_id}.
These routes are part of the public Chataigne API (/v1). Authenticate with an organization/location API key (prefix ch_org_) sent in the x-api-key header. Admin keys are rejected with 403; see Authentication.
PATCH is a partial update — PUT is a full replace. With PATCH, any field you omit keeps its current value. With PUT (opening hours only), the entire object is replaced; omitted days are reset to an empty schedule. There is no DELETE for settings sub-resources.

Order settings

Controls auto-acceptance, prep time, and whether a customer may hold multiple concurrent orders.
object
string
Always order_settings.
auto_accept_orders
boolean
When true, incoming orders are accepted automatically without manual confirmation.
average_preparation_time
string
Estimated preparation time in HH:MM format (e.g. "00:25").
enable_multiple_order_per_customer
boolean
When true, a single customer can have more than one open order at a time.

Get order settings

curl https://server.chataigne.ai/v1/locations/loc_8f2k3j/order_settings \
  -H "x-api-key: ch_org_live_9aQ2..."
Response
{
  "id": "loc_8f2k3j",
  "object": "order_settings",
  "auto_accept_orders": false,
  "average_preparation_time": "00:25",
  "enable_multiple_order_per_customer": true,
  "created_at": "2025-01-12T09:30:00Z",
  "updated_at": "2025-03-04T14:22:10Z"
}

Update order settings

PATCH only the fields you want to change. Here we enable auto-accept and bump prep time; enable_multiple_order_per_customer is omitted and therefore preserved.
curl -X PATCH https://server.chataigne.ai/v1/locations/loc_8f2k3j/order_settings \
  -H "x-api-key: ch_org_live_9aQ2..." \
  -H "Content-Type: application/json" \
  -d '{
    "auto_accept_orders": true,
    "average_preparation_time": "00:30"
  }'
Response
{
  "id": "loc_8f2k3j",
  "object": "order_settings",
  "auto_accept_orders": true,
  "average_preparation_time": "00:30",
  "enable_multiple_order_per_customer": true,
  "created_at": "2025-01-12T09:30:00Z",
  "updated_at": "2025-05-29T11:04:55Z"
}

Opening hours

The weekly schedule, split into independent delivery and pickup calendars. Each calendar has one key per weekday (mondaysunday); each day holds an array of time slots with from and to in HH:MM. An empty array means closed that day.
object
string
Always opening_hours.
delivery
object
Weekly delivery schedule. Keys mondaysunday, each an array of { from, to } slots.
pickup
object
Weekly pickup schedule, same shape as delivery.
Opening hours use PUT (full replace), not PATCH. The body you send becomes the complete schedule. Any weekday you omit is treated as closed (empty slot array), so always send the full week for each calendar you want to keep.

Get opening hours

curl https://server.chataigne.ai/v1/locations/loc_8f2k3j/opening_hours \
  -H "x-api-key: ch_org_live_9aQ2..."
Response
{
  "id": "loc_8f2k3j",
  "object": "opening_hours",
  "delivery": {
    "monday": [{ "from": "11:30", "to": "14:00" }, { "from": "18:00", "to": "22:30" }],
    "tuesday": [{ "from": "11:30", "to": "14:00" }, { "from": "18:00", "to": "22:30" }],
    "wednesday": [{ "from": "11:30", "to": "14:00" }, { "from": "18:00", "to": "22:30" }],
    "thursday": [{ "from": "11:30", "to": "14:00" }, { "from": "18:00", "to": "22:30" }],
    "friday": [{ "from": "11:30", "to": "14:00" }, { "from": "18:00", "to": "23:00" }],
    "saturday": [{ "from": "18:00", "to": "23:00" }],
    "sunday": []
  },
  "pickup": {
    "monday": [{ "from": "11:00", "to": "22:30" }],
    "tuesday": [{ "from": "11:00", "to": "22:30" }],
    "wednesday": [{ "from": "11:00", "to": "22:30" }],
    "thursday": [{ "from": "11:00", "to": "22:30" }],
    "friday": [{ "from": "11:00", "to": "23:00" }],
    "saturday": [{ "from": "11:00", "to": "23:00" }],
    "sunday": []
  },
  "created_at": "2025-01-12T09:30:00Z",
  "updated_at": "2025-04-18T08:10:00Z"
}

Replace opening hours

Send the complete delivery and pickup calendars. Below, Sunday is left closed by sending an empty array.
curl -X PUT https://server.chataigne.ai/v1/locations/loc_8f2k3j/opening_hours \
  -H "x-api-key: ch_org_live_9aQ2..." \
  -H "Content-Type: application/json" \
  -d '{
    "delivery": {
      "monday": [{ "from": "11:30", "to": "14:00" }, { "from": "18:00", "to": "22:30" }],
      "tuesday": [{ "from": "11:30", "to": "14:00" }, { "from": "18:00", "to": "22:30" }],
      "wednesday": [{ "from": "11:30", "to": "14:00" }, { "from": "18:00", "to": "22:30" }],
      "thursday": [{ "from": "11:30", "to": "14:00" }, { "from": "18:00", "to": "22:30" }],
      "friday": [{ "from": "11:30", "to": "14:00" }, { "from": "18:00", "to": "23:00" }],
      "saturday": [{ "from": "18:00", "to": "23:00" }],
      "sunday": []
    },
    "pickup": {
      "monday": [{ "from": "11:00", "to": "22:30" }],
      "tuesday": [{ "from": "11:00", "to": "22:30" }],
      "wednesday": [{ "from": "11:00", "to": "22:30" }],
      "thursday": [{ "from": "11:00", "to": "22:30" }],
      "friday": [{ "from": "11:00", "to": "23:00" }],
      "saturday": [{ "from": "11:00", "to": "23:00" }],
      "sunday": []
    }
  }'
Opening hours are interpreted in the location’s timezone. For one-off date overrides (holidays, private events), use Special closings instead of editing the weekly schedule.

Delivery settings

Controls pickup/delivery availability, fulfillment provider selection, delivery fee strategy, and the provider-specific options used by runtime delivery checks and order confirmation. The same resource is available on both API surfaces:
SurfaceRouteKey type
Location APIGET / PATCH /v1/locations/{location_id}/delivery_settingsch_org_… with deliverySettings permission
Admin APIGET / PATCH /admin/v1/locations/{location_id}/delivery_settingsch_admin_…

Delivery provider values

ValueMeaningProvider-specific fields
handledByStoreThe restaurant handles fulfillment itself.Standard availability, fee, radius, postal-code, zone, or distance-range fields.
uberDirectChataigne requests Uber Direct delivery.delivery_verification_mode, uber_direct_pickup_notes_enabled, uber_direct_pickup_notes, uber_direct_auto_dmc.
chaskisChaskis handles delivery.chaskis_flat_fee, chaskis_per_km_fee.
doodDood handles delivery/pricing validation.Standard fee/radius caps.

Fee strategy values

ValueRequired/associated fields
postalCodepostal_codes
deliveryZonedelivery_zones
percentagefee_percentage between 0 and 1
customerPaysAllNo extra strategy fields
restaurantPaysAllNo extra strategy fields
smartsmart_parameters
distanceRangedistance_ranges
object
string
Always delivery_settings.
location_id
string
The location this settings object belongs to.
delivery_enabled
boolean
Whether delivery orders are accepted.
pickup_enabled
boolean
Whether pickup orders are accepted.
provider
string
One of handledByStore, uberDirect, chaskis, or dood.
fee_strategy
string
One of postalCode, deliveryZone, percentage, customerPaysAll, restaurantPaysAll, smart, or distanceRange.
postal_codes
array
Postal-code pricing rules: postal_code, minimum_order_amount, and delivery_fee.
delivery_zones
array
Polygon delivery zones with id, name, polygon, minimum_order_amount, and delivery_fee.
fee_percentage
number | null
Percentage applied when fee_strategy is percentage, expressed as a decimal (0.7 = 70%).
smart_parameters
object | null
Smart-pricing inputs: menu_uplift, uber_commission, target_lift, and coverage_fraction.
distance_ranges
array
Distance brackets with up_to_km, displayed_fee, and optional minimum_order_amount.
chaskis_flat_fee
object
Chaskis base fee as { amount, currency }.
chaskis_per_km_fee
object
Chaskis per-kilometre fee as { amount, currency }.
max_delivery_radius_in_km
number | null
Maximum delivery distance from the location, in kilometres.
max_delivery_fee
object | null
Cap on the delivery fee as { amount, currency }, or null for no cap.
min_order_amount
number | null
Minimum order subtotal required to place a delivery order.
max_order_amount
number | null
Maximum order subtotal permitted.
max_items_number
number | null
Maximum number of items allowed per order.
delivery_verification_mode
string | null
Uber Direct proof-of-delivery mode: picture or pincode.
uber_direct_pickup_notes_enabled
boolean
Whether custom Uber Direct pickup notes are sent to the courier.
uber_direct_pickup_notes
string | null
Custom pickup notes for the Uber Direct courier. Maximum 280 characters.
uber_direct_ums_enabled
boolean
Whether Uber Managed Support is enabled for this Uber Direct location. Defaults to false.
uber_direct_auto_dmc
object | null
Uber Direct AutoDMC configuration: enabled, split_mode, price_tiers, and volume_multipliers.

Get delivery settings

curl https://server.chataigne.ai/v1/locations/loc_8f2k3j/delivery_settings \
  -H "x-api-key: ch_org_live_9aQ2..."
Response
{
  "object": "delivery_settings",
  "location_id": "loc_8f2k3j",
  "delivery_enabled": true,
  "pickup_enabled": true,
  "provider": "uberDirect",
  "fee_strategy": "smart",
  "postal_codes": [],
  "delivery_zones": [],
  "fee_percentage": null,
  "smart_parameters": {
    "menu_uplift": 0.15,
    "uber_commission": 0.3,
    "target_lift": 0.03,
    "coverage_fraction": 0.8
  },
  "distance_ranges": [],
  "chaskis_flat_fee": { "amount": 8, "currency": "CHF" },
  "chaskis_per_km_fee": { "amount": 4, "currency": "CHF" },
  "max_delivery_radius_in_km": 8,
  "max_delivery_fee": { "amount": 12, "currency": "CHF" },
  "min_order_amount": 25,
  "max_order_amount": 150,
  "max_items_number": 30,
  "delivery_verification_mode": "picture",
  "uber_direct_pickup_notes_enabled": true,
  "uber_direct_pickup_notes": "Ask for the order at the main counter.",
  "uber_direct_ums_enabled": false,
  "uber_direct_auto_dmc": {
    "enabled": true,
    "split_mode": "price",
    "price_tiers": [
      { "up_to_order_amount": 80, "courier_count": 1, "delivery_fee_multiplier": 1 },
      { "up_to_order_amount": null, "courier_count": 2, "delivery_fee_multiplier": 1.5 }
    ],
    "volume_multipliers": [
      { "courier_count": 1, "delivery_fee_multiplier": 1 },
      { "courier_count": 2, "delivery_fee_multiplier": 1.5 }
    ]
  }
}

Update delivery settings

PATCH only the fields you want to change. Omitted fields are preserved. Send null for nullable fields and collections when you want to clear/reset them (max_delivery_fee, delivery_zones, distance_ranges, smart_parameters, uber_direct_pickup_notes, and uber_direct_auto_dmc).
curl -X PATCH https://server.chataigne.ai/v1/locations/loc_8f2k3j/delivery_settings \
  -H "x-api-key: ch_org_live_9aQ2..." \
  -H "Content-Type: application/json" \
  -d '{
    "delivery_enabled": true,
    "provider": "uberDirect",
    "fee_strategy": "smart",
    "smart_parameters": {
      "menu_uplift": 0.15,
      "uber_commission": 0.3,
      "target_lift": 0.03,
      "coverage_fraction": 0.8
    },
    "max_delivery_fee": { "amount": 12, "currency": "CHF" },
    "delivery_verification_mode": "picture",
    "uber_direct_pickup_notes_enabled": true,
    "uber_direct_pickup_notes": "Ask for the order at the main counter.",
    "uber_direct_ums_enabled": false
  }'
Money fields use { amount, currency }. The currency should match the location’s currency; amount uses the same decimal convention as the dashboard delivery settings.

Acceptance settings

The location’s live order-acceptance state — used to pause incoming orders or signal a temporary rush.
object
string
Always acceptance_settings.
mode
string
One of online, busy, or paused.
extra_preparation_time
string
Additional preparation time applied while in busy mode (e.g. "00:15").
reason
string
Human-readable reason for the current state.

Get acceptance settings

curl https://server.chataigne.ai/v1/locations/loc_8f2k3j/acceptance_settings \
  -H "x-api-key: ch_org_live_9aQ2..."
Response
{
  "id": "loc_8f2k3j",
  "object": "acceptance_settings",
  "mode": "online",
  "extra_preparation_time": "00:00",
  "reason": null,
  "created_at": "2025-01-12T09:30:00Z",
  "updated_at": "2025-05-29T10:00:00Z"
}

Update acceptance settings

Pause incoming orders with a reason. Omitted fields keep their current value.
curl -X PATCH https://server.chataigne.ai/v1/locations/loc_8f2k3j/acceptance_settings \
  -H "x-api-key: ch_org_live_9aQ2..." \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "busy",
    "extra_preparation_time": "00:20",
    "reason": "High volume during lunch rush"
  }'
Response
{
  "id": "loc_8f2k3j",
  "object": "acceptance_settings",
  "mode": "busy",
  "extra_preparation_time": "00:20",
  "reason": "High volume during lunch rush",
  "created_at": "2025-01-12T09:30:00Z",
  "updated_at": "2025-05-29T12:31:07Z"
}
Set mode to paused to stop accepting new orders entirely, or back to online to resume. extra_preparation_time is most relevant in busy mode.

AI instructions

Free-form guidance for the AI clerk that handles conversations for this location.
object
string
Always ai_instructions.
chatbot_instructions
string
Natural-language instructions appended to the AI clerk’s behaviour for this location.

Get AI instructions

curl https://server.chataigne.ai/v1/locations/loc_8f2k3j/ai_instructions \
  -H "x-api-key: ch_org_live_9aQ2..."
Response
{
  "id": "loc_8f2k3j",
  "object": "ai_instructions",
  "chatbot_instructions": "Always suggest the daily special. Confirm allergies before finalizing any order.",
  "created_at": "2025-01-12T09:30:00Z",
  "updated_at": "2025-05-20T09:00:00Z"
}

Update AI instructions

curl -X PATCH https://server.chataigne.ai/v1/locations/loc_8f2k3j/ai_instructions \
  -H "x-api-key: ch_org_live_9aQ2..." \
  -H "Content-Type: application/json" \
  -d '{
    "chatbot_instructions": "Greet customers in French by default. Upsell desserts on orders over 40 CHF."
  }'
Response
{
  "id": "loc_8f2k3j",
  "object": "ai_instructions",
  "chatbot_instructions": "Greet customers in French by default. Upsell desserts on orders over 40 CHF.",
  "created_at": "2025-01-12T09:30:00Z",
  "updated_at": "2025-05-29T13:02:44Z"
}

Errors

Settings requests use the standard error envelope. Common cases:
Statuserror.typeWhen
401authentication_errorMissing x-api-key.
403authorization_errorAn admin key (ch_admin_) was used on /v1, or a dashboard session was used.
404not_found_errorThe location_id does not exist or is not accessible by your key.
400invalid_request_errorMalformed body — e.g. an invalid mode, a bad HH:MM value, or a from/to slot that doesn’t parse.
Every response includes an X-Request-Id; error bodies mirror it as error.request_id. See Errors for the full envelope and Request IDs.

Locations

Read and manage the parent location, including currency, country, and timezone.

Special closings

Schedule one-off date-range closures on top of the weekly opening hours.