Flight Booking Links API
Get direct booking URLs for a specific flight. There are two ways to request booking links.
Option 1: Using ignav_id
The easiest way. Every itinerary from a fare search includes an ignav_id. Pass it to get booking links for that exact itinerary using the same Ignav account that ran the search.
| Parameter | Type | Required | Description |
|---|---|---|---|
| ignav_id | string | Yes | The ignav_id from a previous fare search. |
curl -X POST "https://ignav.com/api/fares/booking-links" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ignav_id":"5e4fcd2f1dc340649eb19f6ee2afb57a"}'Option 2: Manual flight details
If you don't have an ignav_id, you can specify the flight details manually. For exact itinerary matches, prefer ignav_id.
Passenger mix uses the same fields as fare search: adults, children, infants_in_seat, and infants_on_lap.
| Parameter | Type | Required | Description |
|---|---|---|---|
| origin | string | Yes | 3-letter IATA departure airport code. |
| destination | string | Yes | 3-letter IATA arrival airport code. |
| departure_date | string | Yes | Departure date in YYYY-MM-DD format. |
| outbound_carrier_code | string | Yes | 2-character airline code for the outbound flight. |
| outbound_flight_number | string | Yes | Flight number for the outbound flight. |
| return_date | string | No | Return date in YYYY-MM-DD format. |
| inbound_carrier_code | string | No | 2-character airline code for the return flight. Required when return_date is set. |
| inbound_flight_number | string | No | Flight number for the return flight. Required when return_date is set. |
| adults | integer | No | Number of adult passengers. Default: 1. Max total passengers: 9. |
| children | integer | No | Number of child passengers. Default: 0. |
| infants_in_seat | integer | No | Number of infants with their own seat. Default: 0. |
| infants_on_lap | integer | No | Number of lap infants. Cannot exceed adults. Default: 0. |
| market | string | No | 2-letter country code. Default: "US". |
curl -X POST "https://ignav.com/api/fares/booking-links" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"origin":"SFO","destination":"JFK","departure_date":"2026-09-11","outbound_carrier_code":"AA","outbound_flight_number":"100"}'Round-trip booking with return flight
Include return_date, inbound_carrier_code, and inbound_flight_number for round-trip bookings:
curl -X POST "https://ignav.com/api/fares/booking-links" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"origin":"LAX","destination":"NRT","departure_date":"2026-09-11","outbound_carrier_code":"NH","outbound_flight_number":"5","return_date":"2026-09-25","inbound_carrier_code":"NH","inbound_flight_number":"6","adults":2}'Response
{
"itinerary": {
"price": {
"amount": 488,
"currency": "USD",
"status": "verified"
},
"outbound": {
"carrier": "American Airlines",
"duration_minutes": 330,
"segments": [
{
"marketing_carrier_code": "AA",
"flight_number": "100",
"operating_carrier_name": "American Airlines",
"departure_airport": "SFO",
"departure_time_local": "2026-09-11T08:00:00",
"departure_timezone": "America/Los_Angeles",
"departure_time_utc": "2026-09-11T15:00:00Z",
"arrival_airport": "JFK",
"arrival_time_local": "2026-09-11T16:30:00",
"arrival_timezone": "America/New_York",
"arrival_time_utc": "2026-09-11T20:30:00Z",
"duration_minutes": 330,
"aircraft": "Boeing 777"
}
]
},
"cabin_class": "economy",
"requires_self_transfer": false
},
"booking_options": [
{
"legs": [
"outbound"
],
"links": [
{
"provider_name": "American Airlines",
"provider_type": "airline",
"fare_name": "Main Cabin",
"price": {
"amount": 488,
"currency": "USD",
"status": "verified"
},
"url": "aa.com/booking/..."
},
{
"provider_name": "Expedia",
"provider_type": "third_party",
"price": {
"amount": 502,
"currency": "USD",
"status": "verified"
},
"url": "expedia.com/flights/..."
}
]
}
]
}The booking_options array contains zero or more purchase options. It is empty when no usable booking links are available. Fare-search responses describe flights and airlines; sellers and OTAs appear here only when a usable link is available for the selected itinerary and market. For one-way and round-trip searches, each option has a legs array and a links array. Each link includes a provider_name, provider_type, may include fare_name and per-offer price, and ends with a url.
One-way results usually return a single option with legs: ["outbound"]. Round trips return either one option with both legs, or separate outbound and inbound options when only leg-level booking is available.
An ignav_id from flexible search returns the itinerary with an ordered legs array. Its booking options use zero-based leg_indexes; an option covering every index is one combined booking, while individual indexes identify separately bookable legs. Open-jaw and multi-city airline-direct coverage may therefore require one one-way purchase per leg, and is returned only when every leg is covered.
Use the itinerary returned by this endpoint as the current version. A stale flexible-search handoff may be refreshed before links are resolved, so its price can differ from the earlier search response.
Airline booking URL parameters
If your integration needs booking URLs for carriers such as Eurowings, easyJet, Air France, or Etihad, avoid hard-coding a carrier-specific query string. Origin, destination, outbound date, and return date are not enough for every booking flow: links can also depend on flight numbers, passenger details, market, or handoff state.
Use the manual flight details request as the stable interface. Send origin, destination, departure_date, outbound_carrier_code, and outbound_flight_number, plus the optional return fields for a round trip. Each usable URL appears in booking_options[].links[].url; when no usable link is available, booking_options is empty.
Ready to get started?
Create a free account to get your API key, or try the playground — no signup required.