Primeros pasos con la API de actividades de XeniCómo reservar una actividadCómo buscar etiquetas y categorías de actividadesCómo cancelar una reserva de actividadCómo comprobar la disponibilidad de la actividadCómo obtener detalles de la actividadCómo recuperar los detalles de la reserva de actividadesCómo buscar actividades con filtrosCómo buscar destinos de actividadesAPI de alquiler de coches: introducciónAPI de alquiler de coches: comprensión de los campos de respuestaCómo reservar un alquiler de cochesCómo obtener detalles del vehículo de alquiler y complementos de equipoCómo recuperar o cancelar una reserva de alquiler de cochesCómo buscar autos de alquiler disponiblesCómo buscar ubicaciones de recogidaCómo utilizar los filtros de búsqueda de alquiler de cochesMejores prácticas de integración de API de ofertasPreguntas frecuentes sobre la API de ofertasPrimeros pasos con la API de ofertas de XeniReferencia de encabezados y parámetros de solicitud de API de ofertasOfertas API Monedas admitidas y localizaciónCómo mostrar ofertas en su aplicaciónCómo buscar ofertas de hoteles por ubicaciónCódigos de error de la API de vuelos y solución de problemasPrimeros pasos con la API de vuelos de XeniCómo reservar un vueloCómo comprobar la disponibilidad y el precio de los vuelosCómo confirmar o cancelar una reserva de vueloCómo recuperar las reglas de tarifas de un vueloCómo recuperar los detalles de la reserva de un vueloCómo buscar aeropuertos usando AutocompletarCómo buscar vuelosCómo utilizar filtros, clasificación y paginación de búsqueda de vuelosCómo comprobar la disponibilidad y el precio de las habitacionesCómo filtrar los resultados de los alquileres vacacionalesCómo obtener detalles, comodidades y accesibilidad de la propiedad del resortCómo mantener y confirmar una reserva de resortCómo liberar una retención de resortCómo recuperar los detalles de la reserva del resortCómo buscar complejos turísticos disponiblesCómo buscar destinos turísticosCómo buscar ubicaciones de alquiler vacacionalCómo buscar alquileres vacacionalesCómo utilizar filtros de búsqueda y clasificación de complejos turísticosComenzando con la API de Xeni ResortsAPI de Resorts: comprensión de los estados y políticas de las reservasPrimeros pasos con la API de alquileres vacacionalesPreguntas frecuentes sobre alquileres vacacionalesTipos de propiedades admitidas para alquileres vacacionalesComprensión de la búsqueda asincrónica para alquileres vacacionalesAutenticación y firmas APIReserva de hoteles: API directa y pago SSOManejo de errores, límites de tasas y mejores prácticasPrimeros pasos con la API de Xeni HotelesGestión de reservas: estado, recuperación y cancelaciónConfirmación de precios y ciclo de vida del tokenRecuperar detalles del hotel y disponibilidad de habitacionesBúsqueda de hoteles: ubicaciones, filtros y paginaciónBuscando HotelesGestión de sesiones e ID de correlaciónAutenticación API y obtención de claves API

Gestión de sesiones e ID de correlación

Última actualización: 2026-02-13

Gestión de sesiones e ID de correlación

La API de Xeni Hotels utiliza ID de correlación para vincular llamadas API relacionadas dentro de una única sesión de búsqueda y reserva. Comprender cómo funcionan los ID de correlación es esencial para una integración correcta. Este artículo explica el ciclo de vida de la sesión, cuándo cambian los ID de correlación y cómo administrarlos.

¿Qué es una identificación de correlación?

Un ID de correlación es un identificador único que la API genera y devuelve en los encabezados de respuesta de su primera llamada a la API (normalmente la búsqueda de ubicación/autocompletar). Vincula todas las llamadas posteriores (búsqueda de hotel, detalles, disponibilidad, precios y reservas) en una sesión coherente.

Piense en ello como un token de sesión para la API. Sin él, la API no puede asociar su verificación de disponibilidad con la búsqueda de hotel que la precedió.

Cómo se crean los ID de correlación

  1. Realiza su primera llamada API (generalmente GET /hotels/api/v2/autocomplete).
  2. La respuesta incluye un encabezado x-correlation-id.
  3. Capture este valor y lo incluya como encabezado x-correlation-id en cada llamada API posterior.

Ejemplo: captura del ID de correlación

// JavaScript (axios)const response = await axios.get('/hotels/api/v2/autocomplete', {  params: { key: 'Miami' },  headers: {    'Authorization': signature,    'Content-Type': 'application/json'  }});

// Capture the correlation ID from response headersconst correlationId = response.headers['x-correlation-id'];

// Use it in all subsequent callsconst searchResponse = await axios.post('/hotels/api/v2/properties?page=1&limit=20', searchBody, { headers: { 'Authorization': signature, 'Content-Type': 'application/json', 'x-correlation-id': correlationId // Pass it forward }});

Ejemplo: Python

# Python (requests)response = requests.get(    f"{base_url}/hotels/api/v2/autocomplete",    params={"key": "Miami"},    headers={"Authorization": signature, "Content-Type": "application/json"})

Capture from response headerscorrelation_id = response.headers.get("x-correlation-id")

Use in subsequent callssearchresponse = requests.post( f"{baseurl}/hotels/api/v2/properties?page=1&limit=20", json=searchbody, headers={ "Authorization": signature, "Content-Type": "application/json", "x-correlation-id": correlationid })

*

Ciclo de vida de la sesión

Una sesión comienza con una búsqueda de ubicación y continúa durante todo el flujo de reserva:

┌─────────────────────────────────────────────────────┐│ SESSION START                                        ││                                                      ││  1. searchLocations("Miami")                         ││     → API returns x-correlation-id: "abc-123"        ││                                                      ││  2. searchHotels(lat, long, dates)                   ││     → Send x-correlation-id: "abc-123"               ││                                                      ││  3. getHotelDetails(propertyId)                      ││     → Send x-correlation-id: "abc-123"               ││                                                      ││  4. checkAvailability(propertyId, dates, occupancy)  ││     → Send x-correlation-id: "abc-123"               ││                                                      ││  5. getPrice(availabilityToken)                      ││     → Send x-correlation-id: "abc-123"               ││                                                      ││  6. SSO Checkout or createBooking(pricingToken)      ││     → Uses x-correlation-id: "abc-123"               ││                                                      ││ SESSION END                                          │└─────────────────────────────────────────────────────┘

Se utiliza el mismo ID de correlación en todo el flujo. Todos los pasos están vinculados a la misma sesión.

*

¿Cuándo cambia el ID de correlación?

Se genera un nuevo ID de correlación cuando se realiza una búsqueda de nueva ubicación. Esto es así por diseño: una nueva búsqueda de ubicación inicia una nueva sesión.

Ejemplo: El usuario cambia de destino

1. User searches "Miami"   → correlationId = "abc-123"   → Hotels in Miami are displayed
  1. User searches "Las Vegas" → API returns NEW correlationId = "def-456" → Hotels in Las Vegas are displayed
  1. User selects a hotel in Las Vegas → Use correlationId "def-456" (NOT "abc-123") → The Miami session is effectively abandoned

Importante: Cuando una búsqueda de nueva ubicación arroja un nuevo ID de correlación, debe descartar el ID de correlación anterior y todos los datos de sesión asociados (resultados de búsqueda, tokens de disponibilidad, tokens de precios). Estos quedan invalidados cuando cambia la sesión.

*

Qué almacenar en tu sesión

Para gestionar el flujo de búsqueda a reserva, su aplicación debe mantener un estado de sesión que rastree estos valores:

XENIKB PH_21correlationId
CampoEstablecer cuandoUsado Por
Ubicación buscarTodas las llamadas API posteriores (encabezado)
ubicaciónDatosUbicación searchBúsqueda de hotel (coordenadas), pago SSO URL
searchParamsHotel searchPaginación, verificación de disponibilidad, pago SSO URL
resultados de búsquedaHotel buscarMostrar al usuario, hotel selección
propertyIdEl usuario selecciona un hotelDetalles, disponibilidad, pago SSO URL
roomIdDisponibilidad comprobarSSO pago URL
availabilityTokenDisponibilidad consultarPrecio confirmación
precioTokenPrecio confirmaciónSSO URL de pago, reserva creación
precioTokenEmitido enPrecio confirmaciónVerificación de vencimiento del token (ventana de 10 minutos)

*

Recomendaciones de almacenamiento de sesiones

Sesiones del lado del servidorPara la mayoría de las integraciones, recomendamos almacenar los datos de la sesión en el lado del servidor con un TTL (tiempo de vida):

  • Redis: ideal para el almacenamiento de sesiones con vencimiento automático. Establezca un TTL de 30 minutos para que coincida con la duración de la firma de la API.
  • Almacenamiento en memoria: adecuado para desarrollo o implementaciones de un solo servidor. Utilice un Mapa con limpieza periódica.
  • Base de datos: viable para la persistencia, pero agrega una marca de tiempo last_activity y limpia las sesiones obsoletas.

TTL recomendado

Configure el TTL de su sesión en 30 minutos, coincidiendo con la vida útil de la firma API. Amplíe el TTL en cada interacción del usuario para mantener vivas las sesiones activas.

Limpieza de sesión

Cuando una sesión caduca o el usuario inicia una nueva búsqueda:

  1. Deseche el antiguo ID de correlación.
  2. Borre los resultados de búsqueda, los tokens y los datos de precios almacenados.
  3. La búsqueda de nueva ubicación establecerá una nueva sesión con una nueva ID de correlación.

*

Errores comunes

EscolloConsecuenciaXENIKBPH1 18Solución
No pasando x-correlation-idLas llamadas API fallan o devuelven datos inconsistentes.Siempre capture y reenvíe el ID de correlación después de la primera call.
Reutilización de ID de correlación antiguosReferencia de llamadas de reserva o disponibilidad búsqueda obsoleta contexto.Reemplace el ID de correlación cada vez que una nueva búsqueda de ubicación arroje uno nuevo.
Usar un token de disponibilidad después de obtener un precio tokenLa reserva falla.Utilice siempre el pricingtoken de la confirmación de precios paso.
No se borran los datos de la sesión en una nueva búsquedaLos tokens antiguos y los resultados de un destino anterior contaminan la nueva búsqueda flow.Restablece todos los datos de la sesión (excepto el nuevo ID de correlación) cuando el usuario busca una nueva ubicación.

*

_Artículo siguiente: Manejo de errores, límites de tasas y mejores prácticas
_

¿Te resultó útil este artículo?