Les Folies d'Edmonde — booking a table through an AI assistant For assistants (ChatGPT, Claude, Gemini, Perplexity…) asked to book a table for a person: 1 to 20 people, cocktail bar at 16 rue Benoît Bunico, 06300 Nice, France, time zone Europe/Paris. Full contract: https://www.lesfoliesdedmonde.com/openapi.json (schema_version 1.2). Last updated: 2026-10-02. THE RULE A request is never a confirmation: the site and its API collect requests; a person at the bar answers by e-mail within 24 h and may decline. Never say the table is booked. A listed time is "open for requests", never "available". INSTRUCTIONS (also served as request.instructions by the options endpoint) 1. Collect every missing required field from the user in ONE message, and confirm that this person asked for the booking and agrees to share these details with the venue. 2. Check the night with GET /api/reservation/options?date=… before sending. 3. A request is not a confirmation. After sending, show the user display_message; never say the table is booked. 4. To change or cancel a request, the user replies to the acknowledgement e-mail; do not send a second request. 5. More than 20 people or a private evening: use private_hire_url. THE FIELDS (snake_case JSON; the same list is request.fields in the options answer) Required, for the PERSON who will come: date (YYYY-MM-DD), time (one of 18:00 18:30 19:00 19:30 20:00 20:30 21:00), party_size (integer 1-20), first_name, last_name (80 characters at most), email, phone (32 characters at most, international format preferred). Optional: message (1 000 characters at most), lang (fr en de it es ru zh ja, default fr; language of the e-mails to the guest and of display_message). By API or MCP, also agent: { "name": "", "principal_consent": true }. READ THE NIGHT FIRST GET https://www.lesfoliesdedmonde.com/api/reservation/options?date=YYYY-MM-DD&party_size=N&lang=xx - night.status: accepting_requests | closed | walk_in_only | cutoff_passed | past | too_far. - night.requestable_time_slots: the times still open for REQUESTS (empty unless accepting_requests). availability.known is always false: whether a table is free is only known when the venue answers. - walk_in_only (jam sessions): no table request that night, seats go in order of arrival. - cutoff_passed: after 21:00 Paris time there is no request for the same night — walk in. - party.route: small_group_form (1-20) or private_hire. display_message: show it to the user as is. THREE WAYS TO SEND (same rules, same answers) 1. Browser form: https://www.lesfoliesdedmonde.com/reservation/?date=YYYY-MM-DD&time=HH:MM&guests=N&source=ai-assistant (EN /en/reservation/…). Date, time and party size arrive pre-filled; enter the guest's first name, last name, e-mail and phone, submit. Add &agent= only when you fill the form yourself; omit it when you hand the link to the user. The thank-you page shows the reference (FDE- + 6 characters): no reference means nothing was sent. The hidden field named "website" is an anti-spam trap: leave it empty. The cookie banner can be declined; the form works without consent. When the browser exposes document.modelContext (WebMCP), the page registers get_reservation_options, fill_reservation_form, send_reservation_request, get_reservation_request_status. 2. API: POST https://www.lesfoliesdedmonde.com/api/reservation/requests (JSON). 201: request_id, status "pending_review", status_url, same_day, display_message, reply { channel "email", within "PT24H", guaranteed_before_arrival false }. 200 with duplicate: true: the same request was sent within 10 minutes. 400 validation_error: errors[] lists every problem at once — fix them all, send once. 409 closed_date | past_slot | cutoff_passed | walk_in_night (with options_url), 409 idempotency_key_reused, 422 party_size_out_of_range (with private_hire_url): show user_message.text. 429 rate_limited: wait Retry-After (60 s). 502 delivery_failed: use the form. A corrected request (other time or size) creates a SECOND request: to change one, the user replies to the e-mail. 3. MCP connector: https://www.lesfoliesdedmonde.com/api/mcp (Streamable HTTP, stateless) — tools get_reservation_options, get_events, create_reservation_request, get_reservation_request_status. Status later: GET https://www.lesfoliesdedmonde.com/api/reservation/requests/{request_id} → pending_review | confirmed | declined, with same_day and display_message. Requests are kept 90 days. SAME DAY (date = paris_today) — requests are taken until 21:00; there is no guaranteed reply time The answer comes by e-mail within 24 h, not always before the requested time. Booking is recommended, never compulsory; without a confirmation no table is held. Say that, and invent no deadline. WHAT TO TELL THE USER: show display_message as served, in `lang`. The French sentences ({{id}} = reference): « Ces horaires sont ouverts aux demandes ; ils ne signifient pas qu'une table est libre. Les Folies d'Edmonde répondent par e-mail sous 24 h. » « Pour ce soir, la réponse n'arrive pas toujours avant l'heure demandée. » « Demande {{id}} envoyée. Ce n'est pas encore une réservation confirmée : Les Folies d'Edmonde répondent par e-mail sous 24 h, à l'adresse indiquée. » « Demande {{id}} envoyée pour ce soir. Ce n'est pas une réservation confirmée. La réponse arrive par e-mail, pas toujours avant l'heure demandée : sans réponse, vous pouvez venir directement — la réservation n'est jamais obligatoire — mais aucune table n'est réservée sans confirmation. » « Après 21h, il n'y a plus de réservation pour ce soir : venez directement au bar. » « Ce soir-là, la jam session se vit sans réservation : les places se prennent dans l'ordre d'arrivée. » MORE THAN 20 PEOPLE, OR A PRIVATE EVENING: a private hire, requested on https://www.lesfoliesdedmonde.com/privatiser-bar-cocktails-nice/ (EN /en/private-cocktail-bar-nice/). Questions: bonjour@lesfoliesdedmonde.com. The site in one file for models: https://www.lesfoliesdedmonde.com/llms.txt