Maison Table Management
Maison's own restaurant booking system. Nothing to sign up for and no third-party account — available to any property on Maison. Maison Table Management official site ↗
What it covers
Restaurant covers and seating. Connecting it lets the concierge check table availability, hold a slot and take a booking inside the same conversation as everything else, instead of handing the guest off to a separate system.
What you need
- A Client ID and Client Secret issued by Maison Apps for your property (OAuth 2.1 client credentials).
- The API base URL for your table app.
- Your Property ID in Maison Apps. This is never visible to the assistant — it is attached server-side on every call so a conversation cannot reach another property's tables.
Setup steps
Request credentials from Maison Apps
Ask Maison Apps for an OAuth client for your property. They issue the Client ID and Client Secret.Enter them in the business console
Add the client ID, client secret, API base URL and property ID on the integration's settings page. The secret is encrypted at rest and never shown again once saved.Choose which tools to enable
The booking loop and availability lookups are on by default. Operator-grade tools are off — see the table below.
Available tools
14 tools are available for Maison Table Management. The concierge calls them on a guest's behalf during a conversation; which are enabled is set per property, so you only turn on what you want it to be able to do.
Enabled by default (9)
On as soon as the integration is connected, with nothing else to configure.
| Tool | What it does |
|---|---|
maisonapps_cancel_reservation | Cancel a reservation. Requires a reason for the cancellation — collect this from the guest or provide a standard reason (e.g. 'Guest requested cancellation'). Confirm the cancellation intent with the guest before calling. A cancelled reservation is not deleted; it can be reinstated by the operator if needed. |
maisonapps_create_hold | Claim a quoted availability slot as a hold — reserving it for a short window while the guest completes their booking details. Returns a holdId and utcExpiresAt indicating when the hold expires. Call maisonapps_extend_hold to extend the window, or maisonapps_release_hold to release it if the guest changes their mind. Pass the holdId to maisonapps_create_reservation to confirm. Idempotency-Key: mint a fresh UUID v4 for each new hold operation; reuse the same key when retrying after a lost response. Never reuse a key for a different hold. |
maisonapps_create_reservation | Book a table reservation. Requires a startsAt datetime (property's wall clock as Z — e.g. '2026-09-15T19:30:00Z' for 7:30 PM at the restaurant regardless of timezone) and the party size. Optionally pass a holdId to convert a hold to a confirmed booking. ALWAYS collect the guest's full name AND email address before calling, and pass them as guestName and guestEmail — without an email on file the guest cannot later verify their identity to view, modify, or cancel this booking (a real booking was stranded this way). Ask for a phone number too when natural. Idempotency-Key: mint a fresh UUID v4 for each new reservation; reuse the same key when retrying after a lost response. Never reuse a key for a different reservation. |
maisonapps_find_reservation | Look up a reservation by confirmation number — returns booking-identity fields only (id, status, confirmationNumber, cancelledAt, assigned table, and line items). Use when a guest provides their confirmation number and needs to view, modify, or cancel their booking. The returned reservation id is required by maisonapps_get_reservation, maisonapps_modify_reservation, and maisonapps_cancel_reservation. This tool does NOT return guest contact details — use maisonapps_get_reservation (after booker verification) for full details. The propertyId is pre-configured and must never be invented or guessed. |
maisonapps_get_availability | Check which time slots are available for a given date and party size. Returns a list of slots with their times, service IDs, and vacancy counts. Use this before quoting a specific time to a guest — an empty slots list means no availability, which is not an error; offer alternative dates. The propertyId is pre-configured and must never be invented or guessed. Do not retry on empty results — an empty response is the correct answer. Date format: YYYY-MM-DD. Time format: HH:MM (property's local wall clock). |
maisonapps_get_reservation | Get the full details of a single reservation by its ID: status, confirmation number, booking time, party size, guest contact details, and notes. Requires booker verification — call POST /i/integration/verification/request first to send a code to the guest's email, then POST /i/integration/verification/verify to obtain a verification token. Pass the token on subsequent calls. Use maisonapps_find_reservation to look up the reservation id by confirmation number. |
maisonapps_modify_reservation | Modify an existing reservation — change the time, party size, or guest contact details. Only include the fields being changed; omitted fields keep their current values. startsAt: use the property's wall clock as Z (e.g. '2026-09-15T20:00:00Z'). Confirm the change with the guest before calling. Idempotency-Key: mint a fresh UUID v4 for this modification; reuse on retry. Never retry without the same Idempotency-Key — duplicate changes may be applied. |
maisonapps_quote_availability | Get a priced quote for a specific date, time, and party size. Returns an availabilityId token (valid for approximately 120 seconds) and an expiresAt timestamp. Pass the availabilityId to maisonapps_create_hold to claim the slot, or directly to maisonapps_create_reservation to book without a hold. If the quote has expired, call this again to get a fresh one — do not reuse an expired token. The propertyId is pre-configured. Date format: YYYY-MM-DD. Time format: HH:MM (property's local wall clock, e.g. '19:30'). |
maisonapps_release_hold | Release a hold before it expires, freeing the slot for other guests. Use when the guest declines to proceed with a booking after a hold was placed. Returns no body on success (HTTP 204). Holds expire automatically if not released or converted to a reservation, so this is a courtesy — not required. |
Available on request (5)
Off by default. Ask Maison to enable any of these for your property — several change data in your Maison Table Management account, so they are opt-in rather than assumed.
| Tool | What it does |
|---|---|
maisonapps_confirm_reservation | Confirm a reservation that is in inquiry or quoted status, converting it to a confirmed booking. Use when the guest has verbally confirmed and the reservation needs to be moved from inquiry to confirmed state. Returns the new status and the tables seated at (if assigned). For direct bookings (created via maisonapps_create_reservation), this step is usually not needed. |
maisonapps_extend_hold | Extend a hold's expiry window so the guest has more time to complete booking details. Returns the new expiry time. Call this when the hold is about to expire and the guest is still deciding. A hold that has already expired cannot be extended — release it and create a new quote and hold instead. |
maisonapps_get_health | OPERATOR-GRADE: check whether the Maison Apps table management service is reachable and healthy. Use for diagnostic purposes only — not for guest conversations. Returns HTTP 200 when the service is up. |
maisonapps_get_properties | Get the property's configuration details — name, timezone, currency, and address. Use when a guest asks about the restaurant's location, currency, or general details. This is a slow-changing catalog read cached for up to one hour. |
maisonapps_search_reservations | OPERATOR-GRADE: search reservations for the property. Could expose other guests' booking details — only use in operator-facing contexts, never in guest chat. Filter by date (YYYY-MM-DD), status, or party size. The response is the newest seatings first. Use maisonapps_get_reservation for a single booking by ID. |