curl --request POST \
--url https://api.example.com/v1/flight_search \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"origin": "JFK",
"destination": "CDG",
"departure_date": "2026-09-01",
"return_date": "2026-09-08",
"trip_type": "roundtrip",
"cabin_class": "economy",
"adults": 1,
"max_stops": 1,
"checked_bag_included": true,
"currency": "USD"
}
'import requests
url = "https://api.example.com/v1/flight_search"
payload = {
"origin": "JFK",
"destination": "CDG",
"departure_date": "2026-09-01",
"return_date": "2026-09-08",
"trip_type": "roundtrip",
"cabin_class": "economy",
"adults": 1,
"max_stops": 1,
"checked_bag_included": True,
"currency": "USD"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
origin: 'JFK',
destination: 'CDG',
departure_date: '2026-09-01',
return_date: '2026-09-08',
trip_type: 'roundtrip',
cabin_class: 'economy',
adults: 1,
max_stops: 1,
checked_bag_included: true,
currency: 'USD'
})
};
fetch('https://api.example.com/v1/flight_search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/flight_search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'origin' => 'JFK',
'destination' => 'CDG',
'departure_date' => '2026-09-01',
'return_date' => '2026-09-08',
'trip_type' => 'roundtrip',
'cabin_class' => 'economy',
'adults' => 1,
'max_stops' => 1,
'checked_bag_included' => true,
'currency' => 'USD'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/flight_search"
payload := strings.NewReader("{\n \"origin\": \"JFK\",\n \"destination\": \"CDG\",\n \"departure_date\": \"2026-09-01\",\n \"return_date\": \"2026-09-08\",\n \"trip_type\": \"roundtrip\",\n \"cabin_class\": \"economy\",\n \"adults\": 1,\n \"max_stops\": 1,\n \"checked_bag_included\": true,\n \"currency\": \"USD\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/flight_search")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"origin\": \"JFK\",\n \"destination\": \"CDG\",\n \"departure_date\": \"2026-09-01\",\n \"return_date\": \"2026-09-08\",\n \"trip_type\": \"roundtrip\",\n \"cabin_class\": \"economy\",\n \"adults\": 1,\n \"max_stops\": 1,\n \"checked_bag_included\": true,\n \"currency\": \"USD\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/flight_search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"origin\": \"JFK\",\n \"destination\": \"CDG\",\n \"departure_date\": \"2026-09-01\",\n \"return_date\": \"2026-09-08\",\n \"trip_type\": \"roundtrip\",\n \"cabin_class\": \"economy\",\n \"adults\": 1,\n \"max_stops\": 1,\n \"checked_bag_included\": true,\n \"currency\": \"USD\"\n}"
response = http.request(request)
puts response.read_body{
"offers": [
{
"offer_id": "off_3a9f1b27c4",
"origin": {
"code": "JFK",
"name": "New York John F. Kennedy"
},
"destination": {
"code": "LAX",
"name": "Los Angeles Intl"
},
"additional_legs": [],
"fares": [
{
"trip_item_token": "tit_5f8c1d3e9a",
"cabin_class": "economy",
"brand_name": "Main Cabin",
"total_price": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2
},
"price_per_person": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2
},
"included_baggage": {
"pieces": 1,
"weight": 23,
"weight_unit": "kg",
"dimensions": "158 cm linear",
"description": "1 checked bag up to 23 kg"
},
"carry_on_baggage": {
"pieces": 1,
"weight": 23,
"weight_unit": "kg",
"dimensions": "158 cm linear",
"description": "1 checked bag up to 23 kg"
},
"is_changeable": true,
"is_refundable": false,
"checked_bag_included": true
}
],
"provider": "sabre",
"provider_name": "Sabre",
"is_round_trip": false,
"total_duration_minutes": 385,
"outbound": {
"origin": "JFK",
"destination": "LAX",
"departure_datetime": "2026-07-15T08:30:00-04:00",
"arrival_datetime": "2026-07-15T11:55:00-07:00",
"duration_minutes": 385,
"airline": "AA",
"airline_name": "American Airlines",
"stops": 0,
"stop_infos": [
{
"airport_code": "DFW",
"duration_minutes": 95
}
],
"segments": [
{
"airline": "AA",
"airline_name": "American Airlines",
"flight_number": "AA100",
"aircraft": "32Q",
"departure_airport": "JFK",
"departure_city": "New York",
"departure_time": "2026-09-23T11:55:00-04:00",
"arrival_airport": "DFW",
"arrival_city": "Dallas",
"arrival_time": "2026-09-23T15:10:00-05:00",
"duration_minutes": 255,
"layover_minutes": 95,
"operating_carrier": "MQ"
}
]
},
"inbound": {
"origin": "JFK",
"destination": "LAX",
"departure_datetime": "2026-07-15T08:30:00-04:00",
"arrival_datetime": "2026-07-15T11:55:00-07:00",
"duration_minutes": 385,
"airline": "AA",
"airline_name": "American Airlines",
"stops": 0,
"stop_infos": [
{
"airport_code": "DFW",
"duration_minutes": 95
}
],
"segments": [
{
"airline": "AA",
"airline_name": "American Airlines",
"flight_number": "AA100",
"aircraft": "32Q",
"departure_airport": "JFK",
"departure_city": "New York",
"departure_time": "2026-09-23T11:55:00-04:00",
"arrival_airport": "DFW",
"arrival_city": "Dallas",
"arrival_time": "2026-09-23T15:10:00-05:00",
"duration_minutes": 255,
"layover_minutes": 95,
"operating_carrier": "MQ"
}
]
}
}
],
"applied_filters": [
"max_stops",
"checked_bag_included"
],
"unapplied_filters": [],
"exact_match_found": true
}{
"error": {
"code": "BAD_REQUEST",
"message": "Malformed JSON in request body.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "AUTH_REQUIRED",
"message": "Invalid or expired API key.",
"doc_url": "https://docs.gojinko.com/api-reference/authentication"
}
}{
"error": {
"code": "PAYMENT_REQUIRED",
"message": "Insufficient balance — this call costs $0.0150 and your organization has $0.0000 available. Top up at https://dashboard.gojinko.com/developers/billing/topup",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "CONFLICT",
"message": "an exchange is already in progress for this booking",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "origins: origins is required; trip_type: trip_type is required",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit or quota exceeded.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_REJECTED",
"message": "sabre-rest BargainFinderMaxRQ failed with status 400: 27131 - Number of connection locations exceeds maximum allowed",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "All flight providers are temporarily unable to serve this search. Please retry later. Provider reasons: sabre-rest: provider temporarily closed; travelfusion: quota exhausted",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "sabre-rest BargainFinderMaxRQ timed out after 30s",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}flight-search
Get live flight pricing, search by route, or re-price a known offer
curl --request POST \
--url https://api.example.com/v1/flight_search \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"origin": "JFK",
"destination": "CDG",
"departure_date": "2026-09-01",
"return_date": "2026-09-08",
"trip_type": "roundtrip",
"cabin_class": "economy",
"adults": 1,
"max_stops": 1,
"checked_bag_included": true,
"currency": "USD"
}
'import requests
url = "https://api.example.com/v1/flight_search"
payload = {
"origin": "JFK",
"destination": "CDG",
"departure_date": "2026-09-01",
"return_date": "2026-09-08",
"trip_type": "roundtrip",
"cabin_class": "economy",
"adults": 1,
"max_stops": 1,
"checked_bag_included": True,
"currency": "USD"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
origin: 'JFK',
destination: 'CDG',
departure_date: '2026-09-01',
return_date: '2026-09-08',
trip_type: 'roundtrip',
cabin_class: 'economy',
adults: 1,
max_stops: 1,
checked_bag_included: true,
currency: 'USD'
})
};
fetch('https://api.example.com/v1/flight_search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/flight_search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'origin' => 'JFK',
'destination' => 'CDG',
'departure_date' => '2026-09-01',
'return_date' => '2026-09-08',
'trip_type' => 'roundtrip',
'cabin_class' => 'economy',
'adults' => 1,
'max_stops' => 1,
'checked_bag_included' => true,
'currency' => 'USD'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/flight_search"
payload := strings.NewReader("{\n \"origin\": \"JFK\",\n \"destination\": \"CDG\",\n \"departure_date\": \"2026-09-01\",\n \"return_date\": \"2026-09-08\",\n \"trip_type\": \"roundtrip\",\n \"cabin_class\": \"economy\",\n \"adults\": 1,\n \"max_stops\": 1,\n \"checked_bag_included\": true,\n \"currency\": \"USD\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/flight_search")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"origin\": \"JFK\",\n \"destination\": \"CDG\",\n \"departure_date\": \"2026-09-01\",\n \"return_date\": \"2026-09-08\",\n \"trip_type\": \"roundtrip\",\n \"cabin_class\": \"economy\",\n \"adults\": 1,\n \"max_stops\": 1,\n \"checked_bag_included\": true,\n \"currency\": \"USD\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/flight_search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"origin\": \"JFK\",\n \"destination\": \"CDG\",\n \"departure_date\": \"2026-09-01\",\n \"return_date\": \"2026-09-08\",\n \"trip_type\": \"roundtrip\",\n \"cabin_class\": \"economy\",\n \"adults\": 1,\n \"max_stops\": 1,\n \"checked_bag_included\": true,\n \"currency\": \"USD\"\n}"
response = http.request(request)
puts response.read_body{
"offers": [
{
"offer_id": "off_3a9f1b27c4",
"origin": {
"code": "JFK",
"name": "New York John F. Kennedy"
},
"destination": {
"code": "LAX",
"name": "Los Angeles Intl"
},
"additional_legs": [],
"fares": [
{
"trip_item_token": "tit_5f8c1d3e9a",
"cabin_class": "economy",
"brand_name": "Main Cabin",
"total_price": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2
},
"price_per_person": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2
},
"included_baggage": {
"pieces": 1,
"weight": 23,
"weight_unit": "kg",
"dimensions": "158 cm linear",
"description": "1 checked bag up to 23 kg"
},
"carry_on_baggage": {
"pieces": 1,
"weight": 23,
"weight_unit": "kg",
"dimensions": "158 cm linear",
"description": "1 checked bag up to 23 kg"
},
"is_changeable": true,
"is_refundable": false,
"checked_bag_included": true
}
],
"provider": "sabre",
"provider_name": "Sabre",
"is_round_trip": false,
"total_duration_minutes": 385,
"outbound": {
"origin": "JFK",
"destination": "LAX",
"departure_datetime": "2026-07-15T08:30:00-04:00",
"arrival_datetime": "2026-07-15T11:55:00-07:00",
"duration_minutes": 385,
"airline": "AA",
"airline_name": "American Airlines",
"stops": 0,
"stop_infos": [
{
"airport_code": "DFW",
"duration_minutes": 95
}
],
"segments": [
{
"airline": "AA",
"airline_name": "American Airlines",
"flight_number": "AA100",
"aircraft": "32Q",
"departure_airport": "JFK",
"departure_city": "New York",
"departure_time": "2026-09-23T11:55:00-04:00",
"arrival_airport": "DFW",
"arrival_city": "Dallas",
"arrival_time": "2026-09-23T15:10:00-05:00",
"duration_minutes": 255,
"layover_minutes": 95,
"operating_carrier": "MQ"
}
]
},
"inbound": {
"origin": "JFK",
"destination": "LAX",
"departure_datetime": "2026-07-15T08:30:00-04:00",
"arrival_datetime": "2026-07-15T11:55:00-07:00",
"duration_minutes": 385,
"airline": "AA",
"airline_name": "American Airlines",
"stops": 0,
"stop_infos": [
{
"airport_code": "DFW",
"duration_minutes": 95
}
],
"segments": [
{
"airline": "AA",
"airline_name": "American Airlines",
"flight_number": "AA100",
"aircraft": "32Q",
"departure_airport": "JFK",
"departure_city": "New York",
"departure_time": "2026-09-23T11:55:00-04:00",
"arrival_airport": "DFW",
"arrival_city": "Dallas",
"arrival_time": "2026-09-23T15:10:00-05:00",
"duration_minutes": 255,
"layover_minutes": 95,
"operating_carrier": "MQ"
}
]
}
}
],
"applied_filters": [
"max_stops",
"checked_bag_included"
],
"unapplied_filters": [],
"exact_match_found": true
}{
"error": {
"code": "BAD_REQUEST",
"message": "Malformed JSON in request body.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "AUTH_REQUIRED",
"message": "Invalid or expired API key.",
"doc_url": "https://docs.gojinko.com/api-reference/authentication"
}
}{
"error": {
"code": "PAYMENT_REQUIRED",
"message": "Insufficient balance — this call costs $0.0150 and your organization has $0.0000 available. Top up at https://dashboard.gojinko.com/developers/billing/topup",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "CONFLICT",
"message": "an exchange is already in progress for this booking",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "origins: origins is required; trip_type: trip_type is required",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit or quota exceeded.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_REJECTED",
"message": "sabre-rest BargainFinderMaxRQ failed with status 400: 27131 - Number of connection locations exceeds maximum allowed",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "All flight providers are temporarily unable to serve this search. Please retry later. Provider reasons: sabre-rest: provider temporarily closed; travelfusion: quota exhausted",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "sabre-rest BargainFinderMaxRQ timed out after 30s",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}Two modes, one endpoint
POST /v1/flight_search serves both modes:
- Search mode: filter-based live search by
origin,destination,departure_date, and passengers. Returns priced offers, each fare carrying atrip_item_tokenyou can add to a trip. - Reprice mode: pass an
offer_tokenfrom discovery (find_destination,flight_calendar) to re-price that specific offer before adding it to a trip. The other route fields are ignored whenoffer_tokenis present.
--offer-token for reprice mode, omit it for search mode.
value is an integer — divide by
10 ** decimal_places to display it. { "value": 15977, "decimal_places": 2 }
is **159.77∗∗,not15,977. See Money & prices.Authorizations
Body
"JFK"
"LAX"
How to read the code: city searches every airport of the metro area, airport only that one airport. Omit it to let the platform classify the code itself (metro codes → city, otherwise airport) — that is the safest choice, and forcing city on an airport code narrows the search wrongly.
city, airport "airport"
How to read the code: city searches every airport of the metro area, airport only that one airport. Omit it to let the platform classify the code itself (metro codes → city, otherwise airport) — that is the safest choice, and forcing city on an airport code narrows the search wrongly.
city, airport "airport"
^\d{4}-\d{2}-\d{2}$^\d{4}-\d{2}-\d{2}$oneway, roundtrip Preferred cabin. ADVISORY, not a filter: it is forwarded to the providers as a preference (Sabre CabinPref, TravelFusion TravelClass) and they may still return other cabins. It is NOT part of the applied/unapplied filter contract and never appears in applied_filters — read each fare’s own cabin_class to see what actually came back.
economy, premium_economy, business, first "economy"
DEPRECATED — send max_stops: 0 instead. Still accepted: true is folded into max_stops: 0 before the search runs and only max_stops reaches the platform, so applied_filters / unapplied_filters always name max_stops, never direct_only. Setting it beside a non-zero max_stops is rejected.
false
Maximum stops per leg: 0 non-stop (the way to ask for direct flights), 1 one connection, 2 two. Applies to every leg of the trip.
0 <= x <= 21
Branded fare ladder: several fares per itinerary (upsell options). Defaults to true when omitted; send false for a single fare per itinerary and a smaller response. Sabre-only effect; TravelFusion behavior is unchanged.
true
Drop fares whose total price (all passengers) exceeds this cap, in currency, major units. When the platform cannot convert to currency it reports max_price in unapplied_filters instead of guessing.
x > 0800
Keep only itineraries marketed by these IATA carriers.
^[A-Za-z0-9]{2}$["AF", "DL"]
Drop itineraries marketed by these IATA carriers. Must not overlap include_carriers.
^[A-Za-z0-9]{2}$["NK"]
Filter the OUTBOUND leg by local departure time-of-day.
Show child attributes
Show child attributes
Filter the OUTBOUND leg by local arrival time-of-day.
Show child attributes
Show child attributes
Filter the RETURN leg by local departure time-of-day (round-trip only).
Show child attributes
Show child attributes
Filter the RETURN leg by local arrival time-of-day (round-trip only).
Show child attributes
Show child attributes
Shortest acceptable layover, in minutes, applied to every connection of every leg. Must not exceed connection_time_max_minutes.
x >= 060
Longest acceptable layover, in minutes, applied to every connection of every leg.
x >= 0240
Cap each leg’s door-to-door elapsed travel time, in minutes.
x > 0900
Keep only fares that can be cancelled before departure (with or without a fee). Conservative: a fare whose rules the platform cannot verify is DROPPED, so carriers that publish no rule data disappear under this filter. Each returned fare carries the resolved flag as is_refundable.
true
Keep only fares that allow a voluntary change. Conservative in the same way as refundable_only: unverifiable fares are dropped. Each returned fare carries the resolved flag as is_changeable.
true
Keep only fares whose price already includes a checked bag. Each returned fare carries the resolved flag as checked_bag_included.
true
Keep only itineraries marketed end-to-end by one carrier.
true
Restrict connections to these airports — an itinerary qualifies when at least one connection is one of them. Non-stop itineraries have no connection to check and are kept.
^[A-Za-z]{3}$["AMS"]
Ban connections at these airports. Must not overlap via_airports.
^[A-Za-z]{3}$["LHR"]
Keep only itineraries whose every segment flies one of these IATA equipment codes.
^[A-Za-z0-9]{3}$["320", "77W"]
ADDITIONAL departure airports searched alongside origin. Widening only — the anchor in origin is always searched, so this can add results but never remove any. THE ANCHOR DECIDES RANKING AND TRUNCATION, which makes the two airports NOT interchangeable: measured on one route, anchor JFK with alternate EWR returned 15 JFK / 35 EWR, while anchor EWR with alternate JFK returned 2 JFK / 48 EWR — 13 itineraries differed between the two. Put the airport that matters most in origin. TAKES EFFECT ONLY WITH AN AIRPORT ANCHOR. A city anchor — origin_type: "city", or an origin code the platform resolves to a city — is accepted and searched as the city it is, but this list is then ignored and comes back in unapplied_filters with the reason, since a city already searches its whole metro area. On a round trip the platform mirrors the list onto the return leg, so it also covers where the return lands. Reported as origin in applied_filters / unapplied_filters — one entry per side, never under this field name. Sabre honours the list natively; TravelFusion cannot (single-station location) and reports it unapplied.
^[A-Za-z]{3}$["EWR", "LGA"]
ADDITIONAL arrival airports searched alongside destination. Widening only — the anchor in destination is always searched, so this can add results but never remove any. THE ANCHOR DECIDES RANKING AND TRUNCATION, which makes the two airports NOT interchangeable the same way origin_alternate_airports describes: put the airport that matters most in destination. TAKES EFFECT ONLY WITH AN AIRPORT ANCHOR. A city anchor — destination_type: "city", or a destination code the platform resolves to a city — is accepted and searched as the city it is, but this list is then ignored and comes back in unapplied_filters with the reason, since a city already searches its whole metro area. On a round trip the platform mirrors the list onto the return leg, so it also covers where the return departs from. Reported as destination in applied_filters / unapplied_filters — one entry per side, never under this field name. Sabre honours the list natively; TravelFusion cannot (single-station location) and reports it unapplied.
^[A-Za-z]{3}$["ORY"]
Also search the alternate airports around each leg’s origin and destination. Widening: more results, not fewer.
true
Keep only itineraries whose connections leave from the same airport they arrived at (no cross-town transfer).
true
Keep only round trips that return to the airport the trip departed from.
true
Keep only round trips whose return departs from the airport the outbound arrived at.
true
TOTAL number of flights to return (1–300), not a per-page size: limit: 5 returns at most five flights. Search mode only. Omit to let the platform choose (the cheapest flight plus its alternatives). Applied after the cross-provider merge and sort, so it only trims the returned set — the providers still bound the real count.
1 <= x <= 30020
Adult travelers (12+).
x >= 1Child travelers (2–11).
x >= 0Infant travelers (under 2), traveling on an adult’s lap. Seated infants (own seat) are not supported.
x >= 0Show child attributes
Show child attributes
Response
Priced offers
Show child attributes
Show child attributes
The requested filters these results DO honor. Empty when the request carried no filters. Entries are request field names, with one exception: origin_alternate_airports / destination_alternate_airports are reported per side as origin and destination.
["max_stops", "checked_bag_included"]
The requested filters these results do NOT honor, each with a reason. A filter listed here was not applied to the offers above — post-filter them yourself, or tell the user the constraint could not be met.
Show child attributes
Show child attributes
[]
true
