POST/v1/flights/order/:gdsprovider/:offerId

Crear orden de vuelo

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.

Compartir
POST/v1/flights/order/:gdsprovider/:offerId

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 campos

Proveedor 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
bash
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étodoRutaAuth
POST/v1/flights/order/:gdsprovider/:offerIdAPI key requerida
Headers obligatorios:
HeaderDescripción
AuthorizationBearer <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-TypeUsa application/json para peticiones con cuerpo.

Esquema de parámetros de la petición

gdsprovider
number
offerId
string

Esquema del cuerpo de la petición

currency
enum
EURUSDCNY
Moneda solicitada para la reserva publica. El precio interno se resuelve por offerId o por los datos de la oferta trackeada
passengers
array
passengers[]id
string
Passenger id from the selected tracked public offer. It must exactly match the offer passenger id and type. Empty, missing, duplicate or extra passenger ids are rejected. Mystifly offers generate ids such as mystifly_pax_1.
passengers[]type
enum
adultchildinfant_without_seat
passengers[]title
enum
mrmsmrsmiss
passengers[]phone_number
string
Format: E.164 phone number
Satisface passengers[].phone. En flujos gdsprovider=1, passengers[0].phone_number tambien satisface holder.phone y deriva holder.countryCode
passengers[]infant_passenger_id
stringNo
Requerido cuando el pasajero esta asociado a un infante
passengers[]identity_documents
arrayNo
Objetos de documento de identidad. Ejemplo: [{ type, unique_identifier, issuing_country_code, expires_on }]. Requeridos cuando la oferta o required-fields los solicite
passengers[]firstName
string
Satisface passengers[].name desde required-fields
passengers[]lastName
string
Satisface passengers[].lastName desde required-fields
passengers[]gender
enum
mf
passengers[]email
string
Satisface passengers[].email. Algunos flujos gdsprovider=1 solo consumen el email del primer pasajero como email principal del titular
passengers[]bornDate
string
Format: YYYY-MM-DD
passengers[]country
stringNo
Codigo de pais ISO de 2 letras. Usalo cuando required-fields marque nationality como true
passengers[]NationalID
stringNo
Usalo cuando el flujo seleccionado requiera numero de identidad nacional. En respuestas actuales de gdsprovider=1 puede estar implicito si allowedDocuments incluye dni, incluso sin un flag explicito nationalId
passengers[]loyaltyProgrammeAccounts
arrayNo
Objetos opcionales de cuenta de fidelidad. Ejemplo: [{ airlineIataCode, accountNumber }]. Usalos solo cuando supportedLoyaltyPrograms incluya el codigo de aerolinea
totalSegments
array
totalSegments[]originCode
string
Mapped from offer.slices[].segments[].departure.iataCode
totalSegments[]destinationCode
string
Mapped from offer.slices[].segments[].arrival.iataCode
totalSegments[]flightNumber
string
Mapped from offer.slices[].segments[].flightNumber
totalSegments[]departureDate
string
Format: ISO 8601
Mapped from offer.slices[].segments[].departure.departingAt
holdId
stringNo
Solo para proveedores que soportan pago en hold
type
enum
instanthold
No
Por defecto es instant. hold solo aplica cuando el proveedor seleccionado lo soporta

Respuesta exitosa

Devuelve identificadores de orden, estado y payload de reserva del proveedor.

Esquema del cuerpo de la respuesta

orderId
string
holdExpiresAt
string
Format: ISO 8601
No
holdPriceGuaranteed
stringNo
liveMode
boolean
True cuando la peticion se sirve desde el entorno live de Travelandz. Este valor viene de Travelandz, no del payload del proveedor.

Notas operativas

  • La reserva publica siempre requiere un snapshot trackeado de la oferta publica seleccionada para el mismo profile, gdsprovider y offerId.
  • passengers[].id is the passenger id from the tracked offer, not an internal user identifier.
  • passengers[].id y passengers[].type deben 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 originalPrice en reservas publicas. La API resuelve precio y moneda internos desde offerId o desde la oferta trackeada. Si se envia originalPrice, 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=hold and holdId only 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 de offer.slices[].segments[].

Mapeo de required-fields a create-order

Respuesta de required-fieldsCampo de create-orderNotas
passengers[].titlepassengers[].titleCoincidencia directa
passengers[].typepassengers[].typeCoincidencia directa
passengers[].namepassengers[].firstNameRenombrado en el body de reserva
passengers[].lastNamepassengers[].lastNameCoincidencia directa
passengers[].genderpassengers[].genderCoincidencia directa
passengers[].bornDatepassengers[].bornDateCoincidencia directa
passengers[].nationalitypassengers[].countryUsa codigo de pais ISO de 2 letras
passengers[].phonepassengers[].phone_numberFormato E.164
passengers[].emailpassengers[].emailEn flujos gdsprovider=1, solo el email del primer pasajero puede consumirse como email del titular
passengers[].documentIdentifierpassengers[].identity_documents[].unique_identifierSolo cuando se requiere un objeto de documento
passengers[].documentTypepassengers[].identity_documents[].typeLimitado por allowedDocuments
passengers[].documentExpiresAtpassengers[].identity_documents[].expires_onSolo cuando es requerido
passengers[].documentCountryCodepassengers[].identity_documents[].issuing_country_codeSolo cuando es requerido
passengers[].allowedDocumentspassengers[].identity_documents[].typeSi incluye dni, tambien recoge passengers[].NationalID
holder.phonepassengers[0].phone_numberAlgunos flujos derivan el contacto del titular desde el primer pasajero
holder.emailpassengers[0].emailAlgunos flujos derivan el contacto del titular desde el primer pasajero
holder.countryCodederivado de passengers[0].phone_numberNo 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

json
json
{
  "identity_documents": [
    {
      "type": "passport",
      "unique_identifier": "X1234567",
      "issuing_country_code": "ES",
      "expires_on": "2030-12-31"
    }
  ],
  "loyaltyProgrammeAccounts": [
    {
      "airlineIataCode": "BA",
      "accountNumber": "123456789"
    }
  ]
}

Ejemplo de totalSegments

json
json
[
  {
    "originCode": "MAD",
    "destinationCode": "BCN",
    "flightNumber": "1234",
    "departureDate": "2026-08-20T08:15:00"
  }
]
totalSegmentsOrigen en offer.slices[].segments[]
originCodesegment.departure.iataCode
destinationCodesegment.arrival.iataCode
flightNumbersegment.flightNumber
departureDatesegment.departure.departingAt

Ejemplo

bash
bash
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

json
json
{
  "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ódigoDescripción
200Orden de vuelo creada correctamente.
400Solicitud inválida: payload no válido.
401No autorizado: credenciales inválidas o ausentes.
403Prohibido: credenciales inválidas.
500Error interno del servidor

200 Cuerpo de la respuesta

Tipo de contenido: application/json

json
json
{
  "orderId": "ord_0000B7VCdoZtPDdnjqCYIe",
  "liveMode": false
}