Place a booking (async)
place_bookingRequest a table reservation. Returns booking_id with state 'queued' immediately; fulfillment is asynchronous (a call is placed to the merchant). Poll get_booking_status or supply callback_url for webhooks. RETRY SAFETY: pass a unique client_reference_id (recommended: always); if this call times out or errors ambiguously, retry with the SAME client_reference_id and the registry returns the already-created booking instead of double-booking the restaurant. Never re-call place_booking after a timeout without one. If the merchant counter-offers a time within window_minutes and accept_within_window=true, it is auto-accepted (recommended). Otherwise the booking pauses in needs_input for you to resolve via modify_booking. Merchants on the human_call channel are fulfilled by a human operator during the operator window published in get_registry_meta — those bookings queue until worked (up to the channel SLA), so book ahead rather than for the next hour.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| contact | No | Optional phone/email for confirmation relay to the end human | |
| datetime | Yes | Requested time, ISO-8601. Naive ('2026-07-18T19:00') means the merchant's LOCAL wall time (see the merchant's timezone field); an explicit offset ('2026-07-18T19:00:00+09:00') is also accepted | |
| party_size | Yes | ||
| merchant_id | Yes | ||
| callback_url | No | Webhook URL for booking state-change events | |
| window_minutes | No | Acceptable +/- window around datetime | |
| sandbox_outcome | No | TEST ONLY, sandbox merchants (sandbox: true): force the simulated call's result so you can exercise a specific branch on demand — confirmed, no_answer (retries then fails), counter_offer (pauses in needs_input), fully_booked, merchant_declined, bad_data. Rejected for real merchants; omit it in production | |
| reservation_name | Yes | Name for the reservation | |
| special_requests | No | ||
| client_reference_id | No | Your unique ID for this booking request (a UUID is ideal). Retrying with the same value returns the existing booking (idempotent_replay: true) instead of creating a duplicate; the same value with different parameters is rejected as client_reference_conflict | |
| accept_within_window | No | Auto-accept merchant counter-offers inside the window (recommended: true) |