Airline Booking Links API & URL Parameters

Get direct booking URLs for a specific flight. There are two ways to request booking links.

POST/api/fares/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.

ParameterTypeRequiredDescription
ignav_idstringYesThe 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.

ParameterTypeRequiredDescription
originstringYes3-letter IATA departure airport code.
destinationstringYes3-letter IATA arrival airport code.
departure_datestringYesDeparture date in YYYY-MM-DD format.
outbound_carrier_codestringYes2-character airline code for the outbound flight.
outbound_flight_numberstringYesFlight number for the outbound flight.
return_datestringNoReturn date in YYYY-MM-DD format.
inbound_carrier_codestringNo2-character airline code for the return flight. Required when return_date is set.
inbound_flight_numberstringNoFlight number for the return flight. Required when return_date is set.
adultsintegerNoNumber of adult passengers. Default: 1. Max total passengers: 9.
childrenintegerNoNumber of child passengers. Default: 0.
infants_in_seatintegerNoNumber of infants with their own seat. Default: 0.
infants_on_lapintegerNoNumber of lap infants. Cannot exceed adults. Default: 0.
marketstringNo2-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-24","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-24","outbound_carrier_code":"NH","outbound_flight_number":"5","return_date":"2026-10-08","inbound_carrier_code":"NH","inbound_flight_number":"6","adults":2}'

Response

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-24T08:00:00",
          "departure_timezone": "America/Los_Angeles",
          "departure_time_utc": "2026-09-24T15:00:00Z",
          "arrival_airport": "JFK",
          "arrival_time_local": "2026-09-24T16:30:00",
          "arrival_timezone": "America/New_York",
          "arrival_time_utc": "2026-09-24T20: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/..."
        }
      ]
    }
  ]
}

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, 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

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. Carrier flows 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.

Those airline names illustrate the integration pattern, not guaranteed 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.