{"openapi":"3.1.0","info":{"title":"iQuota — API de venta","description":"API de iQuota para vender el inventario de contratación directa (hoteles, apartamentos, villas y otros).\n\nAutenticación: cabecera `X-API-Key` con la clave del cliente (se crea en la extranet → Clientes API).\n\nFlujo: `properties` → `availability` → `quote` → `bookings` → `cancel`.","version":"1.0.0"},"paths":{"/api/v1/status":{"get":{"tags":["API de venta"],"summary":"Comprobar que la API responde y la clave es válida","operationId":"status_api_v1_status_get","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/properties":{"get":{"tags":["API de venta"],"summary":"Catálogo de alojamientos (contenido estático)","operationId":"list_properties_api_v1_properties_get","parameters":[{"name":"updated_since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Solo los modificados desde esta fecha","title":"Updated Since"},"description":"Solo los modificados desde esta fecha"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Page Size"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/properties/{code}":{"get":{"tags":["API de venta"],"summary":"Ficha completa de un alojamiento","operationId":"get_property_api_v1_properties__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/availability":{"post":{"tags":["API de venta"],"summary":"Buscar disponibilidad y precios","operationId":"availability_api_v1_availability_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quote":{"post":{"tags":["API de venta"],"summary":"Recotizar una opción antes de reservar","operationId":"requote_api_v1_quote_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bookings":{"post":{"tags":["API de venta"],"summary":"Confirmar una reserva","operationId":"book_api_v1_bookings_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["API de venta"],"summary":"Listar reservas (por referencia o fechas de creación)","operationId":"list_bookings_api_v1_bookings_get","parameters":[{"name":"client_reference","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Reference"}},{"name":"created_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Created From"}},{"name":"created_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Created To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bookings/{locator}":{"get":{"tags":["API de venta"],"summary":"Consultar una reserva","operationId":"get_booking_api_v1_bookings__locator__get","parameters":[{"name":"locator","in":"path","required":true,"schema":{"type":"string","title":"Locator"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bookings/{locator}/cancel":{"post":{"tags":["API de venta"],"summary":"Cancelar una reserva (simulate=true para ver gastos)","operationId":"cancel_api_v1_bookings__locator__cancel_post","parameters":[{"name":"locator","in":"path","required":true,"schema":{"type":"string","title":"Locator"}},{"name":"simulate","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Simulate"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AvailabilityIn":{"properties":{"destination":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination","description":"Ciudad, zona, provincia, nombre o código de país"},"property_codes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Property Codes","description":"Códigos de alojamiento concretos"},"checkin":{"type":"string","format":"date","title":"Checkin"},"checkout":{"type":"string","format":"date","title":"Checkout"},"occupancy":{"$ref":"#/components/schemas/OccupancyIn"},"board":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Board","description":"Filtrar por régimen: SA, AD, MP, PC, TI"},"refundable_only":{"type":"boolean","title":"Refundable Only","default":false},"max_total":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Total","description":"Precio total máximo (en la moneda de la respuesta)"},"currency":{"anyOf":[{"type":"string","maxLength":3,"minLength":3},{"type":"null"}],"title":"Currency","description":"Moneda en que quieres los precios (EUR, USD…). Si el alojamiento no vende en ella, se responde en su moneda por defecto."}},"type":"object","required":["checkin","checkout"],"title":"AvailabilityIn"},"BookingIn":{"properties":{"rate_key":{"type":"string","title":"Rate Key"},"holder":{"$ref":"#/components/schemas/HolderIn"},"guests":{"items":{"$ref":"#/components/schemas/GuestIn"},"type":"array","title":"Guests"},"remarks":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Remarks","description":"Peticiones especiales (no garantizadas)"},"client_reference":{"type":"string","maxLength":100,"minLength":1,"title":"Client Reference","description":"Tu referencia; si reintentas con la misma, no se duplica"}},"type":"object","required":["rate_key","holder","client_reference"],"title":"BookingIn"},"GuestIn":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"type":{"type":"string","pattern":"^(adulto|nino|bebe)$","title":"Type","default":"adulto"},"age":{"anyOf":[{"type":"integer","maximum":120.0,"minimum":0.0},{"type":"null"}],"title":"Age"},"room":{"type":"integer","maximum":9.0,"minimum":1.0,"title":"Room","default":1}},"type":"object","required":["name"],"title":"GuestIn"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HolderIn":{"properties":{"name":{"type":"string","maxLength":200,"minLength":2,"title":"Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"}},"type":"object","required":["name"],"title":"HolderIn"},"OccupancyIn":{"properties":{"rooms":{"type":"integer","maximum":9.0,"minimum":1.0,"title":"Rooms","description":"Número de habitaciones/unidades iguales","default":1},"adults":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Adults","description":"Adultos por habitación","default":2},"children_ages":{"items":{"type":"integer"},"type":"array","title":"Children Ages","description":"Edades de los niños por habitación"}},"type":"object","title":"OccupancyIn"},"QuoteIn":{"properties":{"rate_key":{"type":"string","title":"Rate Key"}},"type":"object","required":["rate_key"],"title":"QuoteIn"},"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"}}}}