Airline Booking Links API & URL Parameters
Get direct booking URLs for a specific flight. There are two ways to request booking links.
Looking for easyJet, Eurowings, Vueling, Etihad, Turkish Airlines, Air France, or American Airlines booking URL parameters? Carrier URL formats change frequently, so generate a current link from the exact itinerary instead of building a query string yourself.
Option 1: Using ignav_id
The easiest option is to use the ID. 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.
This works unchanged after a metro search: pass the returned ignav_id, and Ignav uses the concrete airports from that itinerary.
| 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 enter the flight details manually. For exact itinerary matches, prefer ignav_id.
Manual mode describes one specific flight, so its origin and destination must be concrete airport codes rather than metro codes.
A manual lookup may generate an airline-direct URL without checking availability or price. In that case, the itinerary has price.amount: 0, price.status: "unverified", and empty segments. These are placeholders, not a free fare or confirmation that the flight has seats. Confirm availability and the current price with the seller.
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-11-09","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-11-09","outbound_carrier_code":"NH","outbound_flight_number":"5","return_date":"2026-11-23","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-11-09T08:00:00",
"departure_timezone": "America/Los_Angeles",
"departure_time_utc": "2026-11-09T15:00:00Z",
"arrival_airport": "JFK",
"arrival_time_local": "2026-11-09T16:30:00",
"arrival_timezone": "America/New_York",
"arrival_time_utc": "2026-11-09T20: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",
"specificity": "exact_flight",
"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/..."
}
]
}
]
}booking_options is a top-level sibling of itinerary, not a field inside it. The array contains zero or more purchase options and 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, may include provider_type, fare_name and per-offer price, and ends with a url. When available, optional specificity distinguishes "exact_flight" links intended to preselect flights from "search_results" links that open route and date results where the user must choose flights. An omitted value means the selection behavior is unspecified. This field does not confirm availability or price.
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.
When priced offers cover the whole trip, the returned itinerary price uses the cheapest combined offer, or the sum of the cheapest offer for each separately purchased leg. Prices are compared in the itinerary's currency. If complete priced coverage is unavailable, the itinerary retains its search quote; a link without a price does not confirm it. Check the selected seller's price and baggage before purchase.
Airline booking URL parameters
Treat an airline's booking URL as output, not a stable API. The same pattern applies to easyJet and Eurowings URL parameters, Air France or Etihad booking links, and booking URLs for American Airlines, Vueling, or Turkish Airlines. Airline booking pages change, and a route and date alone may not preserve the selected flight, passengers, market, or handoff state.
Prefer ignav_id from a fresh fare search because it preserves the exact itinerary. Without one, send origin, destination, departure_date, outbound_carrier_code, and outbound_flight_number, plus return fields when needed. Each usable URL appears in booking_options[].links[].url; when no usable link is available, booking_options is empty.
These airlines are examples of how the integration works, not a guarantee of coverage. Available booking links vary by itinerary and market, so use the returned booking_options as the source of truth.
Ready to get started?
Create a free account to get your API key, or try the playground — no signup required.