One-Way Flight Search API
One route, one date, every live fare
POST a route and a departure date; get every live Google Flights itinerary back as flat JSON: priced, timed, judged, and linkable.
- Filters matching the real Google Flights UI: stops, carriers, time windows, cabin, passenger mix, max price
- Google's
price_insightsband and verdict on every result buy_linkreopens that exact itinerary on Google Flights
Free tier on RapidAPI. No card to try.
{
"from_airport": "JFK",
"to_airport": "CUN",
"departure_date": "2027-01-01",
"limit": 5,
"currency": "usd"
}The same capture, rendered
Four live fares, one field access from a UI
The response is flat on purpose. Each row below is one array element, no unpacking.
JFK→CUN · 2027-01-01
captured run · 2026-08-26Google's price band for this route & dates. Cheapest live fare: $177
Request
Every request field
Three required fields. Everything else narrows the search, and each optional field maps to a control in the Google Flights UI.
Required
departure_datestringThe travel date, YYYY-MM-DD.
from_airportstringOrigin IATA code. New York is JFK.
to_airportstringDestination IATA code.
Optional
max_stopsintMaximum stops per itinerary: 0 returns nonstop only.
sort_type"Overall" | "Price" | "Duration"Default Overall. "Price" reflects Google's own ordering, see the note below.
airline_codesstring[]Restrict results to these carriers.
exclude_airline_codesstring[]Exclude these carriers.
departure_time_min / departure_time_maxint 0–23Departure-hour window in local time.
arrival_time_min / arrival_time_maxint 0–23Arrival-hour window in local time.
currencystringDefaults to USD. Prices, the band, and the buy_link all follow it.
max_priceintUpper bound on the fare.
seat_typeintCabin: 1 Economy, 3 Business.
passengersint[]Per-passenger codes: 1 adult, 2 child, 3 infant on lap, 4 infant in seat.
limitintMaximum results returned. Defaults to 10.
strictboolOpt-in, default false. A search that did not complete returns HTTP 503 instead of an empty array, the search-status page explains when you want that.
use_ext_proxyboolDefault true: routes the scan through a residential proxy to reduce blocks. Set false for lower latency on easy routes.
Sorting honestly
sort_type: "Price" mirrors what Google Flights shows under its own "Price" tab, and that is not a strict numeric sort. When exact cheapest-first order matters, sort locally:
fares = sorted(r.json(), key=lambda f: f["price_as_number"])Response
Every response field
Values below in brackets are from the captured JFK→CUN run above. Real output, not invented examples.
price / price_as_numberstring · numberThe fare twice: a display string ($177) and a number (177) you can sort and compare on.
airlinestringOperating carrier: American in the capture, where a pipe joins codeshare partners.
duration / duration_secondsstring · numberTotal trip time, formatted (4 hr 25 min) and in seconds (15900).
stops / stops_info[]int · object[]Stop count plus one object per layover with stop_airport and stop_duration_seconds. Empty on nonstop flights, like the captured one.
departure_description / arrival_descriptionstringLocal times in plain text, like "7:10 AM on Fri, Jan 1", ready to show a user or hand to an agent without timezone math.
buy_linkstringA Google Flights deep link that reopens this exact itinerary (carrier, flight, date) rather than a fresh search.
price_insights_low / price_insights_highnumber | nullGoogle's historical price band for the route and dates: $140 to $180 in the capture. Null when Google doesn't publish a band.
price_range_in_relation_to_other_periods"low" | "typical" | "high" | nullGoogle's verdict on the current fare against that band: "typical" in the capture. The price-insights page is about nothing but these three fields.
Pricing
One-way search on every plan
| Plan | Price / mo | Requests | $ / 1k req | Overage | Rate limit | |
|---|---|---|---|---|---|---|
| BASIC | Free | 10 / mo | — | hard cap | — | Get this plan → |
| PRO | $10 | 2,500 / mo | $4.00 | $0.003 / req | 150 / min | Get this plan → |
| ULTRArecommended | $25 | 10,000 / mo | $2.50 | $0.003 / req | 250 / min | Get this plan → |
| MEGA | $50 | 50,000 / mo | $1.00 | $0.001 / req | 500 / min | Get this plan → |
Every plan includes every endpoint. You only choose volume and rate limit. Read from the live listing on 2026-08-26; the listing is authoritative.
Questions, answered plainly
- What does a one-way flight result look like?
- One flat JSON object per itinerary: price ("$983") and price_as_number (983), airline, duration in text and seconds, stop count with per-layover airports and durations, plain-text local departure and arrival times, a buy_link into Google Flights, and Google’s price_insights_low / price_insights_high band with a low | typical | high verdict.
- Is sort_type "Price" a strict cheapest-first sort?
- No. It reflects Google’s own “Price” ordering, which is not a strict numeric sort. If you need exact price order, sort locally on price_as_number; it is one line and the field exists precisely for that.
- How do I filter by airline or time of day?
- airline_codes restricts results to specific carriers and exclude_airline_codes removes them; both take arrays of IATA codes. departure_time_min/max and arrival_time_min/max take hours 0–23 and window the local departure and arrival times.
- What formats do dates and airports use?
- Requests take YYYY-MM-DD dates and IATA airport codes. Responses return airports as display strings in the form “City (IATA)”, for example “New York (JFK)”, so parse accordingly if you store them.
- What does an empty array mean?
- On its own, nothing certain. That is why every response carries an X-Search-Status header. "empty" means Google genuinely has no itineraries for the route and date; "degraded" means the search did not complete and you should retry. Send strict: true if you would rather get an HTTP 503 than a misleading [].
- Can I search business class, or for a family?
- seat_type selects the cabin: 1 for Economy, 3 for Business. passengers is an array of per-passenger codes: 1 adult, 2 child, 3 infant on lap, 4 infant in seat, so [1, 1, 2] is two adults and a child.
- Do I pay extra for the price-insights fields?
- No. The band and verdict ride on every one-way result on every plan, including the free tier.
A route and a date is all it takes
Live fares with Google's price band, a verdict, and a booking link, from your first request.
Free tier: 10 requests/month. No card to try.