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/webjet-search-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 form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Webjet Search API
x-logo:
url: https://s3.amazonaws.com/tn-api-docs/trip_ninja_logo.png
altText: Trip Ninja logo
href: https://www.tripninja.io/
version: '1.0'
description: 'Operations tagged Search across 3 of this provider''s published API definitions: webjet-tripninja-flights-core-openapi.yml, webjet-tripninja-hotels-openapi.yml, webjet-tripninja-v2-booking-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://preprodapi.tripninja.io
description: Pre-Production server
tags:
- name: Search
paths:
/search/flights/{endpoint}/:
post:
parameters:
- in: path
name: endpoint
required: true
schema:
type: string
enum:
- preprod
- prod
description: Parameter toggles Data Source production and pre-production endpoints
summary: Flight Search
description: "This endpoint triggers FareStructure for any number of city search\n\nPlease note that the \"total_cost\" field and \"price\" fields in the response do not contain the markup amount. The \"total_cost\" field is only to display the cheapest trip in the results.\nThe \"price\" fields displayed at the itinerary or segment level do not include the markup amount either. When displaying the trip costs using \"include_itineraries\" = true, use the\n\"price\" at the itinerary level plus the \"tn_net_fare_markup\" amount. If using the segment response type, add the \"price\" value for each of the segments chosen for the trip plus the \"tn_net_fare_markup\"\namount to get the total trip price.\n\nAdditionally, two optional parameters alter the structure of the response. include_itineraries\n and route_flexible both change the structure when passed as true. See the fields description for \n details and examples have been provided in the Response Samples section. \n"
operationId: FlightSearch
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FlightSearchRequest'
responses:
200:
description: Success
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/SegmentFSSearchResponse'
- $ref: '#/components/schemas/SegmentFSSearchResponseWithFlexTrip'
- $ref: '#/components/schemas/ItineraryFSSearchResponse'
- $ref: '#/components/schemas/ItineraryFsSerachResposneWithFlexTrip'
400:
description: Invalid Input
content:
application/json:
schema:
type: object
properties:
status:
type: sting
description: Error code and 0 for success response
example: IE23
message:
type: string
description: Contains the error message
example: Not a valid alliance. Expected one of *A, *S, *O
401:
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
status:
type: sting
description: Error code and 0 for success response
example: IE44
message:
type: string
description: Contains the error message
example: User is not authorized
206:
description: Partial Content (Flight not found)
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: Error code and 0 for success response
example: IE23
message:
type: string
description: Contains the error message
example: 'Flight(s) not found: Could not find all the flights required to make up this trip. Try changing dates, IATA codes, cabin class, etc.'
search_criteria:
type: string
description: Contains the routes that failed to produce flights.
example: '[YYZ,YQS]'
500:
description: Server Error
tags:
- Search
servers:
- url: https://preprodapi.tripninja.io
description: Pre-Production server
/search/hotels/{endpoint}:
post:
parameters:
- in: path
name: endpoint
required: true
schema:
type: string
enum:
- preprod
- prod
description: Parameter toggles data source production and pre-production endpoints
summary: Hotel Search
description: 'This endpoint initiates a hotel search for one location (city), and returns a list of available options. A separate endpoint needs to be called to obtain information about room types, etc.
'
operationId: Search
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/HotelSearchRequest'
responses:
200:
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/HotelSearchResponse'
400:
description: Invalid Input
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: Error code and 0 for success response
example: IE23
message:
type: string
description: Contains the error message
example: Not a valid city.
401:
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: Error code and 0 for success response
example: IE44
message:
type: string
description: Contains the error message
example: User is not authorized
206:
description: Partial Content (no Hotel found)
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: Error code and 0 for success response
example: IE23
message:
type: string
description: Contains the error message
example: 'No availability found: Try changing dates'
500:
description: Server Error
tags:
- Search
servers:
- url: https://preprodapi.tripninja.io
description: Pre-Production server
/search/flight/{endpoint}/flight/:
post:
parameters:
- in: path
name: endpoint
required: true
schema:
type: string
enum:
- preprod
- prod
description: Parameter toggles Data Source production and pre-production endpoints
summary: Search
description: 'This endpoint triggers farestrucutre for any number of city search
'
operationId: Search
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FlightSearchRequest_2'
responses:
200:
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/FlightSearchResponse'
400:
description: Invalid Input
content:
application/json:
schema:
type: object
properties:
status:
type: sting
description: Error code and 0 for success response
example: IE23
message:
type: string
description: Contains the error message
example: Not a valid alliance. Expected one of *A, *S, *O
401:
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
status:
type: sting
description: Error code and 0 for success response
example: IE44
message:
type: string
description: Contains the error message
example: User is not authorized
206:
description: Partial Content (Flight not found)
content:
application/json:
schema:
type: object
properties:
status:
type: sting
description: Error code and 0 for success response
example: IE23
message:
type: string
description: Contains the error message
example: 'Flight(s) not found: Could not find all the flights required to make up this trip. Try changing dates, IATA codes, cabin class, etc.'
500:
description: Server Error
tags:
- Search
servers:
- url: https://preprodapi.tripninja.io
description: Pre-Production server
components:
schemas:
SegmentFSSearchResponse:
title: include_itineraries = false and route_flexible = false
type: object
properties:
fare_structure:
$ref: '#/components/schemas/SegmentSearchResponse'
BasicSegmentInfo:
type: object
properties:
segment_id:
type: string
description: String if one-way, Array of 2 Strings if open-jaw. Used for booking.
example: 344d73be0d61f820aa9a6ace300742fed0672f2e
segment_source:
type: string
description: Data source that returned the segment.
example: travelport
segment_origin_full:
type: string
description: Origin of the segment.
example: London, United Kingdom (LHR)
segment_destination_full:
type: string
description: Destination of the segment.
example: Berlin, Germany (TXL)
travel_mode:
type: string
description: Mode of travel (air, ground, etc.)
example: air
weight:
type: string
description: Weight of the segment (time-value considered).
example: 96
price:
type: float
description: Price of the segment (fare and tax included)
example: 72.3
cancel_penalty:
type: object
description: Information about cancellation
properties:
amount:
type: float
description: Cancellation penalty amount (Optional)
example: 0
percentage:
type: float
description: Cancellation penalty percentage (Optional)
example: 100
change_penalty:
type: object
description: Information about changing.
properties:
amount:
type: float
description: Change penalty amount (Optional)
example: 78
percentage:
type: float
description: Change penalty percentage (Optional)
example: 0
flight_type:
type: string
description: “open_jaw” or “one_way”
example: open_jaw
brands:
type: string
description: Brands returned
example: null
price_breakdown_with_passenger_type_code:
$ref: '#/components/schemas/PriceBreakdownWithPassengerTypeCode'
legs:
$ref: '#/components/schemas/LegDetails'
baggage:
type: object
description: Contains baggage information.
properties:
number_of_pieces:
type: integer
description: Number of bags allowed.
example: 0
fare_basis_code:
type: string
description: Fare Basis Code for the segment.
example: QUSDSI0E
fare_rule_key:
type: string
description: Fare rule key for the segment
example: gws-eJxNjs0KwyAQhB8mzH02QdLeFPNzEaGYEnLp+z9GR02hC7qz+w2j3vuR9uRjov+vAZ\/hLMjvCGSMOmk\/4WQjTNMFkoZX4cI1FdwhFeWGe7dmjC5Oati4WUe1cLU77UGsJ7fM+jSq1AI\/EQ7JHJZjjTS5ZnO8EWfop1+XbyuD
fare_info_ref:
type: string
description: Fare Info reference for this segment
example: 3RxQ6ylJ0BKAhQAbnbAAAA==
private_fare:
type: boolean
description: True if segment is a private fare, otherwise False *Travelport customers only*
example: false
private_type:
type: string
description: Private type
example: null
plating_carrier:
type: string
description: Plating carrier of segment
example: AC
intermediate_stops:
type: string
description: Intermediate stops in the segment
example: null
itinerary_type:
type: string
description: Type of itinerary
example: ONE_WAY
segment_position:
type: number
description: Position of segment in response
example: 0
virtual_interline:
type: boolean
description: 'true if option is a vi solution
'
example: true
vi_solution_id:
type:
- string
- 'null'
description: "ID mapping VI parts of the option together. Helps finding VI solutions located in same segment position. \nWill be composed of each segment's segment_id joined together with two underscores. For oneway VI this \nwill be two segments, for openjaw VI will be 4 segments. \n"
example: fc906f39e5151f1bc5ef788b85f3d280770b5b7c__b9ebd56ff7bf07a65a3e4dc70e9551e4ae50f1da
risk_profile:
type:
- float
- 'null'
description: The probability of missing the connection and not performing the self-transfer during the VI self-connection (only returned if you have our average delay time module enabled, and only for VI segments with a self transfer)
example: 8.42
cancellation_probability:
type:
- float
- 'null'
description: The probability percentage that this flight will be cancelled (only returned if you have our average delay time module enabled, and only for VI segments with a self transfer)
example: 7.86
average_delay_time:
type:
- string
- 'null'
description: The average delay time of this flight in minutes. A negative value indicates an average early arrival time. (only returned if you have our average delay time module enabled, and only for VI segments with a self transfer)
example: -5
self_transfer_time:
type:
- string
- 'null'
description: The self transfer time in minutes between this flights arrival time and the next segments departure time. (only returned if you have our average delay time module enabled, and only for VI segments with a self transfer)
example: 134
is_international:
type:
- boolean
- 'null'
description: Indicates whether this flight is international. (only returned if you have our average delay time module enabled, and only for VI segments with a self transfer)
example: true
itinerary_index:
type:
- int
- 'null'
description: 'Position of the virtual interlining option in itinerary(PNR). Starts from 0
'
example: 0
vi_position:
type:
- integer
- 'null'
description: "Position of the virtual interlining option in the VI itinerary. Starts from 0. For OneWay VI will be either of [0, 1]. \nFor OpenJaw VI will be one of [0, 1, 2, 3]\n"
example: 1
itinerary_structure:
type: String
description: "String Array representing the structure of the trip in terms of one-ways and open-jaw segments. \nFor example: [[0, 1], [3, 4], 2] means there would be three segments. One openjaw with key “01”, \none with key “34” and a one-way with key “2”.\nSee Price Confirm Report segment_ids field for more detail.\n"
example: '[[0, 1], 2]'
vi_pattern:
type: String
description: 'OpenJaw VI only: String Array representing the structue of the OpenJaw VI solution that was found.'
example: '[[0, 3], 1, 2]'
vi_segment_base_price:
type:
- float
- 'null'
description: The base price of the VI PNR not including taxes and fees.
example: 106.4
vi_segment_taxes:
type:
- float
- 'null'
description: The taxes associated with this VI PNR.
example: 24.12
vi_segment_fees:
type:
- float
- 'null'
description: The fees associated with this individual VI PNR.
example: 14.56
SegmentFSSearchResponseWithFlexTrip:
title: include_itineraries = false and route_flexible = true
type: object
properties:
fare_structure:
$ref: '#/components/schemas/SegmentFSSearchResponse'
flex_trip:
$ref: '#/components/schemas/SegmentFlexTripSearchResponse'
ItineraryFsSerachResposneWithFlexTrip:
title: include_itineraries = true and route_flexible = true
type: object
properties:
fare_structure:
$ref: '#/components/schemas/ItineraryFSSearchResponse'
flex_trip:
$ref: '#/components/schemas/ItineraryFlexTripSearchResponse'
ItineraryInfo:
allOf:
- $ref: '#/components/schemas/BasicItineraryInfo'
- type: object
properties:
segments:
type: array
description: List of segments in the itinerary
items:
$ref: '#/components/schemas/SegmentInfo'
SegmentInfo:
allOf:
- $ref: '#/components/schemas/BasicSegmentInfo'
- type: object
properties:
segment_source:
type: string
description: GDS or LCC provider source for segment. Only shown with ‘include_lcc’ request parameter enabled.
example: travelport
CredentialInfo:
type: object
description: Indicate data source to call and required credentials
properties:
data_source:
description: data source to call.
required: true
type: string
enum:
- amadeus
- travelport
- tripstack
- mystifly
example: amadeus
pcc:
description: PCC/OfficeID to emulate transactions under. Must have emulation enabled for the relevant Service Bureau PCC used by Trip Ninja to conduct queries. Please contact Trip Ninja to get this set up.
required: true
type: string
example: MEL49f839
provider:
description: Fare provider to use.<br />“1V” - Apollo, “1G” - Galileo, “1P” - Worldspan, “1A” - Amadeus
required: true
type: string
example: 1A
region:
description: Parameter toggles which travelport regional service endpoint you hit *Travelport Only*
required: false
type: string
enum:
- emea
- apac
- americas
- edge
default: americas
example: americas
pcc_currency:
description: Indicates the currency that the PCC is charged in.
required: false
type: string
example: CAD
conversion_rate:
description: The conversion rate that was used to convert from the pcc_currency to the searched currency. In order to convery back to the pcc currency simply use price * (1 / conversion_rate).
required: true
type: float
example: 0.78
PriceBreakdownWithPassengerTypeCode:
type: array
description: Displays the pricing for each passenger type
items:
type: object
properties:
passenger_type_code:
type: string
example: ADT
base_price:
type: float
example: 73.0
total_price:
type: float
example: 132.39
taxes:
type: float
example: 59.39
tax_breakdown:
type: array
description: Breakdown of taxes amount into their categories
items:
type: object
properties:
category:
type: string
description: Category
example: CA
amount:
type: float
description: Amount of tax
example: 7.12
ItinerarySearchResponse:
title: Search Response
type: object
properties:
path_sequence:
type: array
description: An array of IATA codes representing the chronological order of your trip.
example:
- LON-CDG
- CDG-YUL
- YUL-LON
currency:
type: string
description: Currency
example: CAD
itineraries:
$ref: '#/components/schemas/FSSearchItineraries'
ErrorDetails:
$ref: '#/components/schemas/ErrorDetails'
trip_id:
type: string
example: a2cf0bdf2ecca12f8dbbc139af58c99a561f21a1
description: A unique key used for identification and when booking a trip.
tn_net_fare_markup:
type: float
description: Markup specified by the Trip Ninja Net Fare to be applied at the itinerary level.
example: 25.0
FlightSearchRequest:
title: Request
type: object
required:
- flights
- travellers
- credentials
- currency
- country_code
properties:
flights:
description: Array of flight legs input. A minimum of 3 legs (2 destinations) is required. The final destination may be different than the initial starting point.
required: true
type: array
items:
type: object
required:
- id
- from_city
- start_type
- to_city
- end_type
- departure_date
properties:
id:
type: integer
description: Flight leg ID
example: 1
from_city:
type: string
description: Start city/airport IATA code of leg.
example: YHZ
start_type:
type: string
description: Upper-case letter “C” for city or “A” for airport
example: C
to_city:
type: string
description: End city/airport IATA code of leg.
example: LON
end_type:
type: string
description: Upper-case letter “C” for city or “A” for airport
example: C
departure_date:
type: string
description: 'Departure date for this leg, format: YYYY-MM-DD. Any trailing characters after do not affect the API’s functionality.'
example: '2019-06-20'
cabin_class:
type: string
description: A unique cabin class can be set for each segment of the trip, otherwise it can be set at the root level.
example: BC
required: false
travellers:
description: Array of passenger types, values include ‘ADT’, ’MIL’, ’CHD’ and ‘INF’
required: true
type: array
example:
- ADT
- ADT
- CHD
credentials:
type: array
description: list of credentials to use for search
items:
$ref: '#/components/schemas/CredentialInfo'
max_cache:
default: 24
description: "Hours to retain data queried from provider to be cached for use in future requests.\nHigher values result in:<br />\n 1) faster queries as more data is available for re-use<br />\n 2) lower look-to-book ratios from the GDS perspective which may lower costs<br />\n 3) less accurate pricing data which may cause issues in AirPriceReq when ticketing.<br />\nMinimum value is 0.04 hours, maximum value is 720 hours.\nPlease discuss with your Trip Ninja Account Manager if you need\naccess to caching outside these limits.\n"
required: false
type: integer
currency:
description: Currency to be used for provider query requests in three digit code.
example: USD
required: true
type: string
source:
description: 'Metasearch source (For example: skycanner, kayak)'
example: skyscanner
type: string
required: true
country_code:
description: 'Country code where search came from (For example: CA, US)'
example: CA
type: string
required: true
cabin_class:
default: E
description: Parameter toggles the permitted cabin class for your query. Alternatively, it can be set for each segment.
example: E
required: false
type: string
time_value:
default: 0
description: 'This parameter helps set the value of a passenger’s time, in
terms of the currency selected. It is used to trade off flight
prices versus flight durations. The parameter is in units of
[currency]/hour. Flight durations are calculated as the difference
in minutes from the arrival time of the last flight in a leg to
the departure time of the first flight in the leg.
True Cost of Flight = [Flight Price] * [time_value/60] * [Flight Duration]
The itinerary which provides the lowest True Cost of Flight is
what is returned in the response. If you provide a time_value
of 0 or do not provide the parameter, it will sort by price.
'
required: false
type: integer
alliance:
description: Parameter toggles the preferred alliance for your query. If there are results containing flights from the given alliance, only flights from that alliance will be returned. Otherwise it will return flights from any alliance. *Travelport Only*
required: false
type: string
example: '*A'
schema:
default: 40
description: Toggles which Travelport schema version to use. *Travelport Only*
required: false
type: integer
exclude_carriers:
description: Parameter toggles a list of carriers to exclude from the query results. This option can not be applied together with the alliance option. They are mutually exclusive.
required: false
type: array
example: []
items:
type: string
permitted_carriers:
description: Toggles permitted carriers in GDS request
required: false
type: array
example:
- AC
no_overnight_layovers:
description: Toggles whether to return results with no overnight layovers *Travelport Only*
type: boolean
default: false
stops:
description: Toggles number of stop for GDS request *Travelport Only*
default: any
type: string
enum:
- any
- direct
- '1'
- '2'
baggage:
description: Toggles minimum number of bags included with flights for GDS request *Travelport Only*
default: any
type: string
enum:
- any
- '1'
- '2'
refundable:
description: Parameter toggles query to only return fully refundable flights. *Travelport Only*
default: false
type: boolean
num_results:
description: Parameter sets the number of segments in the response *Travelport Only*
default: 50
type: integer
minimum: 50
maximum: 5000
include_lcc:
description: Enable a hybrid search of both GDS and low cost carrier content. This requires prior setup with Trip Ninja and an agreement with an LCC provider.
default: []
required: false
type: array
example:
- tripstack
items:
type: string
include_itineraries:
description: Enables itineraries to be constructed and returned from segments found for the requested trip. Changes the response structure, see examples for details.
default: false
type: boolean
should_compress_itinerary:
description: "Return only a segment_id, segment_source, price, weight for a segment inside an Itineraries object. A segment_details list will now be returned with the full segment details, \nthe segment_id should be used to map a segment to the full details. Only works with include_itineraries also passed as true. Significantly reduces response size.\nIf virtual_interlining is passed as true, only segment_id, segment_souce and price are returned. Additionally for successfully virtually_interlined options a \nvi_position field is returned. This is the segments position in the virtually interlined itinerary. \n"
default: false
type: boolean
mix_structures:
description: Return mix of results with the best multi-pnr structure and single-pnr structure.
default: false
type: boolean
single_pnr:
description: Return single-pnr structures in addition to the results returned. If there are too many results, it will be truncated to num_results.
default: false
type: boolean
multi_pnr_mix:
description: Return mix of single-pnr and all multi-pnr structures. include_itineraries and mix_structures needs to be passed as True for this to work
default: false
type: boolean
virtual_interlining:
description: Add virtual interlining to the search so that the results are a mix of standard search results and virtual interlining results.
default: false
type: boolean
markup_by_itinerary:
description: Add itinerary markup to the search result and set trip markup to 0
default: false
type: boolean
route_flexible:
description: 'Activates FlexTrip for this search. FlexTrip allows users to express their trip parameters without having to pre-specify a route, they simply state the number of nights in each destination, any destinations that must be visited first or last, and search for the best route.
With route_flexible enabled the normal farestructure response is returned and an additional flex_trip object is returned. The flex_trip object is structurally the same as a normal fare_structure object, however the content will be the best alternative route found. Sample responses can be found in the Response Samples section.
Requires a 3+ flight search.'
default: false
type: boolean
ErrorDetails:
description: When an error occurs, there will be a list of error codes detailing the issue(s). For more inf
# --- truncated at 32 KB (81 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/webjet/refs/heads/main/openapi/webjet-search-api-openapi.yml