{"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, one deposit, one link. Names are matched loosely (resolved); an unknown one is a 400 with candidates. alternatives: cheaper products that do the same job.","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","enum":["lyon","paris","dijon","geneva","creusot","lfsd","lfgj"]},"description":"Transfer to or from Beaune: Lyon airport or Part-Dieu, Paris, Dijon station, Geneva airport, Le Creusot TGV station, Dijon-Bourgogne airport (lfsd), Dole-Jura airport (lfgj)"},{"name":"from","in":"query","schema":{"type":"string","enum":["beaune","dijon","lyon","paris","geneva","creusot","lfsd","lfgj","lfgf","lfgz","lflh","lfgi","lfep"]},"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":"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":"Driver trip: back the same day, the driver waiting for you (at most the hours of get_prices tripsFromBeaune.returnWaitHours). Transfer: the return journey"},{"name":"returnLater","in":"query","schema":{"type":"boolean"},"description":"Driver trip with returnTrip: back later the same day, the driver coming back for you (two one-way rides)"},{"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, the deposit 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. The same answer as the MCP tool check_availability, kept a minute in caches.","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 package plan of /data/packages.json (package, 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 deposit (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, deposit, balance, 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, 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 amounts, and the deposit link 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 the deposit is paid by secure link.","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, deposit, balance and the deposit link (null until the driver confirms, by default)","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 the deposit rate","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","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/packages.json":{"get":{"operationId":"packages","summary":"Every plan of every multi-day trip, with its days, its price per vehicle and its booking link","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","deposit","tastingsIncluded","resolved","notFound","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"],"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"},"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"},"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":"supplementPerDay × days, 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"},"deposit":{"type":"number"},"balance":{"type":"number"},"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"},"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","depositRate","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 and the deposit.","items":{"type":"object","required":["id","name","seats","included","onRequest","supplementPerDay"],"properties":{"id":{"type":"string","enum":["polestar","eclass","vclass"]},"name":{"type":"string"},"seats":{"type":"integer","description":"Guests the car takes"},"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"}}}},"taxesIncluded":{"type":"boolean"},"tollsAndParkingIncluded":{"type":"boolean"},"tastingsIncluded":{"type":"boolean"},"tastingsNote":{"type":"string"},"depositRate":{"type":"number","description":"Share of the price paid as a deposit once the driver confirms"},"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"},"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.","required":["id","kind","name","commune","area","lat","lon","driveFromBeaune","priceFromBeaune","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"}}},"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","deposit","bookUrl"],"properties":{"service":{"type":"string","enum":["wine-tour","driver","transfer"]},"title":{"type":"string"},"date":{"type":"string","format":"date"},"price":{"type":"number"},"deposit":{"type":"number"},"bookUrl":{"type":"string","format":"uri"},"note":{"type":"string"}}}}},"Package":{"type":"object","description":"One plan (arrival point and pace) of a ready-made multi-day trip with the driver, priced per vehicle as the sum of its services. Hotels, tastings, meals and visits are the traveller's own.","required":["id","itinerary","variant","title","days","pace","theme","arrive","depart","route","price","currency","perVehicle","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"},"deposit":{"type":"number"},"startDate":{"type":"string","format":"date","description":"find_packages with startDate: the first day"},"endDate":{"type":"string","format":"date","description":"find_packages 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)"}}},"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/Package"}}},"description":"Every plan of every multi-day trip, one to seven days"},"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"},"mode":{"type":"string","enum":["hours","trip"],"description":"driver"},"hours":{"type":"integer","minimum":3,"maximum":12,"description":"driver by the hour"},"from":{"type":"string","enum":["beaune","dijon","lyon","paris","geneva","creusot","lfsd","lfgj","lfgf","lfgz","lflh","lfgi","lfep"],"description":"driver trip"},"to":{"type":"object","description":"driver trip","required":["kind","id"],"properties":{"kind":{"type":"string","enum":["village","chateau","sight","restaurant"]},"id":{"type":"string"}}},"returnTrip":{"type":"boolean","description":"driver trip, transfer"},"returnLater":{"type":"boolean","description":"driver trip with returnTrip: back later the same day (two one-way rides) rather than the driver waiting"},"route":{"type":"string","enum":["lyon","paris","dijon","geneva","creusot","lfsd","lfgj","custom"],"description":"transfer"},"custom":{"type":"object","description":"transfer to another place than Beaune","required":["from","to"],"properties":{"from":{"type":"string","enum":["dijon","lyon","paris","geneva","creusot","lfsd","lfgj","lfgf","lfgz","lflh","lfgi","lfep"]},"to":{"type":"object","required":["kind","id"],"properties":{"kind":{"type":"string","enum":["village","chateau","sight","restaurant"]},"id":{"type":"string"}}}}},"direction":{"type":"string","enum":["to","from"],"description":"transfer: to Beaune or from Beaune"},"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","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"},"deposit":{"type":"number"},"balance":{"type":"number","description":"Paid on the day"},"paymentUrl":{"type":["string","null"],"description":"The secure page to pay the deposit, when payments are set up and the deposit is asked with the request; null by default: it comes with the driver's confirmation"},"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, 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"],"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"},"bookUrl":{"type":"string","format":"uri"}}},"AgentBookingRequest":{"type":"object","description":"One service (its fields at the top level), several (items) or a package plan 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","enum":["lyon","paris","dijon","geneva","creusot","lfsd","lfgj"]},"from":{"type":"string","enum":["beaune","dijon","lyon","paris","geneva","creusot","lfsd","lfgj","lfgf","lfgz","lflh","lfgi","lfep"]},"to":{"type":"string","maxLength":200,"description":"A place id, path or name, or event:<id>"},"hours":{"type":"integer","minimum":3,"maximum":12},"extraHours":{"type":"integer","minimum":0,"maximum":3},"returnTrip":{"type":"boolean"},"returnLater":{"type":"boolean"},"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"]},"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","enum":["lyon","paris","dijon","geneva","creusot","lfsd","lfgj"]},"from":{"type":"string","enum":["beaune","dijon","lyon","paris","geneva","creusot","lfsd","lfgj","lfgf","lfgz","lflh","lfgi","lfep"]},"to":{"type":"string","maxLength":200,"description":"A place id, path or name, or event:<id>"},"hours":{"type":"integer","minimum":3,"maximum":12},"extraHours":{"type":"integer","minimum":0,"maximum":3},"returnTrip":{"type":"boolean"},"returnLater":{"type":"boolean"},"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"]},"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}}}},"package":{"type":"string","description":"A plan of find_packages (itinerary--variant), with startDate"},"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","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"},"dryRun":{"type":"boolean"},"ref":{"type":["string","null"]},"total":{"type":"number"},"deposit":{"type":"number"},"balance":{"type":"number","description":"Paid on the day"},"paymentUrl":{"type":["string","null"],"description":"The deposit page 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","total"],"properties":{"id":{"type":"string","enum":["polestar","eclass","vclass"]},"onRequest":{"type":"boolean"},"perDay":{"type":"number"},"days":{"type":"array","items":{"type":"string","format":"date"}},"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"},"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","deposit","balance","car","paymentUrl","requestedAt","updatedAt","note"],"properties":{"ref":{"type":"string"},"status":{"type":"string","enum":["requested","confirmed","declined","deposit_paid","cancelled"]},"dates":{"type":"array","items":{"type":"string","format":"date"}},"total":{"type":"number"},"deposit":{"type":"number"},"balance":{"type":"number"},"car":{"type":"string","enum":["polestar","eclass","vclass"]},"paymentUrl":{"type":["string","null"]},"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"}}}}}}}}}