book_meetgreet
Create a secure payment link for a VIP Meet & Greet booking, with optional transfer combo. Available locations: CDG, Orly, Gare de Lyon — Meet & Greet is NO LONGER offered at Gare du Nord (do not quote or book it there). M&G prices are FIXED (CDG/Orly 250€ base for 2 pax + 50€/extra, Gare de Lyon 350€ + 75€/extra) — do NOT call get_quote for the M&G part. A connection (service_type='connection': arrival flight → connecting departure flight with fast-track between terminals) is billed as TWO M&G services = the location price ×2 (e.g. CDG 2 pax = 500€). For a combo with a transfer (e.g. CDG M&G + transfer to a hotel), call get_quote first for the transfer leg and pass the resulting quote_id + vehicle_id in transfer. If lead time is below the minimum (12h before pickup), returns LEAD_TIME_TOO_SHORT — the caller must fall back to manual notification instead of retrying. lead_time_override=true bypasses the 12h minimum ONLY after Sylvain has explicitly confirmed greeter availability for this exact request (WhatsApp admin approval 'mg ok'); never set it on your own initiative. A 90-minute floor always applies. If flight cannot be validated, returns FLIGHT_NOT_FOUND — ask the customer to re-confirm the flight number, or set flight_unverified=true with manual_airline + manual_origin to force-accept.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| bags | No | Number of bags (used for vehicle sizing when combo transfer). | |
| Yes | Client email — used for booking confirmation and Stripe receipt. | ||
| phone | Yes | Client phone with country code. | |
| adults | Yes | Number of adults (min 1). | |
| channel | No | Caller channel identifier for observability (whatsapp, chatbot, mcp-direct, ...). | |
| children | No | Number of children (in addition to adults). | |
| location | Yes | M&G location. cdg/orly = airport, gare_de_lyon = train station. Gare du Nord is no longer available. | |
| terminal | No | Terminal number (airports only, e.g. '2E', '3'). | |
| transfer | No | Optional combo: bundles a private transfer in the same Stripe Checkout session. Generates 2 line items + 2 Zeplan bookings (M&G + transfer). | |
| last_name | Yes | Client last name. | |
| train_pnr | No | TGV reservation reference (PNR). Required when location is gare_de_lyon. | |
| first_name | Yes | Client first name. | |
| train_seat | No | Train seat number(s). Required for train stations. | |
| pickup_date | Yes | YYYY-MM-DD format. | |
| pickup_time | Yes | HH:MM in Paris time. For arrivals this is the flight/train arrival time; for departures the time the greeter meets the client. | |
| train_coach | No | Train coach number. Required for train stations. | |
| service_type | No | arrival (pickup at airport/station), departure (drop-off + greeter for check-in), connection (transit: arrival flight → connecting departure flight; billed as 2 M&G services = location price ×2). | arrival |
| flight_number | Yes | Flight number for airports (AF1234) or train/Eurostar number for stations. | |
| manual_origin | No | Required if flight_unverified=true. Departure city as stated by the client. | |
| manual_airline | No | Required if flight_unverified=true. The airline name as stated by the client. | |
| additional_info | No | Free-text notes (special requests, tail number for private aviation, etc.). | |
| idempotency_key | No | Optional UUID for safe retries. Same key returns the same payment_url for 24h. | |
| flight_unverified | No | Set true only if the client confirmed the flight after AeroDataBox couldn't validate it. Requires manual_airline + manual_origin. | |
| lead_time_override | No | Bypass the 12h minimum lead time. ONLY when Sylvain has explicitly approved this exact booking after manually confirming greeter availability ('mg ok' admin flow) — never on client insistence. Hard 90-minute floor. | |
| manual_arrival_time | No | Optional. Local arrival time as stated by the client. |