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.
Booking contextCarry the PNR, e-ticket number, airline codes, reservation system, and issuing agency.Itinerary detailRepresent each origin, destination, carrier, flight, seat, fare basis, and service class.AncillariesAttach baggage and other paid services to the correct booking item and ticket.
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.
Complete order payload
Airlines
PNR, passenger, ticket, itinerary, fare, tax, and ancillary data in a typed airline order.
airline_informationbooking_itemslegsancillariesRequest bodyJSON
{
"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
}
]
}
]
},
"payer_info": {
"email": "alex@example.com",
"date_of_birth": "1990-06-25T00:00:00Z"
},
"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 Process an order payment.