Skip to content

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_insights band and verdict on every result
  • buy_link reopens that exact itinerary on Google Flights

Free tier on RapidAPI. No card to try.

POST /api/google_flights/oneway/v1
captured run · 2026-08-26
{
  "from_airport": "JFK",
  "to_airport": "CUN",
  "departure_date": "2027-01-01",
  "limit": 5,
  "currency": "usd"
}
Replays the captured request: free, no account, nobody's quota.

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-26

Google's price band for this route & dates. Cheapest live fare: $177

$140 low$180 high
$177typicalAmerican4 hr 25 min · nonstopbuy_link →
$177typicalAmerican4 hr 30 min · nonstopbuy_link →
$191typicalJet | Blue4 hr 15 min · nonstopbuy_link →
$191typicalJet | Blue4 hr 25 min · nonstopbuy_link →
$191typicalJet | Blue4 hr 18 min · nonstopbuy_link →

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_datestring

The travel date, YYYY-MM-DD.

from_airportstring

Origin IATA code. New York is JFK.

to_airportstring

Destination IATA code.

Optional

max_stopsint

Maximum 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–23

Departure-hour window in local time.

arrival_time_min / arrival_time_maxint 0–23

Arrival-hour window in local time.

currencystring

Defaults to USD. Prices, the band, and the buy_link all follow it.

max_priceint

Upper bound on the fare.

seat_typeint

Cabin: 1 Economy, 3 Business.

passengersint[]

Per-passenger codes: 1 adult, 2 child, 3 infant on lap, 4 infant in seat.

limitint

Maximum results returned. Defaults to 10.

strictbool

Opt-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_proxybool

Default 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:

python
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 · number

The fare twice: a display string ($177) and a number (177) you can sort and compare on.

airlinestring

Operating carrier: American in the capture, where a pipe joins codeshare partners.

duration / duration_secondsstring · number

Total 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_descriptionstring

Local 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_linkstring

A Google Flights deep link that reopens this exact itinerary (carrier, flight, date) rather than a fresh search.

price_insights_low / price_insights_highnumber | null

Google'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" | null

Google'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

PlanPrice / moRequests$ / 1k reqOverageRate limit
BASICFree10 / mohard capGet this plan →
PRO$102,500 / mo$4.00$0.003 / req150 / minGet this plan →
ULTRArecommended$2510,000 / mo$2.50$0.003 / req250 / minGet this plan →
MEGA$5050,000 / mo$1.00$0.001 / req500 / minGet 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.