{"openapi":"3.1.0","info":{"title":"Autos 113 API (fictitious used-car dealer)","description":"Proof of concept: a fictitious used-car dealer that AI agents can operate. Every action of the catalogue is `POST /api/actions/<name>` with a JSON body; errors come back as `{ok: false, code, error, hint}` where `hint` tells how to fix the call. Payments are simulated (test card 4242 4242 4242 4242). Optional header `X-Agent-Name` identifies your assistant in the shop's logs. The same actions are available over MCP at https://113rc.duckdns.org/mcp.","version":"0.1.0"},"servers":[{"url":"https://113rc.duckdns.org"}],"paths":{"/api/actions/search_vehicles":{"post":{"tags":["read"],"summary":"Search the used cars","description":"Search the stock of used cars for sale (about 60 cars in Lyon, Ivry-sur-Seine/Paris and Bordeaux). Filter by text, make, fuel, body, gearbox, price, year, mileage, seats and city. Returns summaries with id, price, url and image; use get_vehicle for the full sheet.","operationId":"search_vehicles","requestBody":{"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Query","description":"Free text matched on make, model and version, e.g. 'golf', 'tesla model 3', 'gt line'."},"make":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Make","description":"Make, e.g. Peugeot, Renault, Toyota."},"fuel":{"anyOf":[{"items":{"type":"string","enum":["petrol","diesel","hybrid","plugin_hybrid","electric","lpg"]},"type":"array"},{"type":"null"}],"title":"Fuel","description":"One or more energies."},"body":{"anyOf":[{"items":{"type":"string","enum":["city_car","hatchback","sedan","estate","suv","minivan","coupe","van"]},"type":"array"},{"type":"null"}],"title":"Body","description":"One or more body types."},"gearbox":{"anyOf":[{"type":"string","enum":["manual","automatic"]},{"type":"null"}],"title":"Gearbox"},"price_min":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Price Min","description":"Minimum price in euros."},"price_max":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Price Max","description":"Maximum price in euros."},"year_min":{"anyOf":[{"type":"integer","maximum":2030.0,"minimum":1990.0},{"type":"null"}],"title":"Year Min"},"mileage_max":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Mileage Max","description":"Maximum mileage in km."},"seats_min":{"anyOf":[{"type":"integer","maximum":9.0,"minimum":2.0},{"type":"null"}],"title":"Seats Min"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","description":"Agency city: Lyon, Ivry-sur-Seine (Paris) or Bordeaux."},"sort":{"type":"string","enum":["price_asc","price_desc","mileage_asc","year_desc"],"title":"Sort","default":"price_asc"},"limit":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Limit","default":10},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0},"include_unavailable":{"type":"boolean","title":"Include Unavailable","description":"Also list reserved and sold cars.","default":false}},"type":"object","title":"SearchVehiclesIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/get_vehicle":{"post":{"tags":["read"],"summary":"Get a car's full sheet","description":"Full sheet of one car: specs, options, history, price, agency, deposit amount, a financing example and the actions available next.","operationId":"get_vehicle","requestBody":{"content":{"application/json":{"schema":{"properties":{"vehicle_id":{"type":"string","title":"Vehicle Id","description":"Vehicle id, e.g. VO-1001."}},"type":"object","required":["vehicle_id"],"title":"VehicleIdIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/compare_vehicles":{"post":{"tags":["read"],"summary":"Compare cars","description":"Side-by-side comparison of 2 to 4 cars (price, year, mileage, power, CO2...).","operationId":"compare_vehicles","requestBody":{"content":{"application/json":{"schema":{"properties":{"vehicle_ids":{"items":{"type":"string"},"type":"array","maxItems":4,"minItems":2,"title":"Vehicle Ids","description":"2 to 4 vehicle ids."}},"type":"object","required":["vehicle_ids"],"title":"CompareIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/simulate_financing":{"post":{"tags":["read"],"summary":"Simulate a car loan","description":"Monthly payment for a car loan on a vehicle or a price (fictitious rates).","operationId":"simulate_financing","requestBody":{"content":{"application/json":{"schema":{"properties":{"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"Vehicle id; or give `price_eur`."},"price_eur":{"anyOf":[{"type":"integer","maximum":200000.0,"minimum":1000.0},{"type":"null"}],"title":"Price Eur"},"down_payment_eur":{"type":"integer","minimum":0.0,"title":"Down Payment Eur","default":0},"months":{"type":"integer","maximum":84.0,"minimum":12.0,"title":"Months","description":"Duration in months (12-84).","default":48}},"type":"object","title":"FinancingIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/list_agencies":{"post":{"tags":["read"],"summary":"List the agencies","description":"The 3 agencies with address, phone, opening hours and available stock.","operationId":"list_agencies","requestBody":{"content":{"application/json":{"schema":{"properties":{},"type":"object","title":"EmptyIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/get_available_slots":{"post":{"tags":["read"],"summary":"Get free appointment slots","description":"Free one-hour slots for a test drive (give vehicle_id), an advisor visit or a trade-in estimate (give agency_id). Call before book_appointment.","operationId":"get_available_slots","requestBody":{"content":{"application/json":{"schema":{"properties":{"type":{"type":"string","enum":["test_drive","visit","trade_in"],"title":"Type","description":"test_drive (needs vehicle_id), visit (advisor meeting) or trade_in (trade-in estimate).","default":"test_drive"},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"For a test drive: the car; its agency is used."},"agency_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Id","description":"AG-LYO, AG-PAR or AG-BOR. Needed when no vehicle_id is given."},"date_from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date From","description":"First day (YYYY-MM-DD). Default: today."},"days":{"type":"integer","maximum":21.0,"minimum":1.0,"title":"Days","default":7},"limit":{"type":"integer","maximum":60.0,"minimum":1.0,"title":"Limit","default":24}},"type":"object","title":"SlotsIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/reserve_vehicle":{"post":{"tags":["write"],"summary":"Reserve a car","description":"Hold an available car for 48 h for a customer. Creates a reservation pending a deposit; then call create_payment. Needs the customer's name and email or phone (or a customer_ref). Confirm with the user before calling.","operationId":"reserve_vehicle","requestBody":{"content":{"application/json":{"schema":{"properties":{"vehicle_id":{"type":"string","title":"Vehicle Id","description":"Vehicle id, e.g. VO-1001."},"customer":{"anyOf":[{"$ref":"#/components/schemas/CustomerIn"},{"type":"null"}],"description":"New customer: name + email or phone."},"customer_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Ref","description":"Customer reference returned by a previous action (e.g. CUS-7F3K). Give it instead of `customer` for a returning customer."},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"}},"type":"object","required":["vehicle_id"],"title":"ReserveIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/create_payment":{"post":{"tags":["write"],"summary":"Pay the reservation deposit","description":"Pay the deposit of a pending reservation, simulated payment (no real money). method 'card' charges the card given by the user; method 'payment_link' returns a URL where the user pays on the website. Some cards need a confirmation step (confirm_payment). Always get the user's explicit approval before paying.","operationId":"create_payment","requestBody":{"content":{"application/json":{"schema":{"properties":{"reservation_id":{"type":"string","title":"Reservation Id","description":"Reservation id from reserve_vehicle (RES-…)."},"customer_ref":{"type":"string","title":"Customer Ref","description":"The customer_ref returned by reserve_vehicle."},"method":{"type":"string","enum":["card","payment_link"],"title":"Method","description":"'card': pay now with the card details below. 'payment_link': get a URL where the user pays the deposit themselves on the website.","default":"card"},"card_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Number","description":"Card number (test cards only, this shop is fictitious: 4242 4242 4242 4242 succeeds)."},"card_expiry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Expiry","description":"MM/YY"},"card_cvc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Cvc","description":"3 or 4 digits"},"cardholder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cardholder Name"}},"type":"object","required":["reservation_id","customer_ref"],"title":"PaymentIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/confirm_payment":{"post":{"tags":["write"],"summary":"Confirm a payment (3-D Secure)","description":"Finish a payment in status requires_action with the 6-digit code the cardholder sees on the confirmation page.","operationId":"confirm_payment","requestBody":{"content":{"application/json":{"schema":{"properties":{"payment_id":{"type":"string","title":"Payment Id","description":"Payment id (PAY-…) in status requires_action."},"code":{"type":"string","title":"Code","description":"6-digit code shown to the cardholder."}},"type":"object","required":["payment_id","code"],"title":"ConfirmPaymentIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/cancel_reservation":{"post":{"tags":["write"],"summary":"Cancel a reservation","description":"Cancel a reservation; a paid deposit is refunded and the car is released.","operationId":"cancel_reservation","requestBody":{"content":{"application/json":{"schema":{"properties":{"reservation_id":{"type":"string","title":"Reservation Id"},"customer_ref":{"type":"string","title":"Customer Ref","description":"Customer reference returned by a previous action (e.g. CUS-7F3K). Give it instead of `customer` for a returning customer."}},"type":"object","required":["reservation_id","customer_ref"],"title":"CancelReservationIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/request_callback":{"post":{"tags":["write"],"summary":"Ask to be called back","description":"Ask an advisor to call the customer back about a car, financing, a trade-in...","operationId":"request_callback","requestBody":{"content":{"application/json":{"schema":{"properties":{"phone":{"type":"string","maxLength":40,"title":"Phone","description":"Number to call back."},"preferred_window":{"type":"string","enum":["asap","morning","afternoon","evening"],"title":"Preferred Window","description":"asap, morning, afternoon or evening.","default":"asap"},"subject":{"type":"string","maxLength":500,"title":"Subject","description":"What the customer wants to talk about."},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id"},"customer":{"anyOf":[{"$ref":"#/components/schemas/CustomerIn"},{"type":"null"}],"description":"Name (and email if known)."},"customer_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Ref","description":"Customer reference returned by a previous action (e.g. CUS-7F3K). Give it instead of `customer` for a returning customer."}},"type":"object","required":["phone","subject"],"title":"CallbackIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/book_appointment":{"post":{"tags":["write"],"summary":"Book an appointment","description":"Book a test drive, an advisor visit or a trade-in estimate on a free slot from get_available_slots. On conflict the error lists alternatives.","operationId":"book_appointment","requestBody":{"content":{"application/json":{"schema":{"properties":{"type":{"type":"string","enum":["test_drive","visit","trade_in"],"title":"Type","description":"test_drive, visit or trade_in."},"start_at":{"type":"string","title":"Start At","description":"Slot start, local Paris time 'YYYY-MM-DDTHH:MM', from get_available_slots."},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"Required for test_drive."},"agency_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Id","description":"Required when no vehicle_id."},"customer":{"anyOf":[{"$ref":"#/components/schemas/CustomerIn"},{"type":"null"}]},"customer_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Ref","description":"Customer reference returned by a previous action (e.g. CUS-7F3K). Give it instead of `customer` for a returning customer."},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note","description":"E.g. the car to trade in (make, model, year, km)."}},"type":"object","required":["type","start_at"],"title":"AppointmentIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/cancel_appointment":{"post":{"tags":["write"],"summary":"Cancel an appointment","description":"Cancel a booked appointment.","operationId":"cancel_appointment","requestBody":{"content":{"application/json":{"schema":{"properties":{"appointment_id":{"type":"string","title":"Appointment Id"},"customer_ref":{"type":"string","title":"Customer Ref","description":"Customer reference returned by a previous action (e.g. CUS-7F3K). Give it instead of `customer` for a returning customer."}},"type":"object","required":["appointment_id","customer_ref"],"title":"CancelAppointmentIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/send_message":{"post":{"tags":["write"],"summary":"Send a message to the seller","description":"Write to the dealership about a car (or reply in an existing thread). The seller answers in the thread; read it with get_messages.","operationId":"send_message","requestBody":{"content":{"application/json":{"schema":{"properties":{"body":{"type":"string","maxLength":2000,"minLength":2,"title":"Body","description":"The message text."},"subject":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Subject"},"vehicle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Id","description":"The car the message is about."},"thread_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thread Id","description":"Reply in an existing thread (MSG-…); needs customer_ref."},"customer":{"anyOf":[{"$ref":"#/components/schemas/CustomerIn"},{"type":"null"}]},"customer_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Ref","description":"Customer reference returned by a previous action (e.g. CUS-7F3K). Give it instead of `customer` for a returning customer."}},"type":"object","required":["body"],"title":"MessageIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/get_messages":{"post":{"tags":["read"],"summary":"Read a message thread","description":"Read the messages of a thread (customer and seller).","operationId":"get_messages","requestBody":{"content":{"application/json":{"schema":{"properties":{"thread_id":{"type":"string","title":"Thread Id"},"customer_ref":{"type":"string","title":"Customer Ref","description":"Customer reference returned by a previous action (e.g. CUS-7F3K). Give it instead of `customer` for a returning customer."}},"type":"object","required":["thread_id","customer_ref"],"title":"GetMessagesIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/actions/get_customer_context":{"post":{"tags":["read"],"summary":"Get the customer's history (memory)","description":"Everything the shop remembers about a customer: reservations and payment status, appointments, callbacks, message threads, recently viewed cars and recent activity. Call it first when the user says they already dealt with the shop.","operationId":"get_customer_context","requestBody":{"content":{"application/json":{"schema":{"properties":{"customer_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Ref","description":"Customer reference returned by a previous action (e.g. CUS-7F3K). Give it instead of `customer` for a returning customer."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"With `phone`, to find a customer without ref."},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"}},"type":"object","title":"ContextIn"}}},"required":true},"responses":{"200":{"description":"`{ok: true, ...result}`","content":{"application/json":{"schema":{}}}},"4XX":{"description":"Error with a hint for the caller","content":{"application/json":{"schema":{"properties":{"ok":{"const":false},"code":{"type":"string"},"error":{"type":"string"},"hint":{"type":"string"},"details":{"type":"object"}},"type":"object"}}}}}}},"/api/vehicles":{"get":{"tags":["read"],"summary":"Search the used cars (GET form of search_vehicles)","operationId":"list_vehicles","parameters":[{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"}},{"name":"make","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Make"}},{"name":"fuel","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Fuel"}},{"name":"body","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Body"}},{"name":"gearbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gearbox"}},{"name":"price_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Min"}},{"name":"price_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Max"}},{"name":"year_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Min"}},{"name":"mileage_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mileage Max"}},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"price_asc","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vehicles/{vehicle_id}":{"get":{"tags":["read"],"summary":"Full sheet of a car (GET form of get_vehicle)","operationId":"read_vehicle","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agencies":{"get":{"tags":["read"],"summary":"The agencies (GET form of list_agencies)","operationId":"read_agencies","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"CustomerIn":{"properties":{"name":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Full name of the customer.","title":"Name"},"email":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Email address.","title":"Email"},"phone":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Phone number, e.g. 06 12 34 56 78.","title":"Phone"}},"title":"CustomerIn","type":"object"}}}}