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:
| Parameter | Type | Required | Description |
|---|---|---|---|
| origin | string | No | Normalized requested departure airport or metro code for one-way and round-trip responses. |
| destination | string | No | Normalized requested arrival airport or metro code for one-way and round-trip responses. |
| departure_date | string | No | Departure date for one-way and round-trip responses. |
| return_date | string | No | Return date for round-trip responses. |
| legs | array | No | Normalized requested legs for flexible-search responses. |
| itineraries | array | Yes | List of matching itineraries (may be empty). |
| observed_at | string | null | Yes | UTC 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_hit | boolean | Yes | True 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:
{
"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.
{
"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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| carrier | string | No | Airline display name for this leg when available. |
| duration_minutes | integer | No | Elapsed leg travel time in minutes, including layovers when present. |
| segments | array | Yes | Array 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:
| Parameter | Type | Required | Description |
|---|---|---|---|
| marketing_carrier_code | string | null | Yes | 2-character code of the airline selling the ticket. |
| flight_number | string | null | Yes | Flight number (e.g. "1234"). |
| operating_carrier_name | string | null | Yes | Name of the airline operating the aircraft. |
| departure_airport | string | Yes | 3-letter IATA code. |
| departure_time_local | string | Yes | Local departure time in YYYY-MM-DDTHH:MM:SS format. |
| departure_timezone | string | null | Yes | IANA timezone name for the departure airport. |
| departure_time_utc | string | null | Yes | Departure timestamp converted to UTC. |
| arrival_airport | string | Yes | 3-letter IATA code. |
| arrival_time_local | string | Yes | Local arrival time in YYYY-MM-DDTHH:MM:SS format. |
| arrival_timezone | string | null | Yes | IANA timezone name for the arrival airport. |
| arrival_time_utc | string | null | Yes | Arrival timestamp converted to UTC. |
| duration_minutes | integer | Yes | Flight duration in minutes. |
| aircraft | string | null | Yes | Aircraft 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:
{
"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.