{"openapi":"3.1.0","info":{"title":"Punta XP API","version":"1.0.0","description":"Contrato público /v1 de Punta XP (plan §10). Cambios dentro de /v1 solo aditivos; los consumidores deben ignorar campos y keys de sección desconocidos. Montos en unidades menores."},"servers":[{"url":"https://sandbox.puntaxp.com"}],"paths":{"/api/v1/openapi.json":{"get":{"operationId":"getOpenApi","summary":"Especificación OpenAPI de /v1","tags":["Fase 0"],"x-phase":0,"x-auth":["PUBLIC"],"security":[{}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/oauth/token":{"post":{"operationId":"issueToken","summary":"Token de acceso OAuth2 client_credentials (expires_in 900 s)","tags":["Fase 1"],"x-phase":1,"x-auth":["PUBLIC"],"security":[{}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/offerings":{"get":{"operationId":"listOfferings","summary":"Buscar offerings","tags":["Fase 1"],"x-phase":1,"x-auth":["PUBLIC","CLIENT"],"security":[{},{"oauthClient":["offerings:read"]}],"parameters":[{"name":"destination","in":"query","required":false,"description":"Slug del destino","schema":{"type":"string"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number"}},{"name":"radius","in":"query","required":false,"description":"Kilómetros","schema":{"type":"number"}},{"name":"from","in":"query","required":false,"description":"YYYY-MM-DD","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"YYYY-MM-DD","schema":{"type":"string"}},{"name":"guests","in":"query","required":false,"schema":{"type":"integer"}},{"name":"category","in":"query","required":false,"description":"Key de categoría","schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Texto libre","schema":{"type":"string"}},{"name":"priceMin","in":"query","required":false,"schema":{"type":"integer"}},{"name":"priceMax","in":"query","required":false,"schema":{"type":"integer"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string"}},{"name":"instant","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pickup","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"locale","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferingListResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/offerings/{id}":{"get":{"operationId":"getOffering","summary":"Detalle de un offering","tags":["Fase 1"],"x-phase":1,"x-auth":["PUBLIC","CLIENT"],"security":[{},{"oauthClient":["offerings:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/offerings/by-slug/{destination}/{slug}":{"get":{"operationId":"getOfferingBySlug","summary":"Detalle por slug","tags":["Fase 1"],"x-phase":1,"x-auth":["PUBLIC","CLIENT"],"security":[{},{"oauthClient":["offerings:read"]}],"parameters":[{"name":"destination","in":"path","required":true,"schema":{"type":"string"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/categories":{"get":{"operationId":"listCategories","summary":"Categorías del tenant","tags":["Fase 1"],"x-phase":1,"x-auth":["PUBLIC","CLIENT"],"security":[{},{"oauthClient":["offerings:read"]}],"parameters":[{"name":"locale","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryListResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/organizations/{id}/profile":{"get":{"operationId":"getOrganizationProfile","summary":"Perfil público del proveedor","tags":["Fase 1"],"x-phase":1,"x-auth":["PUBLIC","CLIENT"],"security":[{},{"oauthClient":["offerings:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/discovery/map":{"post":{"operationId":"discoverMap","summary":"Marcadores livianos para el mapa","tags":["Fase 1"],"x-phase":1,"x-auth":["PUBLIC","CLIENT"],"security":[{},{"oauthClient":["offerings:read"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/recommendations":{"get":{"operationId":"getRecommendations","summary":"Recomendaciones sin estado","tags":["Fase 1"],"x-phase":1,"x-auth":["PUBLIC","CLIENT"],"security":[{},{"oauthClient":["recommendations:read"]}],"parameters":[{"name":"destination","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"guests","in":"query","required":false,"schema":{"type":"integer"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number"}},{"name":"lng","in":"query","required":false,"schema":{"type":"number"}},{"name":"locale","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendationsResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/offerings/{id}/availability":{"get":{"operationId":"getAvailability","summary":"Disponibilidad y precios","tags":["Fase 1"],"x-phase":1,"x-auth":["PUBLIC","CLIENT"],"security":[{},{"oauthClient":["availability:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"participants","in":"query","required":false,"schema":{"type":"integer"}},{"name":"quantity","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/bookings":{"post":{"operationId":"createBooking","summary":"Crear una reserva (no disponible para clientes S2S)","tags":["Fase 1"],"x-phase":1,"x-auth":["PUBLIC","END_USER"],"security":[{},{"firebaseIdToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/bookings/{id}":{"get":{"operationId":"getBooking","summary":"Ver una reserva propia","tags":["Fase 1"],"x-phase":1,"x-auth":["END_USER","GUEST"],"security":[{"firebaseIdToken":[]},{"manageToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/bookings/{id}/cancel":{"post":{"operationId":"cancelBooking","summary":"Cancelar una reserva propia","tags":["Fase 1"],"x-phase":1,"x-auth":["END_USER","GUEST"],"security":[{"firebaseIdToken":[]},{"manageToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/leads":{"post":{"operationId":"createLead","summary":"Consulta (CONTACT)","tags":["Fase 1"],"x-phase":1,"x-auth":["PUBLIC","END_USER"],"security":[{},{"firebaseIdToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/r/{offeringId}":{"get":{"operationId":"redirectExternal","summary":"Redirect rastreable a la URL externa (EXTERNAL)","tags":["Fase 1"],"x-phase":1,"x-auth":["PUBLIC"],"security":[{}],"parameters":[{"name":"offeringId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"302":{"description":"Redirect"},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/stay-contexts/{stayId}":{"put":{"operationId":"upsertStayContext","summary":"Crear o actualizar el contexto de una estadía","tags":["Fase 1"],"x-phase":1,"x-auth":["CLIENT"],"security":[{"oauthClient":["stay-context:write"]}],"parameters":[{"name":"stayId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StayContextUpsert"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StayContextResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"get":{"operationId":"getStayContext","summary":"Contexto de una estadía","tags":["Fase 1"],"x-phase":1,"x-auth":["CLIENT"],"security":[{"oauthClient":["stay-context:read"]}],"parameters":[{"name":"stayId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StayContextResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/stay-contexts/{stayId}/discovery":{"get":{"operationId":"getStayDiscovery","summary":"Secciones de discovery para la estadía","tags":["Fase 1"],"x-phase":1,"x-auth":["CLIENT"],"security":[{"oauthClient":["stay-context:read","recommendations:read"]}],"parameters":[{"name":"stayId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveryResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/stay-contexts/{stayId}/bookings":{"get":{"operationId":"getStayBookings","summary":"Reservas XP de la estadía, sin PII","tags":["Fase 1"],"x-phase":1,"x-auth":["CLIENT"],"security":[{"oauthClient":["bookings:read"]}],"parameters":[{"name":"stayId","in":"path","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Lista separada por comas. Default CONFIRMED,REQUESTED","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StayBookingsResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/stay-contexts/{stayId}/handoff-tokens":{"post":{"operationId":"createHandoffToken","summary":"Token de handoff (idempotente)","tags":["Fase 1"],"x-phase":1,"x-auth":["CLIENT"],"security":[{"oauthClient":["stay-context:write"]}],"parameters":[{"name":"stayId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HandoffTokenResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/stay-contexts/{stayId}/access-links":{"post":{"operationId":"createStayAccessLink","summary":"Access link / QR de la estadía","tags":["Fase 3"],"x-phase":3,"x-auth":["CLIENT"],"security":[{"oauthClient":["stay-context:write"]}],"parameters":[{"name":"stayId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/properties/{propertyId}/recommendations":{"get":{"operationId":"getPropertyRecommendations","summary":"Recomendaciones de la propiedad","tags":["Fase 3"],"x-phase":3,"x-auth":["CLIENT"],"security":[{"oauthClient":["recommendations:read"]}],"parameters":[{"name":"propertyId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"put":{"operationId":"putPropertyRecommendations","summary":"Guardar recomendaciones de la propiedad","tags":["Fase 3"],"x-phase":3,"x-auth":["CLIENT"],"security":[{"oauthClient":["property-recommendations:write"]}],"parameters":[{"name":"propertyId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/properties/{propertyId}/access-links":{"post":{"operationId":"createPropertyAccessLink","summary":"Access link / QR de la propiedad","tags":["Fase 3"],"x-phase":3,"x-auth":["CLIENT"],"security":[{"oauthClient":["property-recommendations:write"]}],"parameters":[{"name":"propertyId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/properties/{propertyId}/access-links/{tokenId}":{"delete":{"operationId":"revokePropertyAccessLink","summary":"Revocar un access link","tags":["Fase 3"],"x-phase":3,"x-auth":["CLIENT"],"security":[{"oauthClient":["property-recommendations:write"]}],"parameters":[{"name":"propertyId","in":"path","required":true,"schema":{"type":"string"}},{"name":"tokenId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Sin contenido"},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/webhooks/stays":{"post":{"operationId":"receiveStayEvent","summary":"Eventos stay.* (HMAC)","tags":["Fase 3"],"x-phase":3,"x-auth":["HMAC"],"security":[{"hmacSignature":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventEnvelope"}}}},"responses":{"204":{"description":"Sin contenido"},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/favorites":{"get":{"operationId":"listFavorites","summary":"Favoritos del usuario","tags":["Fase 1"],"x-phase":1,"x-auth":["END_USER"],"security":[{"firebaseIdToken":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/favorites/{offeringId}":{"put":{"operationId":"putFavorite","summary":"Agregar favorito","tags":["Fase 1"],"x-phase":1,"x-auth":["END_USER"],"security":[{"firebaseIdToken":[]}],"parameters":[{"name":"offeringId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Sin contenido"},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteFavorite","summary":"Quitar favorito","tags":["Fase 1"],"x-phase":1,"x-auth":["END_USER"],"security":[{"firebaseIdToken":[]}],"parameters":[{"name":"offeringId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Sin contenido"},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}},"components":{"schemas":{"Money":{"type":"object","properties":{"amount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Entero en unidades menores (centavos)"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217"}},"required":["amount","currency"]},"StayPhase":{"type":"string","enum":["PRE_STAY","IN_STAY","POST_STAY"]},"OfferingKind":{"type":"string","enum":["EXPERIENCE","SERVICE"]},"OfferingType":{"type":"string","enum":["ACTIVITY","TRANSFER","RENTAL","TICKET","FOOD","WELLNESS","PROPERTY_SERVICE","GENERAL_SERVICE"]},"PricingType":{"type":"string","enum":["PER_PERSON","PER_GROUP","PER_HOUR","PER_DAY","PER_UNIT","FIXED"]},"BookingStatus":{"type":"string","enum":["REQUESTED","CONFIRMED","REJECTED","EXPIRED","CANCELLED","COMPLETED","NO_SHOW"]},"LocationPrecision":{"type":"string","enum":["CITY","AREA","APPROXIMATE","EXACT"]},"StayContextUpsert":{"type":"object","properties":{"stayId":{"type":"string","minLength":1,"maxLength":128},"status":{"type":"string","enum":["CONFIRMED","CANCELLED"]},"sourceUpdatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Última modificación de la estadía en el sistema de origen"},"destination":{"type":"object","properties":{"city":{"type":"string","minLength":1},"area":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2"},"lat":{"type":"number","minimum":-90,"maximum":90},"lng":{"type":"number","minimum":-180,"maximum":180},"precision":{"$ref":"#/components/schemas/LocationPrecision"}},"required":["city","country","precision"]},"propertyId":{"type":"string","maxLength":128},"hostId":{"type":"string","maxLength":128},"checkIn":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Fecha local del destino"},"checkOut":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"guests":{"type":"object","properties":{"adults":{"type":"integer","minimum":1,"maximum":50},"children":{"type":"integer","minimum":0,"maximum":50}},"required":["adults"]},"locale":{"description":"BCP 47, por ejemplo es-UY","type":"string","maxLength":35},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}},"required":["stayId","status","sourceUpdatedAt","destination","checkIn","checkOut","guests"]},"StayContextResponse":{"type":"object","properties":{"stayId":{"type":"string"},"status":{"type":"string","enum":["CONFIRMED","CANCELLED"]},"phase":{"$ref":"#/components/schemas/StayPhase"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["stayId","status","phase","expiresAt","updatedAt"]},"CategoryRef":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"icon":{"type":"string"}},"required":["key","label"]},"OfferingCard":{"type":"object","properties":{"id":{"type":"string"},"kind":{"$ref":"#/components/schemas/OfferingKind"},"title":{"type":"string"},"coverImageUrl":{"type":"string"},"category":{"$ref":"#/components/schemas/CategoryRef"},"priceFrom":{"$ref":"#/components/schemas/Money"},"priceUnit":{"$ref":"#/components/schemas/PricingType"},"priceUnitLabel":{"type":"string"},"rating":{"type":"number"},"reviewCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"durationLabel":{"type":"string"},"distanceKm":{"type":"number"},"availableFromProperty":{"type":"boolean"},"deepLink":{"type":"string"}},"required":["id","kind","title","coverImageUrl","category","deepLink"]},"DiscoverySection":{"type":"object","properties":{"key":{"type":"string","description":"Conocidas: featured, services, nearby, during_dates, today, before_arrival, property_picks. Los consumidores deben aceptar keys nuevas y renderizarlas de forma genérica."},"title":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/OfferingCard"}},"seeAllLink":{"type":"string"}},"required":["key","title","items"]},"DiscoveryResponse":{"type":"object","properties":{"phase":{"$ref":"#/components/schemas/StayPhase"},"sections":{"type":"array","items":{"$ref":"#/components/schemas/DiscoverySection"}}},"required":["phase","sections"]},"RecommendationsResponse":{"type":"object","properties":{"sections":{"type":"array","items":{"$ref":"#/components/schemas/DiscoverySection"}}},"required":["sections"]},"MapRequest":{"type":"object","properties":{"bbox":{"type":"object","properties":{"north":{"type":"number"},"south":{"type":"number"},"east":{"type":"number"},"west":{"type":"number"}},"required":["north","south","east","west"]},"center":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"},"radiusKm":{"type":"number","exclusiveMinimum":0,"maximum":200}},"required":["lat","lng","radiusKm"]},"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"participants":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"categories":{"type":"array","items":{"type":"string"}},"kind":{"$ref":"#/components/schemas/OfferingKind"},"type":{"$ref":"#/components/schemas/OfferingType"},"priceMin":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceMax":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"stayId":{"description":"Solo para clientes autenticados","type":"string"},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":500}}},"MapOffering":{"type":"object","properties":{"id":{"type":"string"},"kind":{"$ref":"#/components/schemas/OfferingKind"},"lat":{"type":"number"},"lng":{"type":"number"},"title":{"type":"string"},"coverImageUrl":{"type":"string"},"category":{"$ref":"#/components/schemas/CategoryRef"},"priceFrom":{"$ref":"#/components/schemas/Money"},"priceUnit":{"$ref":"#/components/schemas/PricingType"},"rating":{"type":"number"},"deepLink":{"type":"string"}},"required":["id","kind","lat","lng","title","coverImageUrl","category","deepLink"]},"MapResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/MapOffering"}},"stayMarker":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"},"precision":{"$ref":"#/components/schemas/LocationPrecision"}},"required":["lat","lng","precision"]}},"required":["items"]},"AvailabilityResponse":{"type":"object","properties":{"offeringId":{"type":"string"},"mode":{"type":"string","enum":["SLOT","WINDOW","FULL_DAY","RESOURCE","UNMANAGED"]},"timezone":{"type":"string"},"dates":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"options":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string"},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"endAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"remaining":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"price":{"$ref":"#/components/schemas/Money"},"priceBasis":{"$ref":"#/components/schemas/PricingType"},"totalPrice":{"$ref":"#/components/schemas/Money"}},"required":["optionId","startAt","price","priceBasis"]}}},"required":["date","options"]}}},"required":["offeringId","mode","timezone","dates"]},"StayBookingItem":{"type":"object","properties":{"bookingId":{"type":"string"},"offeringId":{"type":"string"},"title":{"type":"string"},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"endAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"status":{"$ref":"#/components/schemas/BookingStatus"},"coverImageUrl":{"type":"string"},"locationLabel":{"type":"string"},"participantsLabel":{"type":"string"},"deepLink":{"type":"string"}},"required":["bookingId","offeringId","title","startAt","status","deepLink"]},"StayBookingsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/StayBookingItem"}}},"required":["items"]},"HandoffTokenResponse":{"type":"object","properties":{"token":{"type":"string"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["token","expiresAt"]},"OfferingSummary":{"type":"object","properties":{"id":{"type":"string"},"kind":{"$ref":"#/components/schemas/OfferingKind"},"title":{"type":"string"},"coverImageUrl":{"type":"string"},"category":{"$ref":"#/components/schemas/CategoryRef"},"priceFrom":{"$ref":"#/components/schemas/Money"},"priceUnit":{"$ref":"#/components/schemas/PricingType"},"priceUnitLabel":{"type":"string"},"rating":{"type":"number"},"reviewCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"durationLabel":{"type":"string"},"distanceKm":{"type":"number"},"availableFromProperty":{"type":"boolean"},"deepLink":{"type":"string"},"shortDescription":{"type":"string"},"languages":{"type":"array","items":{"type":"string"}},"bookingMethod":{"type":"string","enum":["INSTANT","REQUEST","MANUAL_CONFIRMATION","API","EXTERNAL","CONTACT"]}},"required":["id","kind","title","coverImageUrl","category","deepLink","languages","bookingMethod"]},"OfferingListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OfferingSummary"}},"nextCursor":{"type":"string"}},"required":["items"]},"CategoryListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"icon":{"type":"string"},"kind":{"$ref":"#/components/schemas/OfferingKind"}},"required":["key","label","kind"]}}},"required":["items"]},"TokenResponse":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"type":"string","const":"Bearer"},"expires_in":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"scope":{"type":"string"}},"required":["access_token","token_type","expires_in","scope"]},"ApiError":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["UNAUTHORIZED","FORBIDDEN","NOT_FOUND","STAY_CONTEXT_NOT_FOUND","VALIDATION_FAILED","CONFLICT","IDEMPOTENCY_MISMATCH","NO_CAPACITY","OFFERING_UNAVAILABLE","RATE_LIMITED","INTERNAL"]},"message":{"type":"string"},"details":{},"retryable":{"type":"boolean"}},"required":["code","message","retryable"]}},"required":["error"]},"EventEnvelope":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"tenant":{"type":"string"},"data":{}},"required":["id","type","version","occurredAt","tenant","data"]},"XpBookingEventData":{"type":"object","properties":{"bookingId":{"type":"string"},"offeringId":{"type":"string"},"title":{"type":"string"},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"endAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"status":{"$ref":"#/components/schemas/BookingStatus"},"coverImageUrl":{"type":"string"},"locationLabel":{"type":"string"},"participantsLabel":{"type":"string"},"deepLink":{"type":"string"},"stayId":{"type":"string"}},"required":["bookingId","offeringId","title","startAt","status","deepLink","stayId"]},"StayEventData":{"allOf":[{"$ref":"#/components/schemas/StayContextUpsert"},{"type":"object","properties":{"checkedInAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"checkedOutAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}}}]}},"securitySchemes":{"oauthClient":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/api/v1/oauth/token","scopes":{"offerings:read":"offerings:read","availability:read":"availability:read","recommendations:read":"recommendations:read","stay-context:write":"stay-context:write","stay-context:read":"stay-context:read","bookings:read":"bookings:read","property-recommendations:write":"property-recommendations:write"}}}},"firebaseIdToken":{"type":"http","scheme":"bearer","bearerFormat":"Firebase ID token"},"manageToken":{"type":"apiKey","in":"header","name":"X-Manage-Token"},"hmacSignature":{"type":"apiKey","in":"header","name":"X-Signature","description":"sha256=<hex(HMAC_SHA256(secret, X-Timestamp + '.' + rawBody))>. Rechazar si |now − X-Timestamp| > 300 s."}}}}