Skip to content

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.

POST /api/google_flights/oneway_multi_airport/v1
captured run · 2026-11-07
{
  "from_airport": "TLV,ATH",
  "to_airport": [
    "LHR",
    "CDG"
  ],
  "departure_date": "2027-02-04",
  "limit": 10
}
Replays the captured request: free, no account, nobody's quota.

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 · the captured one-way
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}'
TLV,ATH → LHR,CDG, 2027-02-04 · first row of 2 pairs out of 9 results, trimmed · captured 2026-11-07
[
  {
    "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
  }
]
FieldTypeMeaningFirst row
from_airport / to_airportstringThe airports this itinerary flies, not the list you sent. Display strings in the form “City (IATA)”.Athens (ATH) → London (LHR)
price_as_numbernumberThe fare as a number. The rows of every pair are ranked together, so this list mixes pairs.94
price_insights_low / highnumber | nullOn 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 · the captured round trip
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}'
TLV → LHR,CDG, 2027-02-04 → 2027-02-11 · first row of each pair out of 10 results, trimmed · captured 2026-11-07
[
  {
    "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–20

How 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_datestring

Round 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_fallbackbool

Not 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 sentfielddetail (example)
More than 4 airports on one sidefrom_airport / to_airportto_airport names 5 airports; at most 4 are allowed per side
More than 8 airport pairs (3 x 3 is 9)to_airportto_airport: 3 origins x 3 destinations is 9 airport pairs; at most 8 pairs are searched in one request
The same airport on both sidesto_airportto_airport: ATH is on both sides; an airport can be an origin or a destination, not both
A child or infant in passengerspassengerspassengers: 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 20limitlimit: limit is 50; the multi-airport endpoints take a limit of 1 to 20
use_fallback: trueuse_fallbackuse_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_airportto_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 nightsreturn_datereturn_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
422 · round trip TLV → LON, the full body
{
  "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.