Multi-Airport Flight Search API
Up to 4 airports a side, one request
Send Tel Aviv and Athens to London and Paris in one call. Every airport pair is searched and the fares come back in one ranked list, each row naming the airports it flies.
- 1 to 4 airports on each side, up to 8 airport pairs, as a list or a comma-separated string
- Billed as one request, one-way or round trip
- The same filters and the same rows as the one-way and round-trip endpoints
Free tier on RapidAPI. No card to try.
{
"from_airport": "TLV,ATH",
"to_airport": [
"LHR",
"CDG"
],
"departure_date": "2027-02-04",
"limit": 10
}Short answer
What a multi-airport flight search returns
POST /api/google_flights/oneway_multi_airport/v1 and POST /api/google_flights/roundtrip_multi_airport/v1 on google-flights-live-api.p.rapidapi.com (RapidAPI key) take 1 to 4 airports in from_airport and in to_airport, up to 8 pairs. They return the same JSON array as the single-airport endpoints: every pair in one list, ranked by sort_type and cut to limit. They are on the RapidAPI host only, not on api.flightpowers.com.curl -X POST "https://google-flights-live-api.p.rapidapi.com/api/google_flights/oneway_multi_airport/v1" \
-H "Content-Type: application/json" \
-H "x-rapidapi-host: google-flights-live-api.p.rapidapi.com" \
-H "x-rapidapi-key: $RAPIDAPI_KEY" \
-d '{"from_airport":"TLV,ATH","to_airport":["LHR","CDG"],"departure_date":"2027-02-04","limit":10}'[
{
"from_airport": "Athens (ATH)",
"to_airport": "London (LHR)",
"departure_date": "2027-02-04",
"airline": "Aegean",
"price": "$94",
"price_as_number": 94,
"stops": 0,
"price_insights_low": null,
"price_insights_high": null
},
{
"from_airport": "Athens (ATH)",
"to_airport": "Paris (CDG)",
"departure_date": "2027-02-04",
"airline": "SKY express",
"price": "$160",
"price_as_number": 160,
"stops": 0,
"price_insights_low": null,
"price_insights_high": null
}
]| Field | Type | Meaning | First row |
|---|---|---|---|
from_airport / to_airport | string | The airports this itinerary flies, not the list you sent. Display strings in the form “City (IATA)”. | Athens (ATH) → London (LHR) |
price_as_number | number | The fare as a number. The rows of every pair are ranked together, so this list mixes pairs. | 94 |
price_insights_low / high | number | null | On a one-way, filled only when all the airports on each side are in one city. Athens to London and Paris crosses cities, so null here. | null |
All four pairs were asked for; the 9 rows that came back in this capture are all from Athens, to both London and Paris.
Every response carries the same X-Search-Status headers as the single-airport endpoints.
Round trip
Still one call: both legs and one total per result
Each airport pair is searched on its own page, then the itineraries of every pair are ranked together. Each row carries its own pair's Google price range.
curl -X POST "https://google-flights-live-api.p.rapidapi.com/api/google_flights/roundtrip_multi_airport/v1" \
-H "Content-Type: application/json" \
-H "x-rapidapi-host: google-flights-live-api.p.rapidapi.com" \
-H "x-rapidapi-key: $RAPIDAPI_KEY" \
-d '{"from_airport":"TLV","to_airport":"LHR,CDG","departure_date":"2027-02-04","return_date":"2027-02-11","limit":10}'[
{
"from_airport": "Tel Aviv (TLV)",
"to_airport": "Paris (CDG)",
"departure_date": "2027-02-04",
"return_date": "2027-02-11",
"total_price": "$354",
"total_price_as_number": 354,
"total_stops": 0,
"departure_flight_airline": "Air France | El Al",
"return_flight_airline": "Air France | El Al",
"price_insights_low": 295,
"price_insights_high": 340,
"price_range_in_relation_to_other_periods": "low"
},
{
"from_airport": "Tel Aviv (TLV)",
"to_airport": "London (LHR)",
"departure_date": "2027-02-04",
"return_date": "2027-02-11",
"total_price": "$547",
"total_price_as_number": 547,
"total_stops": 0,
"departure_flight_airline": "British Airways",
"return_flight_airline": "British Airways",
"price_insights_low": 375,
"price_insights_high": 425,
"price_range_in_relation_to_other_periods": "typical"
}
]Google marked Paris low for these dates (range $295 to $340) and London typical (range $375 to $425), each verdict for its own airport pair, in the same response. Every field on a row is documented on the round-trip page.
Request
What is different from the single-airport endpoints
Every other field works exactly as on the one-way and round-trip endpoints: stops, airlines, time windows, cabin, currency, max price, sort, returns_per_outbound.
from_airport / to_airportstring | string[]1 to 4 IATA codes each, as a list (["TLV", "ATH"]) or a comma-separated string ("TLV,ATH"). Duplicates are dropped. At most 8 origin x destination pairs (2 x 4, 4 x 2 …), and no code on both sides. City codes (LON, NYC) work on the one-way only; the round trip wants airports (LHR,LGW).
limitint 1–20How many results come back, ranked across all pairs. Defaults to 10.
passengersint[]Adults only: one 1 per adult, so [1, 1] is two adults. Omit it for one adult.
return_datestringRound trip only, YYYY-MM-DD. Stays up to 32 nights; for a longer stay use the single-airport round-trip endpoint, which handles long stays.
use_fallbackboolNot used here: send false or leave it out.
Errors
Every refusal is a 422 that names the field
Refused before any search runs. The body carries detail, help, hint and field, like every other 422 on this API.
| You sent | field | detail (example) |
|---|---|---|
| More than 4 airports on one side | from_airport / to_airport | to_airport names 5 airports; at most 4 are allowed per side |
| More than 8 airport pairs (3 x 3 is 9) | to_airport | to_airport: 3 origins x 3 destinations is 9 airport pairs; at most 8 pairs are searched in one request |
| The same airport on both sides | to_airport | to_airport: ATH is on both sides; an airport can be an origin or a destination, not both |
| A child or infant in passengers | passengers | passengers: the multi-airport endpoints search adults only (passenger code 1); for a child or an infant, search each airport pair on the single-airport endpoint |
| limit outside 1 to 20 | limit | limit: limit is 50; the multi-airport endpoints take a limit of 1 to 20 |
| use_fallback: true | use_fallback | use_fallback: the multi-airport endpoints use no fallback source; send false or omit it |
| Round trip only: a city code (LON, NYC, PAR …) | from_airport / to_airport | to_airport: LON is a city code; … for example LHR,LGW (all of LON: LHR,LGW,STN,LTN,LCY,SEN) |
| Round trip only: a stay longer than 32 nights | return_date | return_date: a stay of 40 nights is longer than the 32 nights the multi-airport round trip covers; for a longer stay search each pair on /api/google_flights/roundtrip/v1 |
{
"detail": "to_airport: LON is a city code; the multi-airport round trip takes airport codes, list the ones you want (up to 4), for example LHR,LGW (all of LON: LHR,LGW,STN,LTN,LCY,SEN)",
"help": "https://flightpowers.com/docs/quickstart#errors",
"hint": "from_airport and to_airport each take 1 to 4 IATA codes, as a list or a comma-separated string, with at most 8 origin x destination pairs and no code on both sides; passengers must be adults only (1); limit is 1 to 20; a round trip takes airport codes, not city codes (LHR,LGW, not LON), and covers stays up to 32 nights",
"field": "to_airport"
}Questions, answered plainly
- How many requests does a multi-airport search cost?
- One. A call to either multi-airport endpoint is one request on your RapidAPI plan, whether it covers one airport pair or eight. A round trip is still one request too: both legs and one total per result.
- Can I send a city code like LON or NYC?
- On the one-way, yes. On the round trip, no: it answers a 422 that names the city’s airports, so list the ones you want (LHR,LGW). On the one-way, do not mix a city code with one of its own airports (LON with LHR): the same flights get searched twice, and each one comes back once.
- Which airports did a result actually fly?
- Read from_airport and to_airport on the row. They are the airports that itinerary flies, as display strings like “Athens (ATH)”, not the list you sent. On a round trip the return leg and the buy_link use the same row’s airports.
- Does every result carry Google’s price range?
- On the round trip, yes when Google shows one: each airport pair is searched on its own page, so each row carries its own pair’s price_insights_low / price_insights_high and verdict. On the one-way the range is only filled when all the airports on each side are in one city (GRU,VCP to HND,NRT); across cities it is null.
- Can I search for a family?
- Not on these two endpoints: they take adults only (passenger code 1, so [1, 1] is two adults). For a party with a child or infant, search each airport pair on the single-airport one-way or round-trip endpoint.
Several airports, one request
Live Google Flights fares for every airport pair, ranked together, from your first call.
Free tier: 10 requests/month. No card to try.
Docs: the Flights API and the MCP servers.