{"openapi":"3.1.0","info":{"title":"Côte Privée: private driver in Burgundy","version":"1.2.0","summary":"Prices, places, events and booking of a private driver in Beaune, Burgundy.","description":"Prices, places, events, availability and booking of a private driver (French VTC) based in Beaune, Burgundy: wine days, driver by the hour, airport and station transfers. Prices are per vehicle for 1 to 4 guests in the standard car (the Polestar 2), taxes, tolls and parking included; a Mercedes E-Class or V-Class (up to 7 guests) is on request for a supplement per day of service; tasting fees are paid directly to the estates. Public, no authentication. The same data and booking requests are available to AI agents through the MCP server at https://www.cote-privee.com/mcp (Streamable HTTP, protocol versions 2026-07-28 and 2025-11-25).","contact":{"name":"Côte Privée","email":"contact@cote-privee.com","url":"https://www.cote-privee.com/contact"}},"externalDocs":{"description":"For AI agents and developers: the MCP server, the quote API, the data files and the booking links","url":"https://www.cote-privee.com/agents"},"servers":[{"url":"https://www.cote-privee.com"}],"security":[],"paths":{"/api/quote":{"get":{"operationId":"quote","summary":"Exact price of a service and a link to the booking page, already filled in","description":"The price /book would charge, per vehicle, with the car's supplement per day of service when a Mercedes is asked for (car; more than 4 guests are priced with the V-Class: carRaised). Stops farther from Beaune take extra hours on their wine day (Gevrey-Chambertin: one on a half day; the Mâconnais: two on a full day); a wine day too short for its stops is priced as the day they need, with its extra hours (optionRaised, extraHours). items (a JSON array of up to 6 services, each with these fields) prices a whole trip: one total (paid in full once the driver confirms), one link. A ride from or to Paris or Lyon airport never costs less than that city's transfer to Beaune (the car comes from Beaune), the same both ways. Names are matched loosely (resolved); an unknown place or route is a 400 with candidates (unknown_place, unknown_route). alternatives: cheaper products that do the same job. url: the page of the priced service, and pricesUrl the prices page, to cite beside bookUrl.","parameters":[{"name":"service","in":"query","required":true,"schema":{"type":"string","enum":["wine-tour","driver","transfer"]}},{"name":"option","in":"query","schema":{"type":"string","enum":["half","full","long"]},"description":"Wine day length; raised to the day the stops need (optionRaised in the answer)"},{"name":"route","in":"query","schema":{"type":"string","maxLength":120,"examples":["lyon","lyon-beaune","Lyon airport"]},"description":"Transfer to or from Beaune, by id or page slug (lyon (lyon-beaune), paris (paris-beaune), dijon (dijon-beaune), geneva (geneva-beaune), creusot (le-creusot-tgv-beaune), lfsd (dijon-airport-beaune), lfgj (dole-jura-airport-beaune)) or by name (\"Lyon airport\", \"Dijon-Bourgogne\", \"Dole\"): Lyon airport or Part-Dieu, Paris, Dijon station, Geneva airport, Le Creusot TGV station, Dijon-Bourgogne airport (lfsd), Dole-Jura airport (lfgj). An unknown route is a 400 with code unknown_route, the allowed ids and candidates, the same answer as the MCP tool quote."},{"name":"from","in":"query","schema":{"type":"string","enum":["beaune","dijon","lyon","paris","geneva","creusot","lfsd","lfgj","lfgf","lfgz","lflh","lfgi","lfep","macon","chalon","reims","epernay","troyes","colmar","strasbourg","besancon","arbois","annecy","chamonix","avignon"]},"description":"Start of a driver trip or of a transfer to another place: Beaune, a station, a city, or an airport or airfield by its ICAO code in lower case (lfgf Beaune-Challanges, lfgz Nuits-Saint-Georges, lflh Chalon-Champforgeuil…)"},{"name":"to","in":"query","schema":{"type":"string","maxLength":200},"description":"A place: kind:id (village, chateau, sight, restaurant), page path or name"},{"name":"direction","in":"query","schema":{"type":"string","enum":["to","from"]},"description":"Transfer: to Beaune or the place (to, the default), or from it to the station, airport or city (from): from=paris&to=village:meursault&direction=from is Meursault → Paris (Charles de Gaulle, Orly or the city), at the same fare; bookUrl opens it that way (dir=from)"},{"name":"stops","in":"query","schema":{"type":"string"},"description":"Places of a wine day, comma-separated (12 at most)"},{"name":"hours","in":"query","schema":{"type":"integer","minimum":3,"maximum":12},"description":"Driver by the hour"},{"name":"extraHours","in":"query","schema":{"type":"integer","minimum":0,"maximum":3},"description":"Extra hours of a wine day; without it, those its stops need on that day"},{"name":"returnTrip","in":"query","schema":{"type":"boolean"},"description":"The driver to a place: back the same day, the driver waiting for you (at most the hours of get_prices tripsFromBeaune.returnWaitHours). Transfer: the return journey another day"},{"name":"returnLater","in":"query","schema":{"type":"boolean"},"description":"The driver to a place, with returnTrip: back later the same day, the driver coming back for you (two one-way rides)"},{"name":"back","in":"query","schema":{"type":"string","enum":["none","wait","later","day"]},"description":"A ride's way back, instead of returnTrip: wait or later (the same day; never from or to paris), day (another day)"},{"name":"stop","in":"query","schema":{"type":"string"},"description":"A ride's stop on the way (a tasting, a lunch): a place id or name"},{"name":"stopHours","in":"query","schema":{"type":"integer","minimum":1,"maximum":3},"description":"Hours of the stop, each at the hourly price; its detour is added by the km"},{"name":"date","in":"query","schema":{"type":"string","format":"date"}},{"name":"guests","in":"query","schema":{"type":"integer","minimum":1,"maximum":7},"description":"4 at most in the Polestar 2 and the E-Class, up to 7 in the V-Class"},{"name":"car","in":"query","schema":{"type":"string","enum":["polestar","eclass","vclass"]},"description":"The car: polestar (the default, included), eclass (Mercedes E-Class, 4 guests) or vclass (Mercedes V-Class, up to 7 guests), the Mercedes on request for a supplement per day of service"},{"name":"time","in":"query","schema":{"type":"string","pattern":"^\\d\\d:\\d\\d$"},"description":"Pickup time HH:MM, carried into the booking link"},{"name":"luggage","in":"query","schema":{"type":"integer","minimum":0,"maximum":6},"description":"Bags: carried into the link (a transfer), checked against the car (fits)"},{"name":"items","in":"query","schema":{"type":"string"},"description":"A JSON array of 1 to 6 services, each with the parameters above"},{"name":"lang","in":"query","description":"Language of the texts of the answer","schema":{"type":"string","enum":["en","fr","de","zh"]}}],"responses":{"200":{"description":"The price per vehicle (paid in full once the driver confirms: payment) and the booking link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quote"}}}},"400":{"description":"Unknown service, route or place, with what to change","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRefusal"}}}},"414":{"description":"Query longer than 2 KB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/agent/availability":{"get":{"operationId":"availability","summary":"Whether the car and its driver are free on a day, and the next free days","description":"free: nothing holds the day yet; pending: a request waits for the driver's answer and may still be confirmed; busy: taken; unbookable: outside the booking page's rules (tomorrow to 18 months ahead, Beaune time, and the service's hours); unknown: the bookings could not be read just now. The driver confirms every booking. url: the page to cite (the service's own when one is asked about), pricesUrl: the prices page. The same answer as the MCP tool check_availability, kept a minute in caches. OPTIONS answers the CORS preflight (204).","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"days","in":"query","schema":{"type":"integer","minimum":1,"maximum":31},"description":"How many days from date"},{"name":"service","in":"query","schema":{"type":"string","enum":["wine-tour","driver","transfer"]}},{"name":"time","in":"query","schema":{"type":"string","pattern":"^\\d\\d:\\d\\d$"}},{"name":"lang","in":"query","description":"Language of the texts of the answer","schema":{"type":"string","enum":["en","fr","de","zh"]}}],"responses":{"200":{"description":"The state of the day, each day asked, the next free days and the booking rules","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Availability"}}}},"400":{"description":"A date that is not YYYY-MM-DD","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRefusal"}}}}}}},"/api/agent/booking-request":{"post":{"operationId":"requestBooking","summary":"Send a booking request, as the MCP tool request_booking (no form ticket)","description":"For agents that call functions. One service (its fields at the top level), several (items) or a plan of rides over several days of /data/trips.json (trip, startDate), with the traveller's details, once the traveller has seen the price and accepted the terms of sale. Nothing is charged: the driver confirms by e-mail, and the confirmation says how to pay the full price (next says it for this request; paymentUrl once there is a link). dry_run checks and prices without sending, never counted. The same request within a day, or the same requestId (or Idempotency-Key), answers the same reference. Only valid requests are counted: 3 per address and e-mail address in 15 minutes, 20 per address in an hour, 3 a day per e-mail address.","parameters":[{"name":"Idempotency-Key","in":"header","schema":{"type":"string","pattern":"^[\\w-]{8,64}$"},"description":"Stands for requestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentBookingRequest"}}}},"responses":{"200":{"description":"The booking request: reference, status, total, payment (in full when the driver confirms; the older split fields stay, deprecated), what happens next (or what a dry run would send)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentBookingResult"}}}},"400":{"description":"Not one JSON object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRefusal"}}}},"403":{"description":"Sent from another website's page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRefusal"}}}},"409":{"description":"requestId already used for another request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRefusal"}}}},"413":{"description":"Body over 16 KB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRefusal"}}}},"415":{"description":"Not application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRefusal"}}}},"422":{"description":"Arguments to change (errors: field, code, allowed or expected, message)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRefusal"}}}},"429":{"description":"Too many requests: retryAfter seconds (and Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRefusal"}}}},"503":{"description":"The request could not be delivered; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRefusal"}}}}}}},"/api/booking/status":{"get":{"operationId":"bookingStatus","summary":"What became of a booking request: requested, confirmed, declined, paid (deposit_paid) or cancelled","description":"For the reference and the e-mail address the request was made with (both must match; a +tag or Gmail's dots do not matter), never cached. The MCP tool get_booking_status answers the same fields, with what the status means (meaning). At most 60 lookups per address in 15 minutes.","parameters":[{"name":"ref","in":"query","required":true,"schema":{"type":"string","pattern":"^CP-[A-Z2-9]{3}-[A-Z2-9]{3}$"}},{"name":"email","in":"query","required":true,"schema":{"type":"string","format":"email"}}],"responses":{"200":{"description":"The status of the booking, its days and total, and the link to pay the full price once it can be paid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingStatus"}}}},"400":{"description":"ref or email missing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No booking with this reference and e-mail address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many lookups from this address (Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The status cannot be read just now","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/booking":{"post":{"operationId":"book","summary":"Send a booking (same fields as the booking page); the customer receives the booking record by e-mail","description":"Take a ticket from GET /api/booking/config first and send it at least 3 seconds later (plus a Turnstile token when that answer names a site key). The same Idempotency-Key within a day returns the same booking. Nothing is charged: the driver confirms by e-mail and says how to pay the full price, which is paid only then.","parameters":[{"name":"Idempotency-Key","in":"header","schema":{"type":"string","pattern":"^[\\w-]{16,64}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingRequest"}}}},"responses":{"200":{"description":"The booking: reference, total and payment (in full when the driver confirms; the older split fields and paymentUrl stay, deprecated)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingResult"}}}},"400":{"description":"Ticket too recent or missing, or Turnstile failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingError"}}}},"403":{"description":"Sent from another website","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingError"}}}},"409":{"description":"Idempotency-Key already used for another booking","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingError"}}}},"413":{"description":"Body over 32 KB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingError"}}}},"415":{"description":"Not application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingError"}}}},"422":{"description":"Fields in error (data.fields: field ids and message keys of the booking page)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingError"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingError"}}}},"503":{"description":"The booking could not be delivered; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingError"}}}}}}},"/data/prices.json":{"get":{"operationId":"prices","summary":"Every price per vehicle","responses":{"200":{"description":"Wine days, driver by the hour, the cheapest trip, transfers and when the price is paid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Prices"}}}},"4XX":{"description":"Not found: the file is published with the site"}}}},"/data/places.json":{"get":{"operationId":"places","summary":"Every place with its coordinates, drive time and price from Beaune, Paris and Lyon airport","responses":{"200":{"description":"The places, nearest to Beaune first","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Places"}}}},"4XX":{"description":"Not found: the file is published with the site"}}}},"/data/places-lite.json":{"get":{"operationId":"placesLite","summary":"Every place in short","responses":{"200":{"description":"The places in short, nearest to Beaune first","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacesLite"}}}},"4XX":{"description":"Not found: the file is published with the site"}}}},"/data/events.json":{"get":{"operationId":"events","summary":"Events of the next twelve months","responses":{"200":{"description":"The events, each at its next appearance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Events"}}}},"4XX":{"description":"Not found: the file is published with the site"}}}},"/data/trips.json":{"get":{"operationId":"trips","summary":"Every plan of rides over several days, with its days, its price per vehicle and its booking link (transport only)","responses":{"200":{"description":"The plans of the multi-day trips, in the order of the list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Trips"}}}},"4XX":{"description":"Not found: the file is published with the site"}}}},"/data/packages.json":{"get":{"operationId":"packages","deprecated":true,"summary":"The former address of /data/trips.json: the same plans, under packages","responses":{"200":{"description":"The plans of the multi-day trips, in the order of the list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Packages"}}}},"4XX":{"description":"Not found: the file is published with the site"}}}}},"components":{"schemas":{"Quote":{"type":"object","description":"The price the booking page would charge, per vehicle, in euros.","required":["service","title","details","price","servicePrice","car","currency","perVehicle","guests","maxGuests","payment","deposit","tastingsIncluded","resolved","notFound","url","pricesUrl","bookUrl"],"properties":{"service":{"type":"string","enum":["wine-tour","driver","transfer","trip"],"description":"trip: several services (items)"},"option":{"type":"string","enum":["half","full","long"],"description":"The wine day priced"},"extraHours":{"type":"integer","minimum":0,"description":"The extra hours of the wine day priced (those its stops need farther from Beaune, or those asked)"},"optionRaised":{"type":"object","description":"The day asked for was too short for its stops: the day they need, with its extra hours, is priced.","required":["from","to","reason"],"properties":{"from":{"type":"string","enum":["half","full","long"]},"to":{"type":"string","enum":["half","full","long"]},"extraHours":{"type":"integer","minimum":0},"reason":{"type":"string"}}},"title":{"type":"string"},"details":{"type":"array","items":{"type":"string"}},"drive":{"type":"object","description":"A transfer's road distance and drive time","required":["km","minutes"],"properties":{"km":{"type":"number"},"minutes":{"type":"number"}}},"date":{"type":"string","format":"date"},"time":{"type":"string"},"luggage":{"type":"integer","description":"A transfer's bags"},"services":{"type":"array","items":{"type":"object","required":["service","title","details","servicePrice","url"],"properties":{"service":{"type":"string","enum":["wine-tour","driver","transfer"]},"option":{"type":"string","enum":["half","full","long"]},"extraHours":{"type":"integer","minimum":0},"optionRaised":{"type":"object","required":["from","to","reason"],"properties":{"from":{"type":"string","enum":["half","full","long"]},"to":{"type":"string","enum":["half","full","long"]},"extraHours":{"type":"integer","minimum":0},"reason":{"type":"string"}}},"title":{"type":"string"},"details":{"type":"array","items":{"type":"string"}},"drive":{"type":"object","required":["km","minutes"],"properties":{"km":{"type":"number"},"minutes":{"type":"number"}}},"date":{"type":"string","format":"date"},"time":{"type":"string"},"luggage":{"type":"integer"},"servicePrice":{"type":"number"},"url":{"type":"string","format":"uri","description":"The page of the priced service, to cite: a wine day's, a catalogue transfer's, the wine village's own driver page for a ride or transfer there (its fares from Beaune, Paris and Lyon, both ways), else the private driver's or the transfers'"},"availability":{"type":"object","description":"free: nothing holds the day (or the services' times) yet; pending: a request waits for the driver and may still be confirmed; busy: taken. The driver confirms every booking.","required":["state"],"properties":{"state":{"type":"string","enum":["free","pending","busy"]},"nextFree":{"type":"array","items":{"type":"string","format":"date"}},"conflicts":{"type":"array","description":"With each service's day and time: the windows of the services that a request or a booking holds","items":{"type":"object","required":["item","date","from","to","state"],"properties":{"item":{"type":"integer","description":"The service, from 0"},"date":{"type":"string","format":"date"},"from":{"type":"string"},"to":{"type":"string"},"state":{"type":"string","enum":["pending","busy"]}}}}}}}},"description":"quote with items: each service"},"price":{"type":"number","description":"What the booking page charges: the services and the car's supplement"},"servicePrice":{"type":"number","description":"The price of the service alone, before the car's supplement (the same as price for the Polestar 2)"},"car":{"type":"object","description":"The car priced: the one asked for, or the one that seats the guests.","required":["id","name","seats","onRequest","supplementPerDay","days","supplement"],"properties":{"id":{"type":"string","enum":["polestar","eclass","vclass"]},"name":{"type":"string"},"seats":{"type":"integer"},"onRequest":{"type":"boolean","description":"Confirmed with the booking, once the car's availability is checked"},"supplementPerDay":{"type":"number","description":"The most a day of service costs"},"days":{"type":"integer","minimum":1,"description":"Days of service the supplement is charged for: each distinct day, one per service or trip back not dated yet"},"supplement":{"type":"number","description":"What the car adds over these days: supplementPerDay a day, less on a day of rides only (get_prices cars: rideBase, ridePerKm); part of price"}}},"carRaised":{"type":"object","description":"The guests did not fit the car asked for: the car that seats them is priced.","required":["from","to","reason"],"properties":{"from":{"type":"string"},"to":{"type":"string","enum":["polestar","eclass","vclass"]},"reason":{"type":"string"}}},"currency":{"type":"string","enum":["EUR"]},"perVehicle":{"type":"boolean"},"guests":{"type":"integer"},"maxGuests":{"type":"integer","description":"Guests the car priced takes"},"payment":{"type":"string","enum":["in full when the driver confirms"],"description":"When the price is paid: in full, once the driver confirms; nothing with the request"},"deposit":{"type":"number","deprecated":true,"description":"Deprecated: equals the price, which is paid in full once the driver confirms (see payment)"},"balance":{"type":"number","deprecated":true,"description":"Deprecated: always 0, the full price being paid once the driver confirms (see payment)"},"tastingsIncluded":{"type":"boolean"},"fits":{"type":"object","description":"Whether the party and its bags fit the car priced","required":["guests","luggage"],"properties":{"guests":{"type":"boolean"},"luggage":{"type":["boolean","null"],"description":"null: no bags given"},"suggestCar":{"type":"string","enum":["polestar","eclass","vclass"]},"note":{"type":"string"}}},"alternatives":{"type":"array","description":"Other products that do the same job for less","items":{"type":"object","required":["label","price","bookUrl","why"],"properties":{"label":{"type":"string"},"price":{"type":"number"},"bookUrl":{"type":"string","format":"uri"},"why":{"type":"string"}}}},"availability":{"type":"object","description":"free: nothing holds the day (or the services' times) yet; pending: a request waits for the driver and may still be confirmed; busy: taken. The driver confirms every booking.","required":["state"],"properties":{"state":{"type":"string","enum":["free","pending","busy"]},"nextFree":{"type":"array","items":{"type":"string","format":"date"}},"conflicts":{"type":"array","description":"With each service's day and time: the windows of the services that a request or a booking holds","items":{"type":"object","required":["item","date","from","to","state"],"properties":{"item":{"type":"integer","description":"The service, from 0"},"date":{"type":"string","format":"date"},"from":{"type":"string"},"to":{"type":"string"},"state":{"type":"string","enum":["pending","busy"]}}}}}},"resolved":{"type":"array","items":{"type":"object","required":["asked","id","kind","name","how"],"properties":{"asked":{"type":"string"},"id":{"type":"string","description":"kind:id of the place, or event:<id>"},"kind":{"type":"string"},"name":{"type":"string"},"how":{"type":"string","enum":["id","name","typo","partial","event"],"description":"typo or partial: matched loosely, check it is the one meant"},"place":{"type":"string","description":"An event: the place it is held at"}}}},"notFound":{"type":"array","items":{"type":"string"},"description":"Always empty in an answer: an unknown name is an error with candidates"},"url":{"type":"string","format":"uri","description":"The page of the priced service, to cite: a wine day's, a catalogue transfer's, the wine village's own driver page for a ride or transfer there (its fares from Beaune, Paris and Lyon, both ways), else the private driver's or the transfers'; for a trip of several services, the prices page"},"pricesUrl":{"type":"string","format":"uri","description":"The prices page, in the language asked for"},"bookUrl":{"type":"string","format":"uri","description":"The booking page, already filled in: the traveller checks it and sends the request"}}},"Prices":{"type":"object","description":"Prices per vehicle for 1 to 4 guests, in euros, taxes, tolls and parking included.","required":["updated","validThrough","currency","perVehicle","maxGuests","vehicle","cars","taxesIncluded","tollsAndParkingIncluded","tastingsIncluded","payment","wineDays","wineDayByDistance","driverByTheHour","tripsFromBeaune","transfers","pricesPage"],"properties":{"description":{"type":"string"},"updated":{"type":"string","format":"date","description":"When the prices or the texts of the site last changed"},"validThrough":{"type":"string","format":"date","description":"Read the prices again after this day; a booking is priced when it is made"},"currency":{"type":"string","enum":["EUR"]},"perVehicle":{"type":"boolean"},"maxGuests":{"type":"integer","description":"Guests the standard car takes: every price above is per vehicle for 1 to this many"},"vehicle":{"type":"string","description":"The standard car, included in every price"},"cars":{"type":"array","description":"The standard car and the two Mercedes on request. A Mercedes costs its supplement for each distinct day of service of a booking, added to the total; on a day of rides only, rideBase + ridePerKm × km for each way a ride drives the guests, rounded up to 10, at most supplementPerDay.","items":{"type":"object","required":["id","name","seats","bags","included","onRequest","supplementPerDay","rideBase","ridePerKm"],"properties":{"id":{"type":"string","enum":["polestar","eclass","vclass"]},"name":{"type":"string"},"seats":{"type":"integer","description":"Guests the car takes"},"bags":{"type":"object","required":["large","cabin"],"properties":{"large":{"type":"integer","description":"Large suitcases it takes with every seat taken"},"cabin":{"type":"integer","description":"Cabin bags it takes with every seat taken"}}},"included":{"type":"boolean","description":"In every price, no supplement"},"onRequest":{"type":"boolean","description":"Confirmed with the booking, once its availability is checked"},"supplementPerDay":{"type":"number","description":"Euros per day of service, 0 for the car that is included: the most a day costs"},"rideBase":{"type":["number","null"],"description":"On a day of rides only: euros for each way a ride drives the guests (null: the day costs supplementPerDay)"},"ridePerKm":{"type":["number","null"],"description":"On a day of rides only: euros per km of each way"}}}},"taxesIncluded":{"type":"boolean"},"tollsAndParkingIncluded":{"type":"boolean"},"tastingsIncluded":{"type":"boolean"},"tastingsNote":{"type":"string"},"payment":{"type":"string","enum":["in full when the driver confirms"],"description":"When the price is paid: in full, once the driver confirms; nothing with the request"},"wineDays":{"type":"array","items":{"type":"object","required":["option","name","hours","price","extraHour","url"],"properties":{"option":{"type":"string","enum":["half","full","long"]},"name":{"type":"string"},"hours":{"type":"integer"},"price":{"type":"number"},"extraHour":{"type":"number"},"url":{"type":"string","format":"uri"}}}},"wineDayByDistance":{"type":"array","description":"Which wine day a place needs by its distance from Beaune as the crow flies, nearest first: up to upToKm (null: beyond the step before), the day and its extra hours, their hours and price, and wine villages of that step. The half day also keeps to one côte and three villages; four stops or more make at least the full day, seven the long day.","items":{"type":"object","required":["upToKm","option","extraHours","hours","price","name","examples"],"properties":{"upToKm":{"type":["number","null"]},"option":{"type":"string","enum":["half","full","long"]},"extraHours":{"type":"integer","minimum":0},"hours":{"type":"integer"},"price":{"type":"number"},"name":{"type":"string"},"examples":{"type":"array","items":{"type":"string"}}}}},"driverByTheHour":{"type":"object","required":["price","minHours","maxHours","url"],"properties":{"price":{"type":"number"},"minHours":{"type":"integer"},"maxHours":{"type":"integer"},"url":{"type":"string","format":"uri"}}},"tripsFromBeaune":{"type":"object","required":["from","url"],"properties":{"from":{"type":"number","description":"The cheapest one-way trip from Beaune to a place of the site"},"url":{"type":"string","format":"uri"},"returnWaitHours":{"type":"number","description":"Back the same day with the driver waiting for you: at most this many hours, for returnFactor one-way prices"},"returnFactor":{"type":"number"},"laterRides":{"type":"integer","description":"Back later the same day, the driver coming back for you: this many one-way rides (returnLater in quote)"}}},"transfers":{"type":"array","items":{"type":"object","required":["route","name","oneWay","returnTrip","url"],"properties":{"route":{"type":"string","enum":["lyon","paris","dijon","geneva","creusot","lfsd","lfgj"]},"name":{"type":"string"},"oneWay":{"type":"number"},"returnTrip":{"type":"number"},"floor":{"type":"boolean","description":"true: a ride between this point and any place, either way, never costs less than oneWay, since the car comes from Beaune (Paris to Chablis costs Paris to Beaune); the place's own fare when it is more"},"url":{"type":"string","format":"uri"}}}},"pricesPage":{"type":"string","format":"uri"}}},"Place":{"type":"object","description":"A place of the site, with the drive and the price by private driver from Beaune, and from Paris and Lyon airport.","required":["id","kind","name","commune","area","lat","lon","driveFromBeaune","priceFromBeaune","fromParis","fromLyon","url","bookUrl"],"properties":{"id":{"type":"string","description":"kind:id, e.g. village:meursault: what get_page, quote and plan_wine_day take"},"kind":{"type":"string","enum":["village","chateau","sight","restaurant"]},"name":{"type":"string"},"summary":{"type":"string","description":"Left out of compact answers"},"commune":{"type":"string","description":"The commune it is in (a village is its own)"},"area":{"type":"string","enum":["beaune","cote","dijon","south","north","beyond"]},"lat":{"type":"number"},"lon":{"type":"number"},"restaurant":{"type":"object","description":"A starred restaurant's facts; its opening days are not in the data","required":["stars","menuFrom","cuisine"],"properties":{"stars":{"type":"integer","minimum":1,"maximum":3,"description":"MICHELIN stars"},"menuFrom":{"type":["number","null"],"description":"The cheapest menu, euros per person"},"cuisine":{"type":["string","null"]}}},"distanceKm":{"type":"number","description":"search_places with near: km from that place, as the crow flies"},"driveFromBeaune":{"type":"object","required":["km","minutes"],"properties":{"km":{"type":"number"},"minutes":{"type":"number"}}},"priceFromBeaune":{"type":["object","null"],"description":"Per vehicle with the driver from Beaune, in euros; null for places in Beaune itself. return: back the same day, the driver waiting for you (see get_prices tripsFromBeaune.returnWaitHours); returnLater: back later the same day, two one-way rides.","required":["oneWay","return","currency","perVehicle"],"properties":{"oneWay":{"type":"number"},"return":{"type":"number"},"returnLater":{"type":"number"},"currency":{"type":"string","enum":["EUR"]},"perVehicle":{"type":"boolean"}}},"fromParis":{"type":["object","null"],"description":"By private driver between Paris (Charles de Gaulle, Orly or the city) and the place, either way: km and minutes from central Paris (allow 30 minutes more from Charles de Gaulle), oneWay the fare per vehicle in euros (the same back, e.g. for a flight; never less than the transfer Paris (Charles de Gaulle, Orly or the city) ⇄ Beaune, since the car comes from Beaune). quote with service transfer, from and to (direction from for the way back) gives the booking link.","required":["km","minutes","oneWay"],"properties":{"km":{"type":"number"},"minutes":{"type":"number"},"oneWay":{"type":"number"}}},"fromLyon":{"type":["object","null"],"description":"By private driver between Lyon airport or Part-Dieu and the place, either way: km and minutes from Lyon Saint-Exupéry airport, oneWay the fare per vehicle in euros (the same back, e.g. for a flight; never less than the transfer Lyon airport or Part-Dieu ⇄ Beaune, since the car comes from Beaune). quote with service transfer, from and to (direction from for the way back) gives the booking link.","required":["km","minutes","oneWay"],"properties":{"km":{"type":"number"},"minutes":{"type":"number"},"oneWay":{"type":"number"}}},"wineDay":{"type":["object","null"],"description":"The wine day its page offers, with the extra hours its distance from Beaune needs on it (Gevrey-Chambertin: the half day and one more hour); null when its button books a driver.","required":["option","extraHours","hours","price"],"properties":{"option":{"type":"string","enum":["half","full","long"]},"extraHours":{"type":"integer","minimum":0},"hours":{"type":"integer"},"price":{"type":"number"}}},"url":{"type":"string","format":"uri"},"markdown":{"type":"string","format":"uri","description":"The page in Markdown (left out of compact answers)"},"service":{"type":"string","format":"uri","description":"The service page its booking button opens (left out of compact answers)"},"bookUrl":{"type":"string","format":"uri","description":"The booking page, already filled in"}}},"Places":{"type":"object","required":["description","updated","count","places"],"properties":{"description":{"type":"string"},"updated":{"type":"string","format":"date"},"count":{"type":"integer"},"places":{"type":"array","items":{"$ref":"#/components/schemas/Place"}}},"description":"Every village, château, thing to do and starred restaurant"},"PlaceLite":{"type":"object","required":["id","kind","name","page","area","driveMinutes","priceOneWay"],"properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["village","chateau","sight","restaurant"]},"name":{"type":"string"},"page":{"type":"string","format":"uri"},"area":{"type":"string","enum":["beaune","cote","dijon","south","north","beyond"]},"driveMinutes":{"type":"number","description":"Drive from Beaune"},"priceOneWay":{"type":["number","null"],"description":"Euros per vehicle from Beaune, one way; null in Beaune itself"}}},"PlacesLite":{"type":"object","required":["description","updated","count","places"],"properties":{"description":{"type":"string"},"updated":{"type":"string","format":"date"},"count":{"type":"integer"},"places":{"type":"array","items":{"$ref":"#/components/schemas/PlaceLite"}}},"description":"The same places in short"},"Event":{"type":"object","description":"A wine festival or event, at its next appearance.","required":["id","name","summary","start","end","datesConfirmed","where","placeId","category","free","website","url","bookDriver"],"properties":{"id":{"type":"string","description":"event:<id>: what quote takes as to"},"name":{"type":"string"},"summary":{"type":"string"},"start":{"type":"string","format":"date"},"end":{"type":"string","format":"date"},"datesConfirmed":{"type":"boolean","description":"false: the usual timing, the organiser has not announced the dates yet"},"where":{"type":"string"},"placeId":{"type":["string","null"],"description":"The place it is held at, else the village it is in or next to (kind:id)"},"category":{"type":"string"},"free":{"type":["boolean","null"]},"website":{"type":["string","null"],"description":"The event's own site"},"url":{"type":"string","format":"uri"},"bookDriver":{"type":"string","format":"uri","description":"The booking page for a driver that day (with the date once confirmed and still ahead)"},"driverQuote":{"type":"object","description":"find_events: the driver for the day asked (within the event's dates, once confirmed), priced like quote","required":["service","title","price","payment","deposit","bookUrl"],"properties":{"service":{"type":"string","enum":["wine-tour","driver","transfer"]},"title":{"type":"string"},"date":{"type":"string","format":"date"},"price":{"type":"number"},"payment":{"type":"string","enum":["in full when the driver confirms"],"description":"When the price is paid: in full, once the driver confirms; nothing with the request"},"deposit":{"type":"number","deprecated":true,"description":"Deprecated: equals the price, which is paid in full once the driver confirms (see payment)"},"bookUrl":{"type":"string","format":"uri"},"note":{"type":"string"}}}}},"Trip":{"type":"object","description":"One plan (arrival point and pace) of the driver's rides over several days, priced per vehicle as the sum of its services. Transport only: hotels, tastings, meals and tickets are booked and paid by the traveller.","required":["id","itinerary","variant","title","days","pace","theme","arrive","depart","route","price","currency","perVehicle","payment","deposit","services","plan","url","markdown","bookUrl"],"properties":{"id":{"type":"string","description":"itinerary--variant, e.g. first-trip--dijon-light"},"itinerary":{"type":"string"},"variant":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"days":{"type":"integer","minimum":1,"maximum":7},"pace":{"type":"string","enum":["light","full"],"description":"light: one or two outings a day and time of your own; full: with one or more wine days"},"theme":{"type":"string","enum":["first","nuits","whites","chablis","south","heritage","food","family","cycling","seasons","journeys"]},"themeName":{"type":"string"},"arrive":{"type":"string","description":"Where the first day starts: a starting point (beaune: Beaune station or the hotel, no transfer; an airport or airfield by its ICAO code in lower case, such as lfgf for Beaune-Challanges)"},"depart":{"type":"string","description":"Where the last day ends"},"route":{"type":"string"},"price":{"type":"number","description":"Euros per vehicle for 1 to 4 guests: the sum of the services below"},"currency":{"type":"string","enum":["EUR"]},"perVehicle":{"type":"boolean"},"payment":{"type":"string","enum":["in full when the driver confirms"],"description":"When the price is paid: in full, once the driver confirms; nothing with the request"},"deposit":{"type":"number","deprecated":true,"description":"Deprecated: equals the price, which is paid in full once the driver confirms (see payment)"},"startDate":{"type":"string","format":"date","description":"find_trips with startDate: the first day"},"endDate":{"type":"string","format":"date","description":"find_trips with startDate: the last day"},"services":{"type":"array","items":{"type":"object","required":["day","service","title","price"],"properties":{"day":{"type":"integer"},"date":{"type":"string","format":"date"},"service":{"type":"string"},"title":{"type":"string"},"price":{"type":"number"}}}},"plan":{"type":"array","items":{"type":"object","required":["day","title","legs"],"properties":{"day":{"type":"integer"},"title":{"type":"string"},"legs":{"type":"array","items":{"type":"object","required":["title","detail"],"properties":{"time":{"type":"string"},"until":{"type":"string"},"title":{"type":"string"},"url":{"type":"string","format":"uri","description":"The page of the place of a time of your own"},"detail":{"type":"string"},"note":{"type":"string"},"price":{"type":"number"},"places":{"type":"array","items":{"type":"object","required":["name","url"],"properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"}}}}}}}}}},"url":{"type":"string","format":"uri","description":"The trip's page, with this plan chosen"},"markdown":{"type":"string","format":"uri","description":"The page in Markdown, every plan in full"},"bookUrl":{"type":"string","format":"uri","description":"The booking page with every service of the plan already in it, from startDate when given (else the traveller picks the first day)"}}},"Trips":{"type":"object","required":["description","updated","count","trips"],"properties":{"description":{"type":"string"},"updated":{"type":"string","format":"date"},"count":{"type":"integer"},"trips":{"type":"array","items":{"$ref":"#/components/schemas/Trip"}}},"description":"Every plan of rides over several days, one to seven days (transport only)"},"Packages":{"type":"object","required":["description","updated","count","packages"],"properties":{"description":{"type":"string"},"updated":{"type":"string","format":"date"},"count":{"type":"integer"},"packages":{"type":"array","items":{"$ref":"#/components/schemas/Trip"}}},"description":"The former address of the trips file: the same plans, under packages"},"Events":{"type":"object","required":["from","to","count","events"],"properties":{"description":{"type":"string"},"updated":{"type":"string","format":"date"},"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"count":{"type":"integer","minimum":0},"events":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}},"BookingRequest":{"type":"object","required":["items","contact","terms","ticket"],"properties":{"car":{"type":"string","enum":["polestar","eclass","vclass"],"description":"The car of the whole booking: polestar (the Polestar 2, the default, included in every price, up to 4 guests), eclass (Mercedes E-Class, 4 guests) or vclass (Mercedes V-Class, up to 7 guests), the two Mercedes on request for a supplement per day of service (get_prices cars), charged once for each distinct day of the booking and confirmed once their availability is checked."},"items":{"type":"array","minItems":1,"maxItems":6,"items":{"type":"object","required":["kind","date","time"],"properties":{"kind":{"type":"string","enum":["wine-tour","driver","transfer"]},"date":{"type":"string","format":"date"},"time":{"type":"string","pattern":"^\\d\\d:\\d\\d$"},"guests":{"type":"integer","minimum":1,"maximum":7,"description":"At most the seats of the booking's car (422 on field bk-car otherwise)"},"pickup":{"type":"string","maxLength":300},"notes":{"type":"string","maxLength":1000},"option":{"type":"string","enum":["half","full","long"],"description":"wine-tour"},"extraHours":{"type":"integer","minimum":0,"maximum":3,"description":"wine-tour"},"stops":{"type":"array","maxItems":12,"items":{"type":"object","required":["kind","id"],"properties":{"kind":{"type":"string","enum":["village","chateau","sight","restaurant"]},"id":{"type":"string"}}},"description":"wine-tour, driver by the hour"},"hours":{"type":"integer","minimum":3,"maximum":12,"description":"driver (by the hour)"},"from":{"type":"object","description":"transfer (a ride): where it starts. One end of a ride: { origin } a starting point, { place } a place of the site, or { address } a typed address (its fare on request)","properties":{"origin":{"type":"string","enum":["beaune","dijon","lyon","paris","geneva","creusot","lfsd","lfgj","lfgf","lfgz","lflh","lfgi","lfep","macon","chalon","reims","epernay","troyes","colmar","strasbourg","besancon","arbois","annecy","chamonix","avignon"]},"place":{"type":"object","required":["kind","id"],"properties":{"kind":{"type":"string","enum":["village","chateau","sight","restaurant"]},"id":{"type":"string"}}},"address":{"type":"string","maxLength":200}}},"to":{"type":"object","description":"transfer (a ride): where it ends","properties":{"origin":{"type":"string","enum":["beaune","dijon","lyon","paris","geneva","creusot","lfsd","lfgj","lfgf","lfgz","lflh","lfgi","lfep","macon","chalon","reims","epernay","troyes","colmar","strasbourg","besancon","arbois","annecy","chamonix","avignon"]},"place":{"type":"object","required":["kind","id"],"properties":{"kind":{"type":"string","enum":["village","chateau","sight","restaurant"]},"id":{"type":"string"}}},"address":{"type":"string","maxLength":200}}},"stop":{"type":"object","description":"transfer: a stop on the way, its hours at the hourly price plus its detour","required":["place","hours"],"properties":{"place":{"type":"object","required":["kind","id"],"properties":{"kind":{"type":"string","enum":["village","chateau","sight","restaurant"]},"id":{"type":"string"}}},"hours":{"type":"integer","minimum":1,"maximum":3}}},"back":{"type":"string","enum":["none","wait","later","day"],"description":"transfer: the way back: none; wait (the same day, the driver waiting up to 3 h) or later (the same day, two rides), never from or to paris; day (another day: returnDate, returnTime)"},"dropoff":{"type":"string","maxLength":300,"description":"transfer: where the car leaves the guests (a hotel)"},"flight":{"type":"string","maxLength":20},"luggage":{"type":"integer","minimum":0,"maximum":6},"returnDate":{"type":"string","format":"date"},"returnTime":{"type":"string","pattern":"^\\d\\d:\\d\\d$"},"returnFlight":{"type":"string","maxLength":20}}}},"contact":{"type":"object","required":["name","email","phone"],"properties":{"name":{"type":"string","maxLength":120},"email":{"type":"string","format":"email","maxLength":160},"phone":{"type":"string","maxLength":40},"notes":{"type":"string","maxLength":1500},"source":{"type":"string","enum":["google","ai","tripadvisor","marketplace","hotel","friend","social","other"],"description":"How did you find us?"}}},"terms":{"type":"boolean","description":"true once the traveller has accepted the terms of sale"},"lang":{"type":"string","enum":["en","fr","de","zh"]},"ticket":{"type":"string","description":"From GET /api/booking/config, at least 3 seconds old"},"captcha":{"type":"string","description":"A Turnstile token, when /api/booking/config names a site key"},"agent":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,39}$","description":"Who made the link the booking page was opened from (its via=), for the driver; any other value is dropped"}}},"BookingResult":{"type":"object","required":["ref","at","total","payment","deposit","balance","paymentUrl","delivered"],"properties":{"ref":{"type":"string","description":"The booking reference"},"at":{"type":"string","format":"date-time"},"total":{"type":"number","description":"The price of every service and the car's supplement"},"payment":{"type":"string","enum":["in full when the driver confirms"],"description":"When the price is paid: in full, once the driver confirms; nothing with the request"},"deposit":{"type":"number","deprecated":true,"description":"Deprecated: equals the price, which is paid in full once the driver confirms (see payment)"},"balance":{"type":"number","deprecated":true,"description":"Deprecated: always 0, the full price being paid once the driver confirms (see payment)"},"paymentUrl":{"type":"null","description":"Always null: the page to pay the full price comes with the driver's confirmation (kept for older clients)"},"delivered":{"type":"array","items":{"type":"string"},"description":"Where the booking went: the driver's e-mail, the webhook, the customer's e-mail…"}}},"AgentError":{"type":"object","required":["field","code","message"],"properties":{"field":{"type":"string","description":"The argument to change: a tool argument, or for one service of several, items, its index from 0 and its argument"},"code":{"type":"string"},"allowed":{"type":["object","array"],"description":"A range { from, to } or a list of values","additionalProperties":{"type":"string"},"items":{"type":"string"}},"expected":{"type":"string"},"candidates":{"type":"array","items":{"type":"object","required":["id","kind","name"],"properties":{"id":{"type":"string"},"kind":{"type":"string"},"name":{"type":"string"}}}},"message":{"type":"string","description":"English, with the values"},"messageLocalized":{"type":"string","description":"The booking page's sentence in the language asked for"}}},"AgentRefusal":{"type":"object","required":["error","errors","message"],"properties":{"error":{"type":"string","description":"invalid, unknown_place, unknown_route, too_many, conflict, unavailable, not_delivered, cross_site, not_found…"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/AgentError"}},"message":{"type":"string"},"retryAfter":{"type":"integer","description":"Seconds before a refused request may be sent again (too_many)"},"resolved":{"type":"array","items":{"type":"object","required":["asked","id","kind","name","how"],"properties":{"asked":{"type":"string"},"id":{"type":"string","description":"kind:id of the place, or event:<id>"},"kind":{"type":"string"},"name":{"type":"string"},"how":{"type":"string","enum":["id","name","typo","partial","event"],"description":"typo or partial: matched loosely, check it is the one meant"},"place":{"type":"string","description":"An event: the place it is held at"}}}},"notFound":{"type":"array","items":{"type":"string"}}}},"Availability":{"type":"object","required":["date","state","days","nextFree","sources","checkedAt","rules","today","timezone","note","url","pricesUrl"],"properties":{"date":{"type":"string","format":"date"},"service":{"type":"string","enum":["wine-tour","driver","transfer"]},"time":{"type":"string"},"state":{"type":"string","enum":["free","pending","busy","unbookable","unknown"],"description":"free: nothing holds the day; pending: a request waits for the driver and may still be confirmed; busy: taken; unbookable: outside the booking page's rules; unknown: availability could not be read"},"days":{"type":"array","items":{"type":"object","required":["date","state","held"],"properties":{"date":{"type":"string","format":"date"},"state":{"type":"string","enum":["free","pending","busy","unbookable"]},"held":{"type":"array","items":{"type":"object","required":["from","to","state"],"properties":{"from":{"type":"string"},"to":{"type":"string"},"state":{"type":"string","enum":["pending","busy"]}}}}}}},"nextFree":{"type":"array","items":{"type":"string","format":"date"},"description":"Up to five free days from the day asked, within the booking window"},"sources":{"type":"array","items":{"type":"string","enum":["bookings","calendar"]}},"checkedAt":{"type":"string","format":"date-time"},"rules":{"type":"object","required":["accepted","earliest","latest","problems"],"properties":{"accepted":{"type":"boolean","description":"The booking page takes this day (and time)"},"earliest":{"type":"string","format":"date"},"latest":{"type":"string","format":"date"},"hours":{"type":"object","required":["from","to"],"properties":{"from":{"type":"string"},"to":{"type":"string"}}},"problems":{"type":"array","items":{"$ref":"#/components/schemas/AgentError"}}}},"today":{"type":"string","format":"date"},"timezone":{"type":"string"},"note":{"type":"string"},"url":{"type":"string","format":"uri","description":"The page to cite: the service's own when one is asked about, else the site"},"pricesUrl":{"type":"string","format":"uri","description":"The prices page, in the language asked for"},"bookUrl":{"type":"string","format":"uri"}}},"AgentBookingRequest":{"type":"object","description":"One service (its fields at the top level), several (items) or a plan of rides over several days from startDate, and the traveller's details.","required":["name","email","phone","accept_terms"],"properties":{"service":{"type":"string","enum":["wine-tour","driver","transfer"]},"option":{"type":"string","enum":["half","full","long"]},"route":{"type":"string","maxLength":120,"description":"A transfer route, by id or page slug (lyon (lyon-beaune), paris (paris-beaune), dijon (dijon-beaune), geneva (geneva-beaune), creusot (le-creusot-tgv-beaune), lfsd (dijon-airport-beaune), lfgj (dole-jura-airport-beaune)) or by name (\"Lyon airport\", \"Dijon-Bourgogne\", \"Dole\")"},"from":{"type":"string","enum":["beaune","dijon","lyon","paris","geneva","creusot","lfsd","lfgj","lfgf","lfgz","lflh","lfgi","lfep","macon","chalon","reims","epernay","troyes","colmar","strasbourg","besancon","arbois","annecy","chamonix","avignon"]},"to":{"type":"string","maxLength":200,"description":"A place id, path or name, or event:<id>; for a ride, a starting point too (an id or a name: \"Lyon airport\", \"CDG\")"},"hours":{"type":"integer","minimum":3,"maximum":12},"extraHours":{"type":"integer","minimum":0,"maximum":3},"returnTrip":{"type":"boolean"},"returnLater":{"type":"boolean"},"back":{"type":"string","enum":["none","wait","later","day"],"description":"A ride's way back, instead of returnTrip: none, wait, later (the same day; never from or to paris) or day"},"stop":{"type":"string","maxLength":120,"description":"A ride's stop on the way: a place id, path or name"},"stopHours":{"type":"integer","minimum":1,"maximum":3},"dropoff":{"type":"string","maxLength":300},"stops":{"type":"array","maxItems":12,"items":{"type":"string","maxLength":120}},"date":{"type":"string","format":"date"},"time":{"type":"string","pattern":"^\\d\\d:\\d\\d$"},"pickup":{"type":"string","maxLength":300},"flight":{"type":"string","maxLength":20},"direction":{"type":"string","enum":["to","from"],"description":"a ride: to Beaune or the place (to), the default, or from it to the station, airport or city (from)"},"returnDate":{"type":"string","format":"date"},"returnTime":{"type":"string","pattern":"^\\d\\d:\\d\\d$"},"returnFlight":{"type":"string","maxLength":20},"guests":{"type":"integer","minimum":1,"maximum":7},"luggage":{"type":"integer","minimum":0,"maximum":6},"notes":{"type":"string","maxLength":1500},"items":{"type":"array","minItems":1,"maxItems":6,"items":{"type":"object","required":["service","date","time"],"properties":{"service":{"type":"string","enum":["wine-tour","driver","transfer"]},"option":{"type":"string","enum":["half","full","long"]},"route":{"type":"string","maxLength":120,"description":"A transfer route, by id or page slug (lyon (lyon-beaune), paris (paris-beaune), dijon (dijon-beaune), geneva (geneva-beaune), creusot (le-creusot-tgv-beaune), lfsd (dijon-airport-beaune), lfgj (dole-jura-airport-beaune)) or by name (\"Lyon airport\", \"Dijon-Bourgogne\", \"Dole\")"},"from":{"type":"string","enum":["beaune","dijon","lyon","paris","geneva","creusot","lfsd","lfgj","lfgf","lfgz","lflh","lfgi","lfep","macon","chalon","reims","epernay","troyes","colmar","strasbourg","besancon","arbois","annecy","chamonix","avignon"]},"to":{"type":"string","maxLength":200,"description":"A place id, path or name, or event:<id>; for a ride, a starting point too (an id or a name: \"Lyon airport\", \"CDG\")"},"hours":{"type":"integer","minimum":3,"maximum":12},"extraHours":{"type":"integer","minimum":0,"maximum":3},"returnTrip":{"type":"boolean"},"returnLater":{"type":"boolean"},"back":{"type":"string","enum":["none","wait","later","day"],"description":"A ride's way back, instead of returnTrip: none, wait, later (the same day; never from or to paris) or day"},"stop":{"type":"string","maxLength":120,"description":"A ride's stop on the way: a place id, path or name"},"stopHours":{"type":"integer","minimum":1,"maximum":3},"dropoff":{"type":"string","maxLength":300},"stops":{"type":"array","maxItems":12,"items":{"type":"string","maxLength":120}},"date":{"type":"string","format":"date"},"time":{"type":"string","pattern":"^\\d\\d:\\d\\d$"},"pickup":{"type":"string","maxLength":300},"flight":{"type":"string","maxLength":20},"direction":{"type":"string","enum":["to","from"],"description":"a ride: to Beaune or the place (to), the default, or from it to the station, airport or city (from)"},"returnDate":{"type":"string","format":"date"},"returnTime":{"type":"string","pattern":"^\\d\\d:\\d\\d$"},"returnFlight":{"type":"string","maxLength":20},"guests":{"type":"integer","minimum":1,"maximum":7},"luggage":{"type":"integer","minimum":0,"maximum":6},"notes":{"type":"string","maxLength":1000}}}},"trip":{"type":"string","description":"A plan of find_trips (itinerary--variant), with startDate"},"package":{"type":"string","deprecated":true,"description":"The former name of trip, still read"},"plan":{"type":"string"},"startDate":{"type":"string","format":"date"},"car":{"type":"string","enum":["polestar","eclass","vclass"],"description":"The car of the whole booking: polestar (the Polestar 2, the default, included in every price, up to 4 guests), eclass (Mercedes E-Class, 4 guests) or vclass (Mercedes V-Class, up to 7 guests), the two Mercedes on request for a supplement per day of service (get_prices cars), charged once for each distinct day of the booking and confirmed once their availability is checked."},"name":{"type":"string","maxLength":120},"email":{"type":"string","format":"email","maxLength":160},"phone":{"type":"string","maxLength":40},"accept_terms":{"type":"boolean"},"dry_run":{"type":"boolean","description":"Check and price, send nothing (never counted)"},"requestId":{"type":"string","pattern":"^[\\w-]{8,64}$","description":"The same key within a day answers the same booking"},"lang":{"type":"string","enum":["en","fr","de","zh","ar"],"description":"ar: Arabic notes; the booking and its e-mails in English"}}},"AgentBookingResult":{"type":"object","required":["status","ref","total","payment","deposit","balance","car","services","resolved","notFound"],"properties":{"status":{"type":"string","enum":["requested","confirmed","declined","deposit_paid","cancelled","not_sent"],"description":"requested once sent: the driver confirms by e-mail; not_sent for dry_run; deposit_paid: confirmed and paid in full (the value keeps its name for older clients)"},"dryRun":{"type":"boolean"},"ref":{"type":["string","null"]},"total":{"type":"number"},"payment":{"type":"string","enum":["in full when the driver confirms"],"description":"When the price is paid: in full, once the driver confirms; nothing with the request"},"deposit":{"type":"number","deprecated":true,"description":"Deprecated: equals the price, which is paid in full once the driver confirms (see payment)"},"balance":{"type":"number","deprecated":true,"description":"Deprecated: always 0, the full price being paid once the driver confirms (see payment)"},"paymentUrl":{"type":["string","null"],"description":"The page to pay the full price once it can be paid (after the driver's confirmation)"},"customerEmailSent":{"type":"boolean","description":"The traveller was e-mailed the request"},"replayed":{"type":"boolean","description":"The same request was already sent: this is its booking"},"car":{"type":"object","required":["id","onRequest","perDay","days","prices","total"],"properties":{"id":{"type":"string","enum":["polestar","eclass","vclass"]},"onRequest":{"type":"boolean"},"perDay":{"type":"number","description":"The most a day costs"},"days":{"type":"array","items":{"type":"string","format":"date"}},"prices":{"type":"array","items":{"type":"number"},"description":"What the car adds on each of days, in their order"},"total":{"type":"number"}}},"services":{"type":"array","items":{"type":"object","required":["service","title","date","time","guests","price"],"properties":{"service":{"type":"string","enum":["wine-tour","driver","transfer"]},"title":{"type":"string"},"date":{"type":"string","format":"date"},"time":{"type":"string"},"pickup":{"type":"string"},"dropoff":{"type":"string","description":"A ride: where the car leaves the guests"},"guests":{"type":"integer"},"luggage":{"type":"integer"},"price":{"type":"number"}}}},"availability":{"type":"object","description":"free: nothing holds the day (or the services' times) yet; pending: a request waits for the driver and may still be confirmed; busy: taken. The driver confirms every booking.","required":["state"],"properties":{"state":{"type":"string","enum":["free","pending","busy"]},"nextFree":{"type":"array","items":{"type":"string","format":"date"}},"conflicts":{"type":"array","description":"With each service's day and time: the windows of the services that a request or a booking holds","items":{"type":"object","required":["item","date","from","to","state"],"properties":{"item":{"type":"integer","description":"The service, from 0"},"date":{"type":"string","format":"date"},"from":{"type":"string"},"to":{"type":"string"},"state":{"type":"string","enum":["pending","busy"]}}}}}},"contact":{"type":"object","required":["name","email","phone"],"properties":{"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"notes":{"type":"string"}}},"termsAccepted":{"type":"boolean"},"missing":{"type":"array","items":{"type":"string"}},"statusUrl":{"type":"string","format":"uri","description":"GET with email=<the traveller's e-mail> added"},"statusNeeds":{"type":"string"},"replyBy":{"type":["string","null"],"description":"The reply time the site publishes; null until written"},"next":{"type":"string","description":"What happens next, as far as the server can vouch for it"},"note":{"type":"string"},"resolved":{"type":"array","items":{"type":"object","required":["asked","id","kind","name","how"],"properties":{"asked":{"type":"string"},"id":{"type":"string","description":"kind:id of the place, or event:<id>"},"kind":{"type":"string"},"name":{"type":"string"},"how":{"type":"string","enum":["id","name","typo","partial","event"],"description":"typo or partial: matched loosely, check it is the one meant"},"place":{"type":"string","description":"An event: the place it is held at"}}}},"notFound":{"type":"array","items":{"type":"string"}}}},"BookingStatus":{"type":"object","required":["ref","status","dates","total","payment","deposit","balance","car","paymentUrl","requestedAt","updatedAt","note"],"properties":{"ref":{"type":"string"},"status":{"type":"string","enum":["requested","confirmed","declined","deposit_paid","cancelled"],"description":"deposit_paid: confirmed and paid in full (the value keeps its name for older clients)"},"dates":{"type":"array","items":{"type":"string","format":"date"}},"total":{"type":"number"},"payment":{"type":"string","enum":["in full when the driver confirms"],"description":"When the price is paid: in full, once the driver confirms; nothing with the request"},"deposit":{"type":"number","deprecated":true,"description":"Deprecated: equals the price, which is paid in full once the driver confirms (see payment)"},"balance":{"type":"number","deprecated":true,"description":"Deprecated: always 0, the full price being paid once the driver confirms (see payment)"},"car":{"type":"string","enum":["polestar","eclass","vclass"]},"paymentUrl":{"type":["string","null"],"description":"The page to pay the full price, once the driver has confirmed and while it is unpaid"},"requestedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"note":{"type":["string","null"],"description":"The driver's note with a decision, e.g. another free day"},"meaning":{"type":"string","description":"What the status means for the traveller"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}},"BookingError":{"type":"object","properties":{"statusCode":{"type":"integer"},"statusMessage":{"type":"string","description":"The error code, as in data.code"},"data":{"type":"object","properties":{"code":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}}