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-pre-booking-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:
version: 4.15.0
title: Trip Ninja API Documentation Pre Booking API
description: "<h2>Introduction</h2>\nTrip Ninja uses a REST API with requests and responses in JSON format. For development and testing, the pre-production servers\nare to be used. Once ready for live use, access to the production servers will be provided. All search endpoints have both production\nand pre-production endpoints - these correspond to the GDS’s production and pre-production services, and can be used as desired.<br />\n<h2>Trip Ninja API URLs</h2>\n\nPre-Production: https://preprodapi.tripninja.io\n\nFor security, Trip Ninja’s servers are only accessible from whitelisted IPs. Please contact your account manager to whitelist IPs you\nwill be using.\n\nBefore you start ensure that:<br />\n - IP addresses have been provided to be whitelisted for our servers.<br />\n - PCC / OfficeID emulation via Trip Ninja’s PCC/OfficeID has been set up.<br />\n - API username and password have been provided by Trip Ninja.<br />\n\n<h2>FareStructure</h2>\nThe FareStructure product returns the set of best GDS responses that create the specified route. It finds the best fare structure via\nsplit ticketing and does not reorder the destinations. Each of the returned segments must be ticketed in its own PNR. <br><br>The “structure” seen in the\nFareStructure response determines how you will carry out price confirmation as well as PNR creation. We start counting flights at 0. \nFor example if structure is [[0, 2] , 1], this implies flight 0 and flight 2 are to be priced/ticketed together as one openjaw.\nFlight 1 should be priced as a oneway. [1, 2, 3] would be 3 separate oneways to be priced/ticketed individually.\n[[0, 1], [2, 3]] would be two openjaws, flight 0 and flight 1 priced/ticketed together as one openjaw and flights\n2 and 3 ticketed together as one openjaw.\n\n<h2>Workflow</h2>\nThe following diagram shows the typical data flow of API calls to Trip Ninja for a FareStructure integration with both a partner website\nand metasearch as sources.\n\n\n\nNote: the following three endpoints (Price Confirmation, PNR Creation, Ticket Issuance) are simply to report to us that you have done these API calls to your GDS.\nPrice Confirmation, PNR creation, and Ticket Issuance should follow your existing process (as per the following diagram).\n\n\n\n<h2>Authentication</h2>\nTrip Ninja uses Basic Authentication standards. Simply encode your username and password string using base64 and pass it in the\nauthorization headers. See the python example below on how this is done. In the example, the payload and API endpoint url are not\nshown.\n\nPython Example:\n\n<pre>\nimport base64\nauth = base64.b64encode(\"USERNAME:PASSWORD\")\nheaders = {\n 'authorization': \"Basic \"+ auth,\n}\nresponse = requests.post(url, headers=headers, data=json.dumps(payload))\n</pre>\n\n# Error Codes\n<table>\n <tr><td>IE01</td><td>Need minimum 2 destinations</td></tr>\n <tr><td>IE02</td><td>Duplicate city in list</td></tr>\n <tr><td>IE09</td><td>Can't run any queries for flight dates in the past</td></tr>\n <tr><td>IE10</td><td>Incorrect city_type, expected one of ['C', 'A']</td></tr>\n <tr><td>IE16</td><td>Please provide a PCC</td></tr>\n <tr><td>IE17</td><td>Invalid carrier</td></tr>\n <tr><td>IE19</td><td>Incorrect region, expected one of 'emea', 'apac', 'americas', 'edge'</td></tr>\n <tr><td>IE20</td><td>Incorrect provider, expected one of '1V','1G','1P','1A'</td></tr>\n <tr><td>IE21</td><td>Wrong currency</td></tr>\n <tr><td>IE22</td><td>Not a valid cabin option. expected one of 'E' , 'PE', 'SE', 'BC','FC', 'PFC'</td></tr>\n <tr><td>IE23</td><td>Not a valid alliance. Expected one of *A, *S, *O</td></tr>\n <tr><td>IE24</td><td>Travellers Type does not meet expected criteria. Should be a list having between 0 and 10 values</td></tr>\n <tr><td>IE26</td><td>Exclude_carriers, alliance and permitted_carriers are mutually exclusive - please choose one</td></tr>\n <tr><td>IE27</td><td>Num_results should be an integer between 50 and 5000</td></tr>\n <tr><td>IE28</td><td>Refundable parameter must be boolean value true or false</td></tr>\n <tr><td>IE29</td><td>Invalid Traveller type</td></tr>\n <tr><td>IE30</td><td>Incorrect value for single_pnr, must be boolean</td></tr>\n <tr><td>IE31</td><td>LCC token not associated with user</td></tr>\n <tr><td>IE32</td><td>Incorrect value for include_itineraries, must be boolean</td></tr>\n <tr><td>IE33</td><td>Stops must be one of 'any', 'direct', '1', '2'</td></tr>\n <tr><td>IE34</td><td>Incorrect value for no_overnight_layovers, must be boolean</td></tr>\n <tr><td>IE36</td><td>Invalid LCC name</td></tr>\n<table>\n"
x-logo:
url: https://s3.amazonaws.com/tn-api-docs/trip_ninja_logo.png
altText: Trip Ninja logo
href: https://www.tripninja.io/
servers:
- url: https://preprodapi.tripninja.io
description: Pre-Production server
tags:
- name: Pre Booking
paths:
/pre-booking/:
post:
summary: Price Confirmation Report
description: When performing an availability or price confirmation request - when a user has selected their flights or is arriving on the site from metasearch - please send a request to the following endpoint. This provides valuable data to our revenue management system in determining markups for trips.
operationId: PriceConfirmationReport
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PriceConfirmationReportRequest'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
status:
type: string
example: success
400:
description: Invalid Input
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: States whether request to book was successful.
example: Not booked
tags:
- Pre Booking
components:
schemas:
PriceConfirmationReportRequest:
title: Request
type: object
required: trip_id segment_ids
properties:
trip_id:
type: string
description: Trip ID returned in search response
example: 6be6e72c60102bd489ac46434d4ac6c11e047ee8
segment_ids:
$ref: '#/components/schemas/segment_ids'
is_retry:
type: boolean
description: Optional parameter that allows pre-booking for trips that have expired from our cache.
default: false
example: false
segment_ids:
type: Array of strings and/or Array of arrays
description: "Array of segment_id's for the booked segments - These will be strings for one-ways, arrays of strings for open-jaws and joined strings for VI flights.\n\nFor the booking of oneway virtually interlined tickets there will be two segment_id's. For example segment_id_0_1 and segment_id_0_2. \nWhen being booked the segment_id's should be joined together by two underscores **segment_id_0_1__segment_id_0_2** and the resulting string should be sent in the position of the original search.\n\ne.g. `18fd1992fd90e6e2cf44d49308a1482b2ecd7f67__59e15240be759a023c950e66379dca775fd8aaf1`\n\nThis is the example structure but should be generalized for all combinations as Trip Ninja's technology handles more than just 3-segment trips.\n1) structure: [0, 1]\n - `segment_ids: [\"segment_id_0\", \"segment_id_1\"]`\n2) structure: [(0, 1)]\n - `segment_ids: [[\"segment_id_0\", \"segment_id_1\"]]`\n3) VI structure: [0, 1.1, 1.2]\n - `segment_ids: [[\"segment_id_0\", \"segment_id_1_1__segment_id_1_2\"]]`\n4) structure: [0, 1, 2]\n - `segment_ids: [\"segment_id_0\", \"segment_id_1\", \"segment_id_2\"]`\n5) structure: [(0, 1), 2]\n - `segment_ids: [[\"segment_id_0\", \"segment_id_1\"], \"segment_id_2\"]`\n6) structure: [(0, 2), 1]\n - `segment_ids: [[\"segment_id_0\", \"segment_id_2\"], \"segment_id_1\"]`\n7) structure: [0, (1, 2)]\n - `segment_ids: [\"segment_id_0\", [\"segment_id_1\", \"segment_id_2\"]]`\n8) structure: [0.1, 0.2, (1, 2), 3.1. 3.2]\n - `segment_ids: [\"segment_id_0_1__segment_id_0_2\", [\"segment_id_1\", \"segment_id_2\"]], \"segment_id_3_1__segment_id_3_2]\"`\n"
example:
- 18fd1992fd90e6e2cf44d49308a1482b2ecd7f67
- 59e15240be759a023c950e66379dca775fd8aaf1