Consola API
Pruébalo
Envía una petición real al entorno sandbox e inspecciona la respuesta.
Credenciales
Inicia sesión para elegir entre tus API keys guardadas en vez de pegarlas.
Parámetros de ruta
2 camposProveedor GDS
Sistema de distribución global usado para obtener contenido de vuelos. Selecciona 0 para el proveedor predeterminado.
ID de oferta
Identificador de la oferta devuelta por una búsqueda de vuelos anterior.
Cuerpo de la petición
Petición cURL
curl -X POST 'https://api.sandbox.travelandz.com/v1/flights/order/0/:offerId' \
-H 'Authorization: Bearer YOUR_SECRET_KEY' \
-H 'X-Travelandz-Id: YOUR_PUBLIC_KEY:YOUR_PROFILE_CODE' \
-H 'Content-Type: application/json' \
-d '{"currency":"EUR","passengers":[{"id":"pas_0000B7VCW4ca7emwcBOyUf","type":"adult","title":"mr","phone_number":"+573128837058","firstName":"Alejandro","lastName":"Toledo","gender":"m","email":"jairotoledo2003@gmail.com","bornDate":"2003-08-14"}],"type":"instant"}'Añade tus credenciales para enviar una petición.
Respuesta
Pulsa «¡Pruébalo!» para enviar una petición y ver la respuesta aquí.
Crea una reserva instantánea o una orden en hold desde una oferta seleccionada. Las reservas públicas resuelven el precio interno desde offerId o desde la oferta trackeada.
Endpoint
| Método | Ruta | Auth |
|---|---|---|
POST | /v1/flights/order/:gdsprovider/:offerId | API key requerida |
| Header | Descripción |
|---|---|
Authorization | Bearer <secret_key>. El secret se muestra una sola vez al crear la credencial. |
X-Travelandz-Id | <public_key>:<profile_code>. El profile_code es el codigo de Developer Profile con prefijo dp_ que ves en el dashboard. Esto vincula la peticion con un perfil y una credencial. |
Content-Type | Usa application/json para peticiones con cuerpo. |
Esquema de parámetros de la petición
gdsproviderofferIdEsquema del cuerpo de la petición
currencypassengerspassengers[]idmystifly_pax_1.passengers[]typepassengers[]titlepassengers[]phone_numberpassengers[].phone. En flujos gdsprovider=1, passengers[0].phone_number tambien satisface holder.phone y deriva holder.countryCodepassengers[]infant_passenger_idpassengers[]identity_documents[{ type, unique_identifier, issuing_country_code, expires_on }]. Requeridos cuando la oferta o required-fields los solicitepassengers[]firstNamepassengers[].name desde required-fieldspassengers[]lastNamepassengers[].lastName desde required-fieldspassengers[]genderpassengers[]emailpassengers[].email. Algunos flujos gdsprovider=1 solo consumen el email del primer pasajero como email principal del titularpassengers[]bornDatepassengers[]countrynationality como truepassengers[]NationalIDallowedDocuments incluye dni, incluso sin un flag explicito nationalIdpassengers[]loyaltyProgrammeAccounts[{ airlineIataCode, accountNumber }]. Usalos solo cuando supportedLoyaltyPrograms incluya el codigo de aerolineatotalSegmentstotalSegments[]originCodetotalSegments[]destinationCodetotalSegments[]flightNumbertotalSegments[]departureDateholdIdtypeRespuesta exitosa
Devuelve identificadores de orden, estado y payload de reserva del proveedor.
Esquema del cuerpo de la respuesta
orderIdholdExpiresAtholdPriceGuaranteedliveModeNotas operativas
- La reserva publica siempre requiere un snapshot trackeado de la oferta publica seleccionada para el mismo profile,
gdsprovideryofferId. passengers[].idis the passenger id from the tracked offer, not an internal user identifier.passengers[].idypassengers[].typedeben coincidir exactamente con los pasajeros de la oferta trackeada. Se rechazan ids vacios, duplicados, pasajeros faltantes, pasajeros extra o tipos que no coinciden.- Las ofertas publicas de Mystifly generan ids internos de pasajero como
mystifly_pax_1,mystifly_pax_2, etc. Reutiliza esos ids exactamente como los devuelve la oferta. - No envies identificadores internos de usuario; no forman parte del contrato publico de reserva.
- No envies
originalPriceen reservas publicas. La API resuelve precio y moneda internos desdeofferIdo desde la oferta trackeada. Si se enviaoriginalPrice, la validacion publica rechaza la peticion por ser un campo no permitido. - Envia
identity_documents[]cuando la oferta o el endpoint required-fields indiquen que se requieren documentos de identidad. type=holdandholdIdonly apply when the selected booking flow supports hold payment.totalSegments[]solo es requerido cuando el flujo seleccionado necesita metadata de segmentos. Construyelo desde cada item deoffer.slices[].segments[].
Mapeo de required-fields a create-order
| Respuesta de required-fields | Campo de create-order | Notas |
|---|---|---|
passengers[].title | passengers[].title | Coincidencia directa |
passengers[].type | passengers[].type | Coincidencia directa |
passengers[].name | passengers[].firstName | Renombrado en el body de reserva |
passengers[].lastName | passengers[].lastName | Coincidencia directa |
passengers[].gender | passengers[].gender | Coincidencia directa |
passengers[].bornDate | passengers[].bornDate | Coincidencia directa |
passengers[].nationality | passengers[].country | Usa codigo de pais ISO de 2 letras |
passengers[].phone | passengers[].phone_number | Formato E.164 |
passengers[].email | passengers[].email | En flujos gdsprovider=1, solo el email del primer pasajero puede consumirse como email del titular |
passengers[].documentIdentifier | passengers[].identity_documents[].unique_identifier | Solo cuando se requiere un objeto de documento |
passengers[].documentType | passengers[].identity_documents[].type | Limitado por allowedDocuments |
passengers[].documentExpiresAt | passengers[].identity_documents[].expires_on | Solo cuando es requerido |
passengers[].documentCountryCode | passengers[].identity_documents[].issuing_country_code | Solo cuando es requerido |
passengers[].allowedDocuments | passengers[].identity_documents[].type | Si incluye dni, tambien recoge passengers[].NationalID |
holder.phone | passengers[0].phone_number | Algunos flujos derivan el contacto del titular desde el primer pasajero |
holder.email | passengers[0].email | Algunos flujos derivan el contacto del titular desde el primer pasajero |
holder.countryCode | derivado de passengers[0].phone_number | No existe un campo separado de reserva; usa el prefijo telefonico E.164 |
Los flags genericos age, address, city, postalCode y documentIssuedAt actualmente no mapean a campos publicos explicitos de reserva.
Payloads anidados de pasajero
{
"identity_documents": [
{
"type": "passport",
"unique_identifier": "X1234567",
"issuing_country_code": "ES",
"expires_on": "2030-12-31"
}
],
"loyaltyProgrammeAccounts": [
{
"airlineIataCode": "BA",
"accountNumber": "123456789"
}
]
}Ejemplo de totalSegments
[
{
"originCode": "MAD",
"destinationCode": "BCN",
"flightNumber": "1234",
"departureDate": "2026-08-20T08:15:00"
}
]totalSegments | Origen en offer.slices[].segments[] |
|---|---|
originCode | segment.departure.iataCode |
destinationCode | segment.arrival.iataCode |
flightNumber | segment.flightNumber |
departureDate | segment.departure.departingAt |
Ejemplo
curl -X POST https://api.sandbox.travelandz.com/v1/flights/order/0/offer_123 \
-H "Authorization: Bearer $TRAVELANDZ_SECRET_KEY" \
-H "X-Travelandz-Id: $TRAVELANDZ_PUBLIC_KEY:$TRAVELANDZ_PROFILE_CODE" \
-H "Content-Type: application/json" \
-d '{"currency":"EUR","type":"instant","passengers":[{"id":"pas_0001","type":"adult","title":"mr","phone_number":"+34612345678","firstName":"John","lastName":"Doe","gender":"m","email":"john.doe@example.com","bornDate":"1990-01-15","country":"ES"}]}'Cuerpo de la petición - Ejemplo
{
"currency": "EUR",
"passengers": [
{
"id": "pas_0000B7VCW4ca7emwcBOyUf",
"type": "adult",
"title": "mr",
"phone_number": "+573128837058",
"firstName": "Alejandro",
"lastName": "Toledo",
"gender": "m",
"email": "jairotoledo2003@gmail.com",
"bornDate": "2003-08-14"
}
],
"type": "instant"
}Respuestas
| Código | Descripción |
|---|---|
200 | Orden de vuelo creada correctamente. |
400 | Solicitud inválida: payload no válido. |
401 | No autorizado: credenciales inválidas o ausentes. |
403 | Prohibido: credenciales inválidas. |
500 | Error interno del servidor |
200 Cuerpo de la respuesta
Tipo de contenido: application/json
{
"orderId": "ord_0000B7VCdoZtPDdnjqCYIe",
"liveMode": false
}