Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: TUI Flight Ota API
version: '0.9'
contact:
name: OTA-TEAM
email: ota.support@tui.be
description: Flight only OTA Api
servers:
- url: https://prod.api.tui
- url: https://playground.api.tui
tags:
- name: Ota
paths:
/ota/getflights:
get:
description: Returns all available flight routes and their corresponding flight keys.
security:
- oAuth2ClientCredentials: []
responses:
'200':
description: 200 response
content:
application/json:
schema:
$ref: '#/components/schemas/getflightsResponse'
examples:
getflights:
$ref: '#/components/examples/getflightsExample'
operationId: getflights
tags:
- Ota
/ota/flightavailability:
get:
description: Returns flight availability, pricing and seat information for a given route and travel dates.
security:
- oAuth2ClientCredentials: []
parameters:
- name: departuredate
description: Start date of the journey. Format yyyymmdd
in: query
required: true
example: 20270118
schema:
type: string
format: date
pattern: ^\d{8}$
- name: departureairport
description: IATA code of the departure location of the outward journey.
in: query
required: true
example: BRU
schema:
type: string
- name: destinationairport
description: IATA code of the destination location of the outward journey.
in: query
example: TFS
required: true
schema:
type: string
- name: returndate
description: Return date of the journey. Format yyyymmdd
in: query
example: 20270125
schema:
type: string
format: date
pattern: ^\d{8}$
- name: adults
description: Amount of adults.
example: 1
in: query
required: true
schema:
type: number
format: integer
- name: children
description: Amount of children
in: query
example: 0
schema:
type: number
format: integer
- name: infant
description: Amount of infants
in: query
example: 0
schema:
type: number
format: integer
- name: locale
description: Locale to use for the query. en_GB by default.
example: en_GB
in: query
schema:
type: string
responses:
'200':
description: 200 response
content:
application/json:
schema:
$ref: '#/components/schemas/flightavailabilityResponse'
examples:
flightavailability:
$ref: '#/components/examples/flightavailabilityExample'
'404':
description: When there is not a possible route to satisfy the search criteria.
content: {}
operationId: flightavailablity
tags:
- Ota
/ota/includedluggage:
get:
security:
- oAuth2ClientCredentials: []
parameters:
- name: pax
in: query
required: true
description: Url encoded list of passenger object, each item with Id and passenger type
schema:
type: string
format: json+url encode
example: '[{"id":1,"type":"a"},{"id":2,"type":"c"},{"id":3,"type":"i"}]'
- name: flightkey
in: query
required: true
example: BRUTFS20270118202701181751TB
schema:
type: string
format: flightKey
description: Flight key
- name: returnflightkey
in: query
example: TFSBRU20270117202701171752TB
schema:
type: string
format: flightKey
description: Flight key of the return flight
responses:
'200':
description: type H = luggage that customer can carry on board(hand-luggage) - <br />type C = cargo luggage
content:
application/json:
schema:
$ref: '#/components/schemas/includedLuggageResponse'
examples:
includedluggage:
$ref: '#/components/examples/includedluggageExample'
operationId: includdedluggage
description: Luggage that's included
tags:
- Ota
/ota/luggage:
get:
security:
- oAuth2ClientCredentials: []
parameters:
- name: flightkey
in: query
description: Flight key of the selected plane.
required: true
example: BRUTFS20270118202701181751TB
schema:
type: string
format: flightKey
- name: returnflightkey
in: query
description: Return flight key of the selected plane.
example: TFSBRU20270117202701171752TB
schema:
type: string
format: flightKey
- name: locale
in: query
example: en_GB
schema:
$ref: '#/components/schemas/locale'
type: string
description: language code
responses:
'200':
description: List of possible luggage options for the requested flight key.
content:
application/json:
schema:
$ref: '#/components/schemas/luggageResponse'
examples:
luggage:
$ref: '#/components/examples/luggageExample'
operationId: luggage
description: Returns the available checked luggage (hold baggage) options and pricing for a specific flight.
tags:
- Ota
/ota/pricecalculation:
get:
description: Calculates the total price for a flight including selected ancillaries. When the "book" parameter is set to 1, it also creates a reservation.
security:
- oAuth2ClientCredentials: []
parameters:
- name: book
description: Set to 0 for price calculation only. Set to 1 to create a reservation.
in: query
schema:
type: number
format: integer
pattern: ^[0|1]$
- name: flightkey
in: query
required: true
schema:
$ref: '#/components/schemas/flightkey'
description: Flight key
example: BRUTFS20270118202701181751TB
- name: returnflightkey
in: query
schema:
$ref: '#/components/schemas/flightkey'
description: Return flight key
example: TFSBRU20270117202701171752TB
- name: luggage
in: query
schema:
type: string
description: json object for luggage
example: '[{"paxId":1,"out":20,"ret":20},{"paxId":2,"out":0,"ret":0},{"paxId":3,"out":0,"ret":0}]'
- name: handluggage
in: query
schema:
type: string
description: json object for handluggage
example: '[{"paxId":1,"out":"HBAG","ret":"HBAG"},{"paxId":2,"out":"PBAG","ret":"PBAG"}]'
- name: sports
in: query
schema:
type: string
description: json object for sports equipment
example: '[{"paxId":1,"out":"BICYCLE","ret":"BICYCLE"}]'
- name: assistance
in: query
schema:
type: string
description: json object for assistance options
example: '[{"paxId":1,"out":"WCHR","ret":"WCHR"}]'
- name: pets
in: query
schema:
type: string
description: json object for pet transport
example: '[{"paxId":1,"out":"PETC","ret":"PETC"}]'
- name: pax
in: query
required: true
schema:
type: string
description: json object for pax(a=adult,c=child,i=infant)
example: book=0 [{"id":1,"type":"a"},{"id":2,"type":"c"},{"id":3,"type":"i"}] book=1 [{"id":1,firstname:"John",name:"Doe",title:1,birthday:"19790825","type":"a"},{"id":2,firstname:"Jane",name:"Doe",title:2,birthday:"20150825","type":"c"},{"id":3,firstname:"Marcel",name:"Doe",title:2,birthday:"20210825","type":"i"}]
- name: name
in: query
schema:
type: string
description: Surname of the customer
example: Doe
- name: firstname
in: query
schema:
type: string
description: Firstname of the customer
example: John
- name: email
in: query
schema:
type: string
format: email
description: Email address of the customer
example: john.doe@gmail.com
- name: phonePrefix
in: query
schema:
type: number
format: integer
description: Phone prefix of the customer
example: 32
- name: phone
in: query
schema:
type: string
description: Phone number of the customer
- name: phonePrefix2
in: query
schema:
type: number
format: integer
description: Second phone prefix of the customer
example: 32
- name: phone2
in: query
schema:
type: string
description: Second phone number of the customer
- name: bus
in: query
schema:
type: string
description: Mailbox of the customer
- name: street
example: Main street
in: query
schema:
type: string
description: Streetname of the address of the customer
- name: streetnr
in: query
example: 14
schema:
type: string
description: House number of the address of the customer
- name: city
in: query
example: Ostend
schema:
type: string
description: City of the address of the customer
- name: countrycode
in: query
example: BE
schema:
type: string
description: Countrycode of the country of the customer(ISO 3166-1 alpha-2 code)
- name: price
in: query
example: 264.99
schema:
type: string
description: Price that you receive when book=0 needs to be sent when book=1 so we are sure you have the same price
- name: zip
in: query
example: 8400
schema:
type: string
description: Zip code(postal code) of the city of the customer
- name: birthday
in: query
schema:
type: string
format: date
pattern: ^\d{8}$
description: Date of birth of the customer yyyymmdd
example: 19790825
- name: locale
in: query
schema:
$ref: '#/components/schemas/locale'
description: Locale
- name: servicebundle
in: query
example: F
schema:
type: string
description: servicebundle code
responses:
'200':
description: 200 response
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/priceCalculationPrice'
- $ref: '#/components/schemas/priceCalculationBook'
examples:
pricecalculation:
$ref: '#/components/examples/priceCalculationExample'
operationId: pricecalculcation
tags:
- Ota
/ota/pay:
get:
security:
- oAuth2ClientCredentials: []
parameters:
- name: po
in: query
example: 100000599969
required: true
description: The reservation number you want to do a payment for.
schema:
type: string
minLength: 9
maxLength: 12
format: numeric
pattern: ^\d{9,12}$
- name: cardnumber
example: 4007702835532454
in: query
description: Credit card number or encrypted card, no spaces.
required: true
schema:
type: string
format: numeric
pattern: ^\d+$
- name: cvc
example: 123
in: query
description: Credit card cvc code. Required for standard payment, needs to be removed for encrypted card payment.
schema:
type: string
minLength: 3
maxLength: 4
format: numeric
pattern: ^\d{3,4}$
- name: expirydate
example: 0128
in: query
description: 'Credit card expire date. Format: mmyy. Required for standard payment, needs to be removed for encrypted card payment.'
schema:
type: string
format: date
- name: locale
example: en_GB
in: query
description: locale
schema:
$ref: '#/components/schemas/locale'
- name: amount
example: 30000
description: Total amount to pay for this reservation. This amount needs to be multiplied by 100.
in: query
required: true
schema:
type: number
format: integer
responses:
'200':
description: When payment details have been received.
content:
application/json:
schema:
$ref: '#/components/schemas/payResponse'
examples:
payment-ok:
$ref: '#/components/examples/payOkExample'
payment-ko:
$ref: '#/components/examples/payKoExample'
operationId: pay
description: 'Submits a virtual card payment for an existing reservation. Supports two modes: standard payment (cardnumber, cvc, expirydate) or encrypted card payment (cardnumber).'
tags:
- Ota
post:
security:
- oAuth2ClientCredentials: []
parameters:
- name: po
in: query
required: true
example: 100000599969
description: The reservation number you want to do a payment for.
schema:
type: string
minLength: 9
maxLength: 12
format: numeric
pattern: ^\d{9,12}$
- name: cardnumber
example: 4007702835532454
in: query
description: Credit card number or encrypted card, no spaces
required: true
schema:
type: string
format: numeric
pattern: ^\d+$
- name: cvc
in: query
example: 123
description: Credit card cvc code. Required for standard payment, needs to be removed for encrypted card payment.
schema:
type: string
minLength: 3
maxLength: 4
format: numeric
pattern: ^\d{3,4}$
- name: expirydate
example: 0128
in: query
description: 'Credit card expire date. Format: mmyy. Required for standard payment, needs to be removed for encrypted card payment.'
schema:
type: string
format: date
- name: locale
example: en_GB
in: query
description: locale
schema:
$ref: '#/components/schemas/locale'
- name: amount
example: 30000
description: Total amount to pay for this reservation. This amount needs to be multiplied by 100.
in: query
required: true
schema:
type: number
format: integer
responses:
'200':
description: When payment details have been received.
content:
application/json:
schema:
$ref: '#/components/schemas/payResponse'
examples:
payment-ok:
$ref: '#/components/examples/payOkExample'
payment-ko:
$ref: '#/components/examples/payKoExample'
operationId: post_pay
description: 'Submits a credit card payment for an existing reservation. Supports two modes: standard payment (cardnumber, cvc, expirydate) or encrypted card payment (cardnumber).'
tags:
- Ota
/ota/bookinfo:
get:
security:
- oAuth2ClientCredentials: []
description: Retrieves information about a specific reservation.
parameters:
- name: po
description: PO number
example: 100000599969
in: query
required: true
schema:
type: string
format: numeric
minLength: 9
maxLength: 12
pattern: ^\d{9,12}$
responses:
'200':
description: A booking information
content:
application/json:
schema:
$ref: '#/components/schemas/bookinfoResponse'
examples:
bookinfo:
$ref: '#/components/examples/bookinfoExample'
'404':
description: 404 response when booking is not found in the system.
content: {}
operationId: bookinfo
tags:
- Ota
/ota/servicebundle:
get:
security:
- oAuth2ClientCredentials: []
description: Retrieves information about servicebundles.
parameters:
- name: flightkey
in: query
required: true
schema:
$ref: '#/components/schemas/flightkey'
description: Flight key
example: BRUTFS20270118202701181751TB
- name: returnflightkey
in: query
schema:
$ref: '#/components/schemas/flightkey'
description: Return flight key
example: TFSBRU20270117202701171752TB
responses:
'200':
description: Information about a servicebundle for a specific flight or flightcombination
content:
application/json:
schema:
$ref: '#/components/schemas/servicebundleResponse'
examples:
servicebundle:
$ref: '#/components/examples/servicebundleExample'
'404':
description: 404 response when flight or servicebundle is not found in the system.
content: {}
operationId: servicebundle
tags:
- Ota
/ota/handluggage:
get:
security:
- oAuth2ClientCredentials: []
parameters:
- name: flightkey
in: query
description: Flight key of the selected plane.
required: true
example: BRUTFS20270118202701181751TB
schema:
type: string
format: flightKey
- name: returnflightkey
in: query
description: Return flight key of the selected plane.
example: TFSBRU20270117202701171752TB
schema:
type: string
format: flightKey
- name: locale
in: query
example: en_GB
schema:
$ref: '#/components/schemas/locale'
type: string
description: language code
responses:
'200':
description: List of possible handluggage options for the requested flight key.
content:
application/json:
schema:
$ref: '#/components/schemas/handluggageResponse'
examples:
handluggage:
$ref: '#/components/examples/handluggageExample'
operationId: handluggage
description: 'Returns the possible handluggage options for a specific flight. Codes: PBAG = Personal bag (max 2kg, 40x30x20 cm), HBAG = Hand baggage / cabin trolley (max 10kg, 55x40x20 cm).'
tags:
- Ota
/ota/sports:
get:
security:
- oAuth2ClientCredentials: []
parameters:
- name: flightkey
in: query
description: Flight key of the selected plane.
required: true
example: BRUTFS20270118202701181751TB
schema:
type: string
format: flightKey
- name: returnflightkey
in: query
description: Return flight key of the selected plane.
example: TFSBRU20270117202701171752TB
schema:
type: string
format: flightKey
- name: locale
in: query
example: en_GB
schema:
$ref: '#/components/schemas/locale'
type: string
description: language code
responses:
'200':
description: List of possible sport options for the requested flight key.
content:
application/json:
schema:
$ref: '#/components/schemas/sportsResponse'
examples:
sports:
$ref: '#/components/examples/sportsExample'
operationId: sports
description: 'Returns the possible sports equipment options for a specific flight. Codes: SURFBOARD = Surfboard, WINTER_SPORTS_EQUIPMENT = Winter sports equipment (skis, snowboard, etc.), PARAGLIDER_PARACHUTE = Paraglider or parachute, GOLF = Golf equipment, DIVE = Diving equipment, BICYCLE = Bicycle.'
tags:
- Ota
/ota/assistance:
get:
security:
- oAuth2ClientCredentials: []
parameters:
- name: flightkey
in: query
description: Flight key of the selected plane.
required: true
example: BRUTFS20270118202701181751TB
schema:
type: string
format: flightKey
- name: returnflightkey
in: query
description: Return flight key of the selected plane.
example: TFSBRU20270117202701171752TB
schema:
type: string
format: flightKey
- name: locale
in: query
example: en_GB
schema:
$ref: '#/components/schemas/locale'
description: language code
responses:
'200':
description: List of possible assistance options for the requested flight key.
content:
application/json:
schema:
$ref: '#/components/schemas/assistanceResponse'
examples:
assistance:
$ref: '#/components/examples/assistanceExample'
operationId: assistance
description: 'Returns the possible assistance options for a specific flight. Codes: YPTA = Young passenger travelling alone, WCHS = Wheelchair - cannot walk long distances or climb stairs but can walk to seat, WCHR = Wheelchair - cannot walk long distances but can climb stairs and walk to seat, WCHC = Wheelchair - wheelchair-dependent and unable to walk, WCH = Wheelchair - assistance for reduced mobility, UMNR = Unaccompanied minor, MAAS = Meet and assist at the airport, DPNA = Passengers with a learning or cognitive impairment, DEAF = Deaf or hearing impaired passenger, BLND = Blind or visually impaired passenger.'
tags:
- Ota
/ota/pets:
get:
security:
- oAuth2ClientCredentials: []
parameters:
- name: flightkey
in: query
description: Flight key of the selected plane.
required: true
example: BRUTFS20270118202701181751TB
schema:
type: string
format: flightKey
- name: returnflightkey
in: query
description: Return flight key of the selected plane.
example: TFSBRU20270117202701171752TB
schema:
type: string
format: flightKey
- name: locale
in: query
example: en_GB
schema:
$ref: '#/components/schemas/locale'
description: language code
responses:
'200':
description: List of possible pet transport options for the requested flight key.
content:
application/json:
schema:
$ref: '#/components/schemas/petsResponse'
examples:
pets:
$ref: '#/components/examples/petsExample'
operationId: pets
description: 'Returns the possible pet transport options for a specific flight. Codes: PETC = Dog/cat up to 8kg (including bag) in the cabin, AVIH = Dog/cat in the heated cargo hold.'
tags:
- Ota
components:
examples:
luggageExample:
value:
luggage:
OUT:
- price: 0
weight: 0
- price: 20
weight: 20
- price: 25
weight: 25
- price: 30
weight: 30
- price: 65
weight: 35
- price: 100
weight: 40
- price: 150
weight: 45
priceCalculationExample:
value:
currency: EUR
totalprice: 379.99
totaleuro: 379.99
airportTax: 10.86
exchangeRate: 1
lines:
- type: FLIGHT
code: ''
description: flight with 1 adult(s).
price: 379.99
details:
price:
OUT: 379.99
RET: 0
formula: ''
quantity: 0
pax: 1
- type: LUGGAGE
code: BG00
description: 00 kg ruimbagage
price: 0
details:
- price: 0
formula: X
quantity: 1
pax: 1
flights:
OUT:
key: TFSBRU20220907202209071661TB
totalFree: 9
seatsAtThisPrice: 0
infantsFree: 9
depart:
airport:
code: TFS
name: Tenerife
datetime: '2027-01-20T12:35:00'
arrival:
airport:
code: BRU
name: Brussels
datetime: '2027-01-20T18:25:00'
via:
airport:
code: LPA
name: LPA
carrier: TB
carrierOperatorCode: TB
number: 1661
fppAvailable: false
fppDefault: false
daySequence: ''
price: 102.99
meal:
code: X
includedLuggage:
- paxId: 1
included: 20
maxPerBag: 0
type: C
price: 20
- paxId: 1
included: 10
maxPerBag: 10
type: H
- paxId: 2
included: 25
maxPerBag: 0
type: C
price: 25
- paxId: 2
included: 10
maxPerBag: 10
type: H
carrierName: TUI fly
RET:
aircrafttype: ''
key: TFSBRU20210326175452TB
accomodation:
date: '2027-01-25'
totalFree: 9
seatsAtThisPrice: 0
infantsFree: 9
depart:
airport:
code: TFS
name: Tenerife
datetime: '2027-01-25T14:30:00+01:00'
arrival:
airport:
code: BRU
name: Brussel
datetime: '2027-01-25T20:30:00+01:00'
carrier: TB
carrierOperatorCode: ''
number: '1754'
fppAvailable: false
fppDefault: false
daySequence: 2
price: 102.99
meal:
code: V
includedLuggage:
- paxId: 1
included: 25
maxPerBag: 32
type: C
price: 0
- paxId: 1
included: 10
maxPerBag: 10
type: H
- paxId: 2
included: 25
maxPerBag: 32
type: C
price: 0
- paxId: 2
included: 10
maxPerBag: 10
type: H
carrierName: TUI fly
fppCost: ''
details: "\n\n\n\n\n\n\n PRIJS\n VR 19/03 TB 1753 BRU 0825 - LPA 1225 -//- LPA 1255 - TFS 1405 (seq:2)\n VR 26/03 TB 1754 TFS 1430 - BRU 2030 (seq:2)\n TF.E TUI fly 7 NACHTEN VR 19/03/2021 VR 26/03/2021\n 02900 TUI FLY BRU-TFS TFS-BRU\n MR. JOHN DOE 30 jaar N: 102,99 + 102,99\n MRS. JANE DOE 30 jaar N 411,96\n AIRPORT\n BRU-TFS\n 20 kg ruimbagage : JOHN DOE 20,00\n 25 kg ruimbagage : JANE DOE 25,00\n TFS-BRU\n 25 kg ruimbagage : JOHN DOE 0,00\n 25 kg ruimbagage : JANE DOE 0,00\n Geen Standaardmaaltijd op heenreis BRU-TFS\n Flydeluxe op terugreis TFS-BRU : 65,00X 2 130,00\n Geen verzekering\n Enkelvoudige prestatie\n 05/03/2021 (W ) TOTAL.... 586,96\n (Incl. Airporttax 40,15 p.p.)\n"
travelDirective: CUSTOM
saldo: 586.96
vouchers: null
deposit: 0
advance: 586.96
tdaAvailable: 1
vehicles: []
messages: []
destinationInfo:
- 'Belgische burgers: identiteitskaart (geldig vr de duur van het verblijf)'
- 'niet-Belgische burgers: Info bij hun Ambassade of Consulaat'
- '-----------------------------------------------------------------------'
- 'COVID-19 info :'
- 'Meer informatie over de reisformaliteiten op de TUI fly website :'
- https://www.tuifly.be/nl/legal/reisformaliteiten
flightErrata:
- 13/11/20-31/03/21
- Een negatieve Covid-19 test dient bij aankomst voorgelegd te
- worden. De test mag maximaal 72 uur voor aankomst in
- Spanje afgenomen zijn en is verplicht voor volwassenen en
- kinderen vanaf 6 jaar.
- ''
hotelErrata: []
indicTransferType: N
indicHuurwagen: ''
tax:
OUT:
- paxId: 1
code: BE1
price: 35.14
- paxId: 1
code: S3
price: 4
- paxId: 2
code: BE1
price: 35.14
- paxId: 2
code: S3
price: 4
RET:
- paxId: 1
code: BE2
price: 0.27
- paxId: 1
code: EG
price: 7.75
- paxId: 1
code: EQ
price: 1.82
- paxId: 1
code: JK
price: 2.59
- paxId: 2
code: BE2
price: 0.27
- paxId: 2
code: EG
price: 7.75
- paxId: 2
code: EQ
price: 1.82
- paxId: 2
code: JK
price: 2.59
insurance:
- code: N
price: 0
priceDetail:
- description: Flydeluxe op terugreis TFS-BRU
price: 130
type: FLYDEL
code: FMVR
- description: Geen verzekering
type: INS
handluggageExample:
value:
handluggage:
OUT:
- price: 0
weight: 2
code: PBAG
dimensions:
unit: cm
height: 40
length: 30
width: 20
- price: 22
weight: 10
code: HBAG
dimensions:
unit: cm
height: 55
length: 40
width: 20
flightavailabilityExample:
value:
flights:
OUT:
aircrafttype: ''
key: BRUTFS20210401175141TB
accomodation:
date: '2027-01-18'
totalFree: 135
seatsAtThisPrice: 0
infantsFree: 18
depart:
airport:
code: BRU
name: Brussel
datetime: '2027-01-18T06:15:00+02:00'
arrival:
airport:
code: TFS
name: Tenerife
datetime: '2027-01-18T10:15:00+02:00'
carrier: TB
carrierOperatorCode: ''
number: 1751
fppAvailable: false
fppDefault: false
daySequence: 1
availableMeals:
X:
code: X
price: 0
priceChild: 0
V:
code: V
price: 65
priceChild: 20
defaultMeal: X
carrierName: TUI fly
occupationMatch: 1
bestMatch: 1
RET:
aircrafttype: ''
key: TFSBRU20210404175671TB
accomodation:
date: '2027-01-25'
totalFree: 166
seatsAtThisPrice: 0
infantsFree: 18
depart:
airport:
# --- truncated at 32 KB (66 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/tui-group/refs/heads/main/openapi/tui-group-ota-api-openapi.yml