opentable_book
Book an OpenTable reservation using slot data from find_slots. Use confirm:true to commit the booking; without it, returns a preview to verify before finalizing.
Instructions
Book an OpenTable reservation. Requires a fresh slot_hash + reservation_token from opentable_find_slots (tokens expire within minutes — call find_slots just before book). dining_area_id is OPTIONAL: when omitted it's auto-resolved to the default dining area from OpenTable's booking-details page, so find_slots → book works without a separate opentable_get_restaurant call. For CC-required slots (prime-time at busy restaurants), opentable_book refuses without a booking_token from opentable_book_preview — the preview step surfaces the cancellation policy and the saved card that would be held. Auto-fetches the user's profile (name/email/phone) from /user/dining-dashboard. Returns confirmation_number + security_token; save both — they're required to cancel. For Listing-type restaurants there's no slot to lock — callers should check opentable_get_restaurant.bookable first and surface the restaurant's phone/URL instead. Without confirm:true this returns a dry-run and makes NO booking; re-run with confirm:true to commit.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | YYYY-MM-DD | |
| time | Yes | HH:MM (24h) — must match the slot returned by find_slots | |
| confirm | No | Must be true to proceed. Without this, the tool returns a preview. | |
| slot_hash | Yes | slot_hash from opentable_find_slots | |
| party_size | Yes | ||
| booking_token | No | Opaque token from opentable_book_preview. REQUIRED for CC-required slots (book will refuse otherwise). Optional for standard slots — when present, skips a redundant re-lock. | |
| experience_id | No | Tamper-check signal for Experience tokens. When set, must match the experienceId baked into the booking_token by preview — agents that re-state the experience choice here get refused if it drifted from preview. | |
| restaurant_id | Yes | ||
| dining_area_id | No | Optional dining-area (room) id. When omitted, auto-resolved to the default dining area from the booking-details page — no opentable_get_restaurant call needed. Pass explicitly only to pin a specific room. Ignored on the booking_token path (the token already carries the resolved area). | |
| experience_ids | No | Pass-through from find_slots.experience_ids. When non-empty, book refuses without a booking_token from opentable_book_preview. | |
| database_region | No | OpenTable's sharded-database region for the restaurant. Defaults to 'NA' (North America). Pass the venue's region (e.g. for UK/EU/APAC restaurants) when booking or cancelling outside North America — slot-lock, availability, and cancel route to the wrong database shard, or fail opaquely, when this is wrong. LIMITATION: not auto-derived from restaurant data (OpenTable's availability/booking responses don't surface the shard id), so non-NA bookings must set it explicitly. | |
| reservation_token | Yes | slot_availability_token from opentable_find_slots |