Flight API Response Format

Fare search responses use the same structures for prices, legs, segments, baggage, and booking IDs. Their route and itinerary fields vary by endpoint: dedicated searches use outbound/inbound legs, while flexible search uses ordered leg arrays.

Top-level fields

One-way and round-trip responses include top-level route and date fields. Flexible-search responses instead include the normalized legs request. Every response includes an array of matching itineraries:

ParameterTypeRequiredDescription
originstringNoNormalized requested departure airport or metro code for one-way and round-trip responses.
destinationstringNoNormalized requested arrival airport or metro code for one-way and round-trip responses.
departure_datestringNoDeparture date for one-way and round-trip responses.
return_datestringNoReturn date for round-trip responses.
legsarrayNoNormalized requested legs for flexible-search responses.
itinerariesarrayYesList of matching itineraries (may be empty).
observed_atstring | nullYesUTC timestamp when Ignav finished retrieving the search result, or null when unknown. Unchanged on cache hits; not the airline's quote time or a guarantee of current price or availability.
cache_hitbooleanYesTrue when this request reused a cached search result. Cache hits are billed normally.

Itinerary object

Each itinerary represents a complete travel option. Here's a connecting one-way flight with two segments:

Single itinerary
{
  "price": {
    "amount": 542,
    "currency": "USD",
    "status": "verified"
  },
  "outbound": {
    "carrier": "United Airlines",
    "duration_minutes": 475,
    "segments": [
      {
        "marketing_carrier_code": "UA",
        "flight_number": "1234",
        "operating_carrier_name": "United Airlines",
        "departure_airport": "SFO",
        "departure_time_local": "2026-11-15T06:00:00",
        "departure_timezone": "America/Los_Angeles",
        "departure_time_utc": "2026-11-15T13:00:00Z",
        "arrival_airport": "ORD",
        "arrival_time_local": "2026-11-15T12:15:00",
        "arrival_timezone": "America/Chicago",
        "arrival_time_utc": "2026-11-15T17:15:00Z",
        "duration_minutes": 255,
        "aircraft": "Boeing 737 MAX 9"
      },
      {
        "marketing_carrier_code": "UA",
        "flight_number": "5678",
        "operating_carrier_name": "United Airlines",
        "departure_airport": "ORD",
        "departure_time_local": "2026-11-15T13:30:00",
        "departure_timezone": "America/Chicago",
        "departure_time_utc": "2026-11-15T18:30:00Z",
        "arrival_airport": "JFK",
        "arrival_time_local": "2026-11-15T16:55:00",
        "arrival_timezone": "America/New_York",
        "arrival_time_utc": "2026-11-15T20:55:00Z",
        "duration_minutes": 145,
        "aircraft": "Airbus A320"
      }
    ]
  },
  "cabin_class": "economy",
  "requires_self_transfer": false,
  "ignav_id": "a1b2c3d4e5f6789012345678abcdef01"
}

Price

The price object always has an amount (number) and currency (3-letter ISO code), plus status. verified means the price came from a displayed fare or booking-price check. unverified means the amount has not been confirmed. A search-price hint may remain unverified at booking lookup time. Ignav only returns that hint when it is already in the requested market's currency; it is never relabeled or converted.

Manual airline-direct links can instead return an unverified amount of zero and empty segments when no fare or availability check was made. Do not display that placeholder as a fare. A booking URL alone does not confirm availability.

Price status values
{
  "verified_price": {
    "amount": 299,
    "currency": "USD",
    "status": "verified"
  },
  "unverified_price": {
    "amount": 78,
    "currency": "USD",
    "status": "unverified"
  }
}

Legs

One-way and round-trip itineraries include an outbound leg. Round-trip itineraries may also include an inbound leg. Flexible-search itineraries use an ordered legs array instead.

Each leg contains airline display carrier, elapsed duration_minutes, and segments. Carrier names are display strings and may be localized. If you need a stable airline code, use each segment's marketing_carrier_code.

Optional itinerary fields are omitted when unavailable.

ParameterTypeRequiredDescription
carrierstringNoAirline display name for this leg when available.
duration_minutesintegerNoElapsed leg travel time in minutes, including layovers when present.
segmentsarrayYesArray of flight segments for this leg (see below).

Segments

Each leg's segments array contains one entry per flight segment. A nonstop itinerary leg has one segment; a connection has two or more. Each segment includes:

ParameterTypeRequiredDescription
marketing_carrier_codestring | nullYes2-character code of the airline selling the ticket.
flight_numberstring | nullYesFlight number (e.g. "1234").
operating_carrier_namestring | nullYesName of the airline operating the aircraft.
departure_airportstringYes3-letter IATA code.
departure_time_localstringYesLocal departure time in YYYY-MM-DDTHH:MM:SS format.
departure_timezonestring | nullYesIANA timezone name for the departure airport.
departure_time_utcstring | nullYesDeparture timestamp converted to UTC.
arrival_airportstringYes3-letter IATA code.
arrival_time_localstringYesLocal arrival time in YYYY-MM-DDTHH:MM:SS format.
arrival_timezonestring | nullYesIANA timezone name for the arrival airport.
arrival_time_utcstring | nullYesArrival timestamp converted to UTC.
duration_minutesintegerYesFlight duration in minutes.
aircraftstring | nullYesAircraft type, e.g. "Boeing 737 MAX 9".

departure_time_local and arrival_time_local remain airport-local wall times. Each segment also includes the corresponding IANA timezone and a UTC timestamp so browser clients do not have to work out the conversion.

Do not derive elapsed travel time by subtracting the local wall-clock fields. Use segment duration_minutes, leg duration_minutes, or the UTC timestamps instead.

Baggage

When available, the bags object shows how many carry_on and checked bags are included in the fare. Either field may be omitted when the information is unavailable.

ignav_id

Every itinerary includes an ignav_id — an opaque, account-scoped handoff token for that result. Pass it to the booking links endpoint using the same account to request direct booking URLs. Do not use it as a stable flight identifier across separate searches.

Round-trip additions

Round-trip itineraries include an optional inbound leg object with the same fields as outbound.

Booking links response

The booking links endpoint returns the matched itinerary plus grouped booking options:

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

One-way and round-trip booking options have a named legs array. Flexible-search options instead use zero-based leg_indexes. Every option has a links array, and each link includes provider_name, optional provider_type, fare_name and price, and a url that opens an airline or OTA booking page. Optional specificity describes the link: "exact_flight" means the link is intended to preselect flights; "search_results" means the user must choose from route and date results. An omitted value leaves the selection behavior unspecified. Neither value confirms price or availability.

Flexible indexes refer to the itinerary's ordered legs array.

Ready to get started?

Create a free account to get your API key, or try the playground — no signup required.