Airline payments and orders
Build airline payment flows with first-class booking, passenger, itinerary, ticket, fare, tax, and ancillary context.
DEUNA treats airline booking data as part of the order—not as an opaque metadata blob. Preserve the commercial and travel context used by payment providers, fraud controls, reconciliation, and customer operations.
This guide covers the public airline-specific contract. Lodging and other travel products use the standard order plus documented merchant metadata; the airline schema does not define a public hotel or general travel reservation model.
Complete airline order payload#
Use AIRLINE_ORDER and include airline_information.booking_items. The example mirrors the airline model supported by the order and payment services.
Airlines
Process the payment in one request by sending the order, payer, and tokenized payment source inline.
/v2/merchants/orders/purchasePNR, passenger, ticket, itinerary, fare, tax, and ancillary data in a typed airline order.
airline_informationbooking_itemslegsancillaries{
"payer_info": {
"email": "alex@example.com",
"date_of_birth": "1990-06-25T00:00:00Z"
},
"payment_source": {
"method_type": "credit_card",
"payment_method": "TOKENIZED_PAYMENT_METHOD"
},
"order_type": "AIRLINE_ORDER",
"order": {
"order_id": "pnr-N7K4Q2",
"store_code": "web-eu",
"currency": "EUR",
"items_total_amount": 52000,
"sub_total": 52000,
"total_tax_amount": 9200,
"total_amount": 61200,
"items": [
{
"id": "ticket-0741234567890",
"name": "Madrid to Paris",
"description": "Economy Flex airfare with one checked bag",
"quantity": 1,
"category": "airfare",
"taxable": true,
"unit_price": {
"amount": 52000,
"currency": "EUR",
"currency_symbol": "€"
},
"total_amount": {
"amount": 52000,
"original_amount": 52000,
"currency": "EUR",
"currency_symbol": "€",
"total_discount": 0
},
"tax_amount": {
"amount": 9200,
"currency": "EUR",
"currency_symbol": "€"
}
}
],
"airline_information": {
"booking_items": [
{
"pnr": "N7K4Q2",
"ticket_number": "0741234567890",
"e_ticket": true,
"airline_3_digit_code": "074",
"airline_iata_designator": "UX",
"reservation_system_code": "AMADEUS",
"ticketing_travel_agency": {
"iata_code": "91234567",
"name": "DEUNA Travel",
"agency_invoice_number": "INV-2026-00421"
},
"passenger": {
"user_id": "traveler-8821",
"first_name": "Alex",
"middle_name": "",
"last_name": "Morgan",
"title": "Mx",
"date_of_birth": "1990-06-25",
"document_type": "passport",
"identity_document_number": "PA1234567",
"document_number": "PA1234567",
"email": "alex@example.com",
"phone": "+34600000000",
"frequent_flyer_code": "UX008821",
"country_code": "ES",
"type": "ADT"
},
"legs": [
{
"origin": {
"iata_code": "MAD",
"date": "2026-11-14",
"time": "09:10",
"city": "Madrid",
"country_code": "ES"
},
"destination": {
"iata_code": "ORY",
"date": "2026-11-14",
"time": "11:05",
"city": "Paris",
"country_code": "FR"
},
"carrier_code": "UX",
"carrier_name": "Air Europa",
"flight_number": "UX1027",
"seat_location": "12A",
"fare_basis_code": "YFLEX",
"stopover_code": "O",
"sub_total_amount": 48500,
"tax_amount": 9200,
"total_amount": 57700,
"service_class": "Y",
"airport_tax_amount": 4700
}
],
"ancillaries": [
{
"type": "BAGGAGE",
"ticket_number": "0741234567890",
"total_amount": 3500,
"service_category": "baggage",
"description": "One checked bag",
"category_code": "BG",
"sub_category_code": "23K",
"fee_code": "0CC",
"unit_price": 3500
}
]
}
]
},
"description": "N7K4Q2 · MAD–ORY",
"statement_descriptor": "DEUNA TRAVEL",
"channel_type": "desktop_web",
"metadata": {
"vertical": "airline",
"sales_channel": "direct",
"loyalty_tier": "gold"
}
},
"callback_urls": {
"on_success": "https://merchant.example.com/payments/success",
"on_pending": "https://merchant.example.com/payments/pending",
"on_reject": "https://merchant.example.com/payments/rejected",
"on_canceled": "https://merchant.example.com/payments/canceled",
"on_failed": "https://merchant.example.com/payments/failed"
}
}Model the business context#
| Requirement | Order fields |
|---|---|
| Booking and ticket | pnr, ticket_number, e_ticket, reservation_system_code |
| Passenger | passenger identity, contact, type, and frequent-flyer fields |
| Flight | legs[].origin, destination, carrier_code, flight_number, service_class |
| Fare and taxes | Leg and order subtotal, tax, airport tax, and total amounts |
| Ancillaries | ancillaries[] type, service category, ticket, fee code, and amount |
Production checklist#
- Map one
booking_itemper passenger and ticket relationship used by your reservation system. - Use IATA airport and airline designators consistently.
- Reconcile order, leg, tax, ancillary, and grand totals in minor currency units.
- Keep personally identifiable passenger data limited to the fields required by the flow.
- Test authorization, 3DS, delayed capture, cancellation, refund, and itinerary-change scenarios.
Continue with 3DS authentication, capture and refund workflows, and Create payment.