resy_book
Preview an exact slot then confirm to book a table; checks existing reservations, prevents duplicates, and applies the selected payment method.
Instructions
Book a reservation. Composite tool: internally runs find-slots → get booking details → book. It books ONLY the exact slot a preview showed. The first call returns a preview (venue, date, party size, the exact slot time that would be booked, its slot_type, the payment card last-4, and the slot's cancellation_policy / payment_terms — any no-show fee or deposit) and books nothing. Pass desired_time (HH:MM, 24-hour) to target a specific slot. If your exact desired_time is not available the tool does NOT auto-book a different time — it returns the available times so you can pick, unless you pass allow_closest_time:true (which previews the nearest slot). Omit desired_time to preview the first available slot. Resy can list several slots at one time with different seating types (Dining Room / Bar / Patio) and different fees; pass slot_type to target one. To book: on a client without a confirmation prompt the preview comes back with a confirmToken bound to that exact slot and its terms — after the user approves, call again with the same arguments plus the preview's time as desired_time and the confirmToken. On a client that can prompt, call again with the preview's time as desired_time, its slot_type and its terms_token, and the user is asked to confirm. If that slot is gone, or its seating type or cancellation/payment terms changed since the preview, nothing is booked and a fresh preview is returned. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). Before booking, it checks your existing reservations and refuses if you already hold one at this venue on this date (e.g. an earlier call that timed out but went through); pass allow_duplicate:true to book another anyway. Uses the user's default payment method unless payment_method_id is supplied.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | ||
| lng | No | ||
| date | Yes | YYYY-MM-DD | |
| venue_id | Yes | ||
| slot_type | No | Seating type (e.g. 'Dining Room', 'Bar', 'Patio'), matched case-insensitively. Only slots of this type are considered. On a client that can prompt it is required to book — pass the preview's slot_type. With a confirmToken it is optional: the token already binds the seating type. | |
| party_size | Yes | ||
| terms_token | No | The preview's terms_token. It fingerprints the slot's seating type and cancellation/payment terms; if they changed since the preview, the call re-previews instead of booking. Required to book on a client that can prompt; with a confirmToken it is optional, because the token already binds the terms (a change is refused as DRAFT_CHANGED). | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. | |
| desired_time | No | HH:MM (24h) | |
| allow_duplicate | No | When true, book even if you already hold a reservation at this venue on this date. Default false: the booking refuses and lists the existing reservation, so a retry after a timed-out booking cannot book twice. | |
| payment_method_id | No | ||
| allow_closest_time | No | When true, if your exact desired_time is unavailable the preview selects the closest slot instead of returning the available times to pick from. It never books on its own: book with that slot's time as desired_time. Default false. |