Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/tui-group-holidayofferscontroller-usl-api-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no email required.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: HolidayOffersController USL API
description: 'Supported versions for the X-API-VERSION header is: v1, v2'
version: v1
contact:
name: Sales-Starlight-TEAM
url: https://developer.tui/api-catalog/holidayofferscontroller-api
email: starlight@TUIGroup.onmicrosoft.com
servers:
- url: https://prod.api.tui/search-holiday-offers
tags:
- name: HolidayOffersController USL API
paths:
/search-holiday-offers/search/package/v1/offers:
post:
tags:
- HolidayOffersController USL API
summary: Get holiday offers (v1)
description: "v1 is the USL version for the Holidays Offers API. Returns Package holidays based on \nthe search criteria in the request body. Support filter retention. More could find here:\nhttps://confluence.tuigroup.com/pages/viewpage.action?pageId=1474581073#DesignUSLAPIforlistofferproxysupportingWR/NR-ProposedStoriesfortheListOffersTeamtoimplementnewchanges\n"
parameters:
- name: x-source-application
in: header
required: true
description: Source application for this request flow
schema:
type: string
example: Search Results MFE
- name: x-correlation-id
in: header
required: true
description: UUID to identify a specific request in case of an issue. End to end tracing ID
schema:
type: string
format: uuid
example: 14bafa8a-182d-4390-bc91-11e79bdcaec0
- name: x-environment
in: header
schema:
$ref: '#/components/schemas/Environment'
- name: x-ab-cookie-set
in: header
description: List of AB test cookies to be sent to NGS
schema:
type: string
example: 1080:A,1081:B
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SearchOfferRequest'
required: true
responses:
'200':
description: Successful search of the offers 200 response
content:
application/json:
schema:
$ref: '#/components/schemas/SearchOfferResponse'
'204':
description: Successful search of the offers, but no offers is present
'400':
description: Bad Request
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ValidationProblem'
'404':
description: Resource Not Found
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
'500':
description: Internal Server Error. Something went wrong on our end
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
'502':
description: Bad Gateway. One or more backend systems not available
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
'504':
description: Gateway Timed Out
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
components:
schemas:
SearchOfferResponse:
type: object
x-field-extra-annotation:
- '@Introspected'
required:
- filters
- holidays
properties:
filters:
type: array
x-field-extra-annotation:
- '@Valid'
items:
$ref: '#/components/schemas/Filter'
holidays:
x-field-extra-annotation:
- '@Valid'
$ref: '#/components/schemas/PackageHoliday'
SearchRequestSortType:
type: string
description: Sort order to use before paging
example: TOTALPRICEASC
enum:
- DEFAULT
- TOTALPRICEASC
- TOTALPRICEDESC
- REVIEWDESC
- CUSTOMERRATING
- DISCOUNTDESC
- FLIGHTDEPTIMESASC
FilterType:
type: string
description: type of the filter
example: TRIPRATING
enum:
- BOARDBASIS
- TUIRATING
- FACILITIES
- CONCEPTS
- HOLIDAYDEPARTUREDATE
- HOLIDAYTYPE
- ACCOMMODATIONTYPE
- PRICE
- PRICEPP
- DISCOUNT
- DESTINATIONS
- DURATIONS
- DISTANCETO
- DEPARTUREAIRPORTS
- CUSTOMERRATING
- COMMISSIONMARKERS
- TRIPRATING
- CARRIER
- BESTFOR
- DEPARTURETIMEOUT
- DEPARTURETIMEBACK
- FREECHILDPLACES
- ACCESSIBILITY
- FLIGHTSTOPS
- MOUNTAINFEATURES
- FLIGHTTYPE
StayDuration:
required:
- checkInDate
- checkOutDate
- numberOfNights
type: object
properties:
numberOfNights:
type: integer
format: int32
description: number of stay nights in the accommodation
example: 7
checkInDate:
type: string
format: date
description: accommodation check in date
example: '2025-07-07'
checkOutDate:
type: string
format: date
description: accommodation check out date
example: '2025-07-14'
TransferResponse:
required:
- transferType
type: object
properties:
direction:
$ref: '#/components/schemas/DirectionType'
sourcingCategory:
type: string
description: Indicates the Sourcing Type of the Transfer
example: CONTRACTED
transferType:
type: string
description: url listing the details of the transfer type e.g. https://refdata.tui/transfer-types#SHARED, like SHARED, PRIVATE, WELFARE, OPT_OUT
example: 'WR: PRIVATE NR: carHire'
CancellationResponse:
required:
- isApplicable
type: object
properties:
applicableTill:
type: string
format: date
description: cancellation rule applicable till certain date
example: '2025-05-06'
cancellationRule:
description: cancellation rule details
type: array
items:
$ref: '#/components/schemas/CancellationRuleResponse'
isApplicable:
type: boolean
default: false
description: is the cancellation rule applicable for the offer
example: true
FlightSegment:
required:
- segmentId
- journeyId
- flightNo
- marketingCarrier
- departurePoint
- arrivalPoint
- departureDate
- arrivalDate
type: object
properties:
segmentId:
type: string
description: productUnitId for WR, transport atcomId for NR
example: 'WR: 26929514-237c-11ed-861d-0242ac120002 NR: A156e11a1541d53c59e94ebad3037ef17'
journeyId:
type: string
description: journeyId for WR, transport routeCd for NR
example: 'WR: 26929514-237c-11ed-861d-0242ac120002 NR: DXBLGW4T'
operatingCarrier:
maxLength: 3
minLength: 2
type: string
description: Operating carrier code as defined by flight sourcing service
example: TOM
marketingCarrier:
maxLength: 3
minLength: 2
type: string
description: Marketing carrier code as defined by flight sourcing service
example: TB
flightNo:
type: string
description: Flight number as defined by flight sourcing service
example: 2501
departurePoint:
type: string
description: Departure airport code
example: LHR
arrivalPoint:
type: string
description: Arrival airport code
example: ESP
departureDate:
type: string
format: date
description: Local departure date
example: 2025-07-22
departureTime:
type: string
format: time
description: Local departure time
example: '14:35:00'
arrivalDate:
type: string
format: date
description: Local arrival date
example: 2025-07-28
arrivalTime:
type: string
format: time
description: Local arrival time
example: 64200
duration:
type: integer
description: Flight duration in minutes
example: 123
legs:
maxItems: 10
minItems: 1
type: array
description: information of all flight 'legs' (including stop over codes)
example: null
items:
$ref: '#/components/schemas/FlightLeg'
sourcingCategory:
$ref: '#/components/schemas/SourcingCategory'
LuggageResponse:
required:
- allowance
properties:
allowance:
type: string
description: Allowed amount of KG for the luggage
example: '20'
price:
type: number
format: double
description: Price for the luggage
example: 75.98
SearchRequestUnitAllocation:
required:
- number
- paxAge
- paxID
- unitType
type: object
minItems: 1
properties:
paxID:
minimum: 1
type: number
format: integer
description: id of the pax
example: 1
paxAge:
minimum: 0
type: number
format: integer
description: age of the pax
example: 18
number:
minimum: 1
type: number
format: integer
description: in which room pax goes, room number
example: 1
unitType:
$ref: '#/components/schemas/UnitAllocationType'
SearchRequestDeparture:
type: object
properties:
code:
type: string
description: Airport IATA code
pattern: '[A-Z]{3}'
example: BRU
type:
type: string
pattern: (AIRPORT)
description: type from where we go, currently it is only AIRPORT
example: AIRPORT
Filter:
type: object
example: '[{ "code": "DESTINATIONS", "value": "Destination", "options": [ { "code": "ESP", "available": true, "selected": false, "value": "Spain", "type": "COUNTRY", "options": [ { "code": "002894", "value": "Andalucia", "selected": false, "count": 66, "type": "REGION", "available": true, "options": [ { "code": "002894", "value": "Andalucia Child(example)", "selected": false, "count": 33, "type": "DESTINATION", "available": true }, { "code": "002894", "value": "Andalucia Child(example)", "selected": false, "count": 33, "type": "DESTINATION", "available": true } ] }, { "code": "000373", "value": "Barcelona", "selected": false, "count": 117, "type": "DESTINATION", "available": true } }]'
required:
- code
- options
properties:
code:
$ref: '#/components/schemas/FilterType'
value:
type: string
example: Departure Points
description: Naming of the filter, if the naming not present should be filter type then
options:
type: array
x-field-extra-annotation:
- '@Valid'
- '@NotEmpty'
items:
$ref: '#/components/schemas/FilterOption'
SearchRequestMetaInformation:
required:
- brand
- medium
- target
- sourceMarket
- locale
- currency
type: object
properties:
target:
$ref: '#/components/schemas/SellingTarget'
sourceMarket:
$ref: '#/components/schemas/SourceMarket'
brand:
$ref: '#/components/schemas/Brand'
provider:
type: string
default: TUI
description: Provider Code, use "TUI" as a default unless specified otherwise WR only. //Could be removed?
example: null
medium:
$ref: '#/components/schemas/Medium'
agentId:
type: string
example: T|D2816,F|D2816
description: one or more comma-separated agent or abta codes, required for 'retail' NR channel. Retail inhouse/3rd party agent id
locale:
type: string
pattern: ^[a-z]{2}_[A-Z]{2}$
example: nl_BE
description: locale information
currency:
$ref: '#/components/schemas/Currency'
FlightLeg:
required:
- id
- arrivalPoint
- departurePoint
- departureDate
type: object
properties:
id:
type: string
format: uuid
description: Product unit id or transport id for that leg
example: 26929514-237c-11ed-861d-0242ac120002
departurePoint:
type: string
description: Departure point IATA code
example: LHR
departureDate:
type: string
format: date
description: Local departure date
example: 2024-03-28
departureTime:
type: string
format: time
description: Local departure time
example: '10:30:00'
arrivalPoint:
type: string
description: Arrival point IATA code
example: LHR
arrivalDate:
type: string
format: date
description: Local arrival date
example: 2024-03-28
arrivalTime:
type: string
format: time
description: Local arrival time
example: '11:30:00'
RoomBoardData:
required:
- boardType
- travellers
type: object
properties:
freeChildPlace:
type: boolean
default: false
description: 'Defines if the freeChildPace is available for this offer
'
example: true
roomId:
type: string
description: required attribute for WR (uuid) Product unit ID of the transfer as defined by product service / optional for NR (atcomId)
example: 26929514-237c-11ed-861d-0242ac120002 or 1149172371
sourcedUnitId:
type: string
description: Sourced unit ID of the transfer unit as defined by sourcing service
example: 26929514-237c-11ed-861d-0242ac120002 or 1149172371
roomType:
type: string
description: room type code as defined by sourcing
example: 23bf71c4-2f92-4cdb-8862-e7de20ff897c or TW01
boardType:
$ref: '#/components/schemas/BoardCode'
sourcingCategory:
type: string
description: Indicates the Sourcing Type of the Unit
example: CONTRACTED
travellers:
type: array
description: Travellers list offered this transfer
items:
$ref: '#/components/schemas/Traveller'
availability:
type: integer
description: number of available rooms
example: 20
PackageOfferResponse:
required:
- holidayEndDate
- holidayStartDate
- prices
- id
- flight
- accommodations
type: object
properties:
id:
type: string
description: product id for WR / atcom pkg id for NR
example: WR = "ad86b620-7085-45da-a8c3-37eb07d8763b"; NR = "3445560/3/559/7"
code:
type: string
description: accommodation offer id (NR)
example: WR = "ad86b620-7085-45da-a8c3-37eb07d8763b"; NR = "EGSH0019"
name:
type: string
description: Accommodation name
example: TUI BLUE Nastro Azzurro
holidayStartDate:
type: string
format: date
description: start date of the holiday offer
example: '2025-07-15'
holidayEndDate:
type: string
format: date
description: end date of the holiday offer
example: '2025-07-25'
lowDeposit:
type: boolean
default: false
description: is the low deposit information is available in offer. applicable only in NR
example: true
packageId:
type: string
deprecated: true
description: id for the particular package for this unit - required only for NR | generation details https://confluence.tuigroup.com/pages/viewpage.action?spaceKey=ENGDO&title=Package+id+generation+logic
example: 953925X810289616778016000001677801600000EZY238316784064000001678406400000EZY2384U00634421302486/3/426/7
prices:
type: array
minItems: 1
description: prices information for the offer
items:
$ref: '#/components/schemas/PackagePrice'
accommodations:
type: array
description: accommodations included in the offer
items:
$ref: '#/components/schemas/AccommodationOfferResponse'
flight:
type: array
items:
$ref: '#/components/schemas/PackageOfferFlight'
transfers:
type: array
description: transfers information of the offer
items:
$ref: '#/components/schemas/TransferResponse'
luggage:
type: array
items:
$ref: '#/components/schemas/LuggageResponse'
freeCancellation:
$ref: '#/components/schemas/CancellationResponse'
SearchRequestDateRange:
required:
- from
- to
type: object
properties:
from:
type: string
example: '2026-11-01'
description: start date from
to:
type: string
example: '2026-11-11'
description: start date to(till)
FilterOption:
type: object
x-field-extra-annotation:
- '@Valid'
required:
- code
- selected
properties:
code:
type: string
description: Code of the filter option, for CARRIER filter type it could be - TOM for BOARDBASIS filter type it could be - AI etc
example: G-000000703
count:
type: integer
format: int32
minimum: 0
default: 0
description: Number of hotel offers with this filter option
example: 15
available:
type: boolean
example: true
description: Defines availability of the option, required for the filter retention, when for example certain options no longer part of the response from NGS, that it should be false
selected:
x-field-extra-annotation:
- '@NotNull'
type:
- boolean
- 'null'
description: Defines what option is selected or not, selection value should be retained, selected values should be sent to the NGS as a filter criteria
example: true
value:
type: string
description: localised name of the filter option
example: Balearic Islands
options:
type: array
x-field-extra-annotation:
- '@Valid'
items:
$ref: '#/components/schemas/FilterOption'
description: hierarchy items
type:
$ref: '#/components/schemas/FilterOptionType'
description:
type: string
description: description of the filter option
example: For the SC code (board basis filter) - Meals aren’t included, but you’ll have catering facilities.
shortDescription:
type: array
items:
$ref: '#/components/schemas/ListOfferShortDescription'
Currency:
type: object
description: currency information
required:
- currencyCode
properties:
currencyCode:
type: string
example: USD
minLength: 3
maxLength: 3
description: 3 letter currency code
PackagePrice:
required:
- value
- level
- category
type: object
properties:
category:
type: string
description: type of the price, for the totalPrice - NET will be type and PER_ITEM - will be level >- totalDiscountPerPerson - DISCOUNT will be type and PER_PAX - will be level
example: DEPOSIT
enum:
- NET
- DISCOUNT
- DEPOSIT
level:
type: string
description: per which item price is configured >- totalDiscountPerPerson - DISCOUNT will be type and PER_PAX - will be level >- totalPrice - NET will be type and PER_ITEM - will be level
example: PER_PAX
enum:
- PER_PAX
- PER_ITEM
value:
$ref: '#/components/schemas/Money'
SellingTarget:
type: string
description: Selling target (channel=B2B or channel=B2C or channel=B2B2C)
enum:
- B2B
- B2C
- B2B2C
Money:
type: object
required:
- amount
- currency
properties:
amount:
type: number
format: double
default: 0
minimum: 0
description: amount of the money
example: 250.15
currency:
$ref: '#/components/schemas/Currency'
AccommodationOfferResponse:
required:
- code
- duration
- overview
type: object
properties:
code:
type: string
description: Accommodation code as defined by accommodation sourcing
example: A0379208 or 029476
duration:
$ref: '#/components/schemas/StayDuration'
rooms:
type: array
minItems: 1
description: Number of rooms associated to the offer
items:
$ref: '#/components/schemas/RoomBoardData'
isExternal:
type: boolean
default: false
description: is the accommodation is sourced from external system
example: true
DirectionType:
type: string
description: type of the direction
example: INBOUND
enum:
- INBOUND
- OUTBOUND
SearchOfferRequest:
required:
- numberOfNights
- dateRange
- alternateDurations
- travellers
- commercialProductType
- sortBy
- metaInformation
type: object
x-field-extra-annotation:
- '@Introspected'
properties:
alternateDurations:
type: array
description: 'Alternative number of nights to find offers for. These should be in order of preference: first we should attempt the first duration, and we only consider duration index i+1 if we cannot find any offers for duration index i. Note that this list WILL include the `preferredNumberOfNights`!'
example:
- 8
- 6
- 7
- 9
- 5
- 10
- 11
maxItems: 8
minItems: 1
items:
type: integer
example: 7
minimum: 1
maximum: 99
description: Number of nights the customer would stay at the hotel.
numberOfNights:
minimum: 1
type: number
format: integer
description: Selected number of nights
from:
type: array
items:
$ref: '#/components/schemas/SearchRequestDeparture'
to:
type: array
items:
$ref: '#/components/schemas/SearchRequestDestination'
dateRange:
$ref: '#/components/schemas/SearchRequestDateRange'
unitAllocations:
type: array
items:
$ref: '#/components/schemas/SearchRequestUnitAllocation'
travellers:
type: array
items:
$ref: '#/components/schemas/Traveller'
x-field-extra-annotation: '@field:Size(min = 1, message = "Travellers is a mandatory field. Must contain at least one item")'
commercialProductType:
$ref: '#/components/schemas/CommercialProductType'
sortBy:
$ref: '#/components/schemas/SearchRequestSortType'
pageSize:
minimum: 1
type: integer
format: int32
description: Number of results per page
pageNumber:
minimum: 1
type: integer
format: int32
description: Number of requested page
metaInformation:
$ref: '#/components/schemas/SearchRequestMetaInformation'
filters:
type: array
x-field-extra-annotation:
- '@Valid'
items:
$ref: '#/components/schemas/Filter'
excludeTypes:
type: array
items:
type: string
description: The holiday type which needs to be excluded from response
example: TOUR
Problem:
type: object
properties:
type:
type: string
system:
type: string
title:
type: string
details:
type: string
PackageOfferFlight:
type: object
required:
- type
- segments
properties:
type:
$ref: '#/components/schemas/DirectionType'
segments:
type: array
minItems: 1
items:
$ref: '#/components/schemas/FlightSegment'
duration:
type: integer
description: Flight duration in minutes
example: 123
CancellationRuleResponse:
type: object
properties:
type:
type: string
description: type of the cancellation rule
example: FREE
amount:
type: number
format: double
description: amount to pay if cancellation rule is not FREE
example: 0
daysAfterBooking:
type: string
description: amount of days after booking to allow free cancellation
example: '15'
daysBeforeDeparture:
type: string
description: applicable days before departure should be met to allow cancellation rule
example: '70'
Medium:
type: string
description: Medium code, WR required
enum:
- TUI_STORE
- MOBILE_AGENT
- THIRD_PARTY_AGENT
- CSC
- CUSTOMER_UI
- OTA
- TUI_PARTNER
- TUI_STAFF
- TUI_BUSINESS
- SHARER
- GDS
- TUI_APP
SourcingCategory:
type: string
description: flight sourcing either contracted or dynamic
example: CONTRACTED
enum:
- CONTRACTED
- DYNAMIC
BoardCode:
type: string
description: 'board type code of the accommodation unit processed for offer
'
example: AI
enum:
- GT06-AO
- GT06-BR
- GT06-HB
- GT06-FB
- GT06-AI
- GT06-HB_ST06-PL
- GT06-FB_ST06-PL
- GT06-AI_ST06-PL
- A24
- AB
- AI
- AI+
- BB
- CB
- FB
- FB+
- HB
- HB+
- IT
- PI
- RO
- SC
- SC+
- SSC
Traveller:
type: object
required:
- id
- age
properties:
id:
minimum: 1
type: number
format: integer
description: passenger id
example: 1
age:
minimum: 0
type: number
format: integer
description: passenger age
example: 30
ValidationProblem:
type: object
properties:
problem:
$ref: '#/components/schemas/Problem'
validationIssues:
type: array
items:
type: string
FilterOptionType:
type: string
enum:
- HOTEL
- COUNTRY
- DESTINATION
- RESORT
- REGION
- CONCEPT
- ITINERARY
- CONTINENT
description: needed for the specifying destination type.
example: COUNTRY
Brand:
type: string
description: Brand code
enum:
- TUI_BE
- TUI_NL
- VIP_BE
- TUI_UK
- TUI_IE
- FIRST_CHOICE
- TUI_SE
- TUI_DK
- TUI_FI
- TUI_NO
SearchRequestDestination:
required:
- code
- type
type: object
properties:
code:
type: string
example: A0418356
description: code of the destination, like country code or accommodation code
type:
$ref: '#/components/schemas/FilterOptionType'
PackageHoliday:
required:
- totalItemsCount
type: object
properties:
totalItemsCount:
type: integer
format: int32
default: 0
description: total number of the results for search criteria
example: 316
offers:
type: array
description: paginated offers response information
items:
$ref: '#/components/schemas/PackageOfferResponse'
UnitAllocationType:
type: string
enum:
- ROOM
- VILLA
CommercialProductType:
type: string
enum:
- SUN_AND_BEACH
- LAKES_AND_MOUNTAINS
- CITY
ListOfferShortDescription:
type: object
properties:
markdown:
type: string
category:
type: string
title:
type: string
Environment:
type: string
description: Environment which is used to get request / response from backend inventory
enum:
- hybdv1
- hybdv2
- hybdv3
- hybdv4
- hybdv5
- hybdv6
- hybdv7
- hybdv8
- hybdv9
- hybdv10
- st3
- st5
- pprd
- prdsup
- dev
- sit
- prod
SourceMarket:
type: string
description: This is the single brand indicator parameter.
example: NL
enum:
- NL
- BE
- FR
- MA
- UK
- IE
- DE
- PL
- CH
- AT
- SE
- 'NO'
- DK
- FI