Skip to content
Google Flights

Google Flights search

Every itinerary Google Flights offers, with per-segment detail.

POST/v1/serp/google_flights
3 credits

One request (~0.3 s for a typical one-way): Google's best and other flights, flight numbers, operating carrier, aircraft, legroom, amenities, layovers, emissions, bags included, price insights and a Google Flights link per itinerary. Round trips and multi-city return the first leg's options with a departure_token for /v1/serp/google_flights_return; complete itineraries carry a booking_token for /v1/serp/google_flights_booking.

Request

POSThttps://api.scrapercompany.com/v1/serp/google_flights

Authenticate with your API key in the x-api-key header (see Authentication).

Body

JSON object. Unknown fields are rejected with 422.

  • departurestringrequiredmin length 3, max length 3

    IATA airport code (JFK) or IATA city code (NYC, LON, PAR, TYO...: every airport of that city). For several airports or a Google city id use departure_id.

  • arrivalstringrequiredmin length 3, max length 3

    IATA airport code (JFK) or IATA city code (NYC, LON, PAR, TYO...: every airport of that city). For several airports or a Google city id use arrival_id.

  • departure_datestring (date)required

    Outbound flight date, YYYY-MM-DD.

  • return_datestring (date) | null

    Return flight date for round-trip. Omit for one-way.

  • departure_idstring | nullmin length 3, max length 200

    SerpApi's departure_id: overrides departure with comma-separated IATA airport/city codes and/or Google city ids (/m/02_286), up to 7. departure is then only the label echoed back.

  • arrival_idstring | nullmin length 3, max length 200

    SerpApi's arrival_id: overrides arrival the same way, e.g. a city id from /v1/serp/google_flights_location_search.

  • multi_cityarray of object | nullmin items 1, max items 4

    Makes the trip multi-city: the legs after the first (departure -> arrival on departure_date), 1-4 of them, in date order. The response lists options for the first leg; follow departure_token for each next leg. Not combinable with return_date.

    Show 4 child fields
    • multi_city[].departurestringrequiredmin length 3, max length 80

      IATA airport code (JFK), IATA city code (NYC, LON, PAR: every airport of the city), a Google city id from /v1/serp/google_flights_location_search (/m/02_286), or up to 7 of these comma-separated (JFK,EWR).

    • multi_city[].arrivalstringrequiredmin length 3, max length 80

      IATA airport code (JFK), IATA city code (NYC, LON, PAR: every airport of the city), a Google city id from /v1/serp/google_flights_location_search (/m/02_286), or up to 7 of these comma-separated (JFK,EWR).

    • multi_city[].datestring (date)required

      Departure date of this leg, YYYY-MM-DD.

    • multi_city[].timesstring | nullpattern ^\d{1,2},\d{1,2}(,\d{1,2},\d{1,2})?$

      Hour window from,to for departure, optionally followed by from,to for arrival (0-23; 8,12 = leaves 08:00-12:59). SerpApi's format.

  • adultsintegerdefault 1min 1, max 9

    Number of adult passengers (12+ years old).

  • childrenintegerdefault 0min 0, max 8

    Number of children (2-11 years old).

  • infants_in_seatintegerdefault 0min 0, max 4

    Number of infants with seat (under 2 years old).

  • infants_on_lapintegerdefault 0min 0, max 4

    Number of lap infants (under 2 years old); at most one per adult.

  • cabin_classstringdefault economypattern ^(economy|premium_economy|business|first)$

    Cabin class: economy, premium_economy, business, first.

    One ofbusinesseconomyfirstpremium_economy

  • currencystringdefault USD

    ISO 4217 code for the returned prices. Major currencies include AED, AUD, BRL, CAD, CHF, CNY, EUR, GBP, HKD, INR, JPY, KRW, MXN, NZD, SGD, USD; all 39 supported codes are listed in the enum.

    39 allowed values

    AED, ARS, AUD, BRL, CAD, CHF, CLP, CNY, COP, CZK, DKK, EGP, EUR, GBP, HKD, HUF, IDR, ILS, INR, JPY, KRW, MXN, MYR, NOK, NZD, PEN, PHP, PLN, QAR, RON, SAR, SEK, SGD, THB, TRY, TWD, USD, VND, ZAR

  • hlstringdefault en

    Language code for results.

  • glstringdefault us

    Market/country code (two letters).

    251 allowed values

    ad, ae, af, ag, ai, al, am, ao, aq, ar, as, at, au, aw, ax, az, ba, bb, bd, be, bf, bg, bh, bi, bj, bl, bm, bn, bo, bq, br, bs, bt, bv, bw, by, bz, ca, cc, cd, cf, cg, ch, ci, ck, cl, cm, cn, co, cr, cu, cv, cw, cx, cy, cz, de, dj, dk, dm, do, dz, ec, ee, eg, eh, er, es, et, fi, fj, fk, fm, fo, fr, ga, gb, gd, ge, gf, gg, gh, gi, gl, gm, gn, gp, gq, gr, gs, gt, gu, gw, gy, hk, hm, hn, hr, ht, hu, id, ie, il, im, in, io, iq, ir, is, it, je, jm, jo, jp, ke, kg, kh, ki, km, kn, kp, kr, kw, ky, kz, la, lb, lc, li, lk, lr, ls, lt, lu, lv, ly, ma, mc, md, me, mf, mg, mh, mk, ml, mm, mn, mo, mp, mq, mr, ms, mt, mu, mv, mw, mx, my, mz, na, nc, ne, nf, ng, ni, nl, no, np, nr, nu, nz, om, pa, pe, pf, pg, ph, pk, pl, pm, pn, pr, ps, pt, pw, py, qa, re, ro, rs, ru, rw, sa, sb, sc, sd, se, sg, sh, si, sj, sk, sl, sm, sn, so, sr, ss, st, sv, sx, sy, sz, tc, td, tf, tg, th, tj, tk, tl, tm, tn, to, tr, tt, tv, tw, tz, ua, ug, uk, um, us, uy, uz, va, vc, ve, vg, vi, vn, vu, wf, ws, xk, ye, yt, za, zm, zw

  • stopsinteger | nullmin 0, max 2

    Maximum stops filter: 0=nonstop only, 1=max 1 stop, 2=max 2 stops. Omit for any number of stops.

  • include_airlinesstring | nullpattern ^[A-Za-z0-9_]{2,13}(,[A-Za-z0-9_]{2,13}){0,19}$

    Comma-separated IATA airline codes and/or alliances (STAR_ALLIANCE, SKYTEAM, ONEWORLD) to keep, e.g. AC,UA. Cannot be combined with exclude_airlines.

  • exclude_airlinesstring | nullpattern ^[A-Za-z0-9_]{2,13}(,[A-Za-z0-9_]{2,13}){0,19}$

    Comma-separated airline codes to drop. Google's rule: an itinerary also sold under a codeshare partner that is not excluded is kept.

  • max_priceinteger | nullmin 1, max 1000000

    Only itineraries at or below this price, in currency.

  • max_durationinteger | nullmin 30, max 5760

    Maximum door-to-door travel time per leg, minutes.

  • outbound_timesstring | nullpattern ^\d{1,2},\d{1,2}(,\d{1,2},\d{1,2})?$

    Hour window from,to for departure, optionally followed by from,to for arrival (0-23; 8,12 = leaves 08:00-12:59). SerpApi's format. First leg.

  • return_timesstring | nullpattern ^\d{1,2},\d{1,2}(,\d{1,2},\d{1,2})?$

    Hour window from,to for departure, optionally followed by from,to for arrival (0-23; 8,12 = leaves 08:00-12:59). SerpApi's format. Return leg; needs return_date.

  • carry_on_bagsintegerdefault 0min 0, max 1

    Carry-on bags per passenger to include in the price (Google adds the airline's bag fees).

  • checked_bagsintegerdefault 0min 0, max 2

    Checked bags per passenger to include in the price.

  • exclude_basic_economybooleandefault false

    Hide basic-economy fares (Google's "Economy (exclude Basic)"; offered on US routes).

  • less_emissionsbooleandefault false

    Only flights with lower-than-typical emissions.

  • layover_durationstring | nullpattern ^\d{1,4},\d{1,4}$

    Layover length window min,max in minutes, e.g. 60,240.

  • connecting_airportsstring | nullpattern ^[A-Za-z0-9]{3}(,[A-Za-z0-9]{3}){0,19}$

    Only connect through these airports (comma-separated IATA codes).

  • exclude_connecting_airportsstring | nullpattern ^[A-Za-z0-9]{3}(,[A-Za-z0-9]{3}){0,19}$

    Never connect through these airports.

  • sort_bystringdefault top_flightspattern ^(top_flights|price|departure_time|arrival_time|duration|emissions)$

    Result order (SerpApi sort_by 1-6 in the same order): top_flights, price, departure_time, arrival_time, duration, emissions. With anything but top_flights Google returns no separate best group.

    One ofarrival_timedeparture_timedurationemissionspricetop_flights

Example request

curl -X POST "https://api.scrapercompany.com/v1/serp/google_flights" \
  -H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "departure": "JFK",
    "arrival": "LAX",
    "departure_date": "2026-11-30",
    "return_date": "2026-12-05",
    "adults": 1,
    "currency": "USD"
  }'

Response

200 — Every itinerary for the first leg. Round-trip and multi-city options carry `departure_token`; complete ones (one-way, last leg) carry `booking_token` and `booking_url` instead. Metered responses carry x-credits-charged and x-credits-remaining headers (see credit headers).

200 response
{
  "departure_airport": "YUL",
  "arrival_airport": "CDG",
  "departure_date": "2029-03-28",
  "currency": "USD",
  "adults": 1,
  "itineraries": [
    {
      "legs": [
        {
          "segments": [
            {
              "departure_airport": "YUL",
              "arrival_airport": "CDG",
              "departure_time": "2026-11-04T18:10:00",
              "arrival_time": "2026-11-05T07:20:00",
              "airline": "Air Canada",
              "airline_code": "AC",
              "flight_number": "AC 874",
              "duration_minutes": 430,
              "aircraft": "Airbus A330",
              "cabin_class": "economy",
              "departure_airport_name": "Montréal-Pierre Elliott Trudeau International Airport",
              "arrival_airport_name": "Aéroport de Paris-Charles de Gaulle",
              "ticket_also_sold_by": [
                "LH 6809",
                "SN 9636"
              ],
              "legroom": "31 in",
              "legroom_category": "average",
              "overnight": true,
              "red_eye": false,
              "often_delayed_by_over_30_min": false,
              "carbon_emissions_kg": 325,
              "extensions": [
                "Average legroom (31 in)",
                "Wi-Fi for a fee"
              ],
              "airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/AC.png"
            }
          ],
          "departure_airport": "YUL",
          "arrival_airport": "CDG",
          "duration_minutes": 430,
          "stops": 0,
          "layover_airports": [],
          "is_direct": true,
          "layovers": [],
          "airlines": [
            "Air Canada"
          ],
          "departure_time": "2026-11-04T18:10:00",
          "arrival_time": "2026-11-05T07:20:00"
        }
      ],
      "price": 527,
      "currency": "USD",
      "display_price": "$527",
      "carbon_emissions_kg": 325,
      "carbon_emissions_comparison": "19% lower than typical",
      "trip_type": "round_trip",
      "total_stops": 0,
      "is_direct": true,
      "departure_token": "gf1.eNqFUMkKwjAU_Jd3TiGpVqU3TVuhBO1iIhpyEhe09NJWBfHfTRexxS2BlxneMvNygzPYBMEObJkWSYKqQOpHKo0kQbi8Cr3yn4IsD6w4A12rVMmBOtOGVSW4VQ4mNgcGwQax4Dmg7u5k6hF1x5hqPhr2Qf3w0quU29JdW9-NmCb8WbEReFMnCkFWfWMONtBj5C1db8bdq8dEFMRYzBm3AkHJhAnfC_klj0XkL04iDoW_1kttdBuPHY0OiYbbVKN9iYoM7g_hQ347",
      "google_flights_url": "https://www.google.com/travel/flights/search?tfs=CBwQAho_EgoyMDI2LTExLTA0Ih8KA1lVTBIKMjAyNi0xMS0wNBoDQ0RHKgJBQzIDODc0agc...",
      "group": "best",
      "price_exact": 526.19,
      "carbon_emissions": {
        "this_flight": 325000,
        "typical_for_this_route": 399000,
        "difference_percent": -19
      },
      "total_duration_minutes": 430,
      "carry_on_bags_included": 1,
      "airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/AC.png"
    },
    {
      "legs": [
        {
          "segments": [
            {
              "departure_airport": "YUL",
              "arrival_airport": "YYZ",
              "departure_time": "2026-11-04T10:10:00",
              "arrival_time": "2026-11-04T11:45:00",
              "airline": "Air Canada",
              "airline_code": "AC",
              "flight_number": "AC 407",
              "duration_minutes": 95,
              "aircraft": "Airbus A321",
              "cabin_class": "economy",
              "departure_airport_name": "Montréal-Pierre Elliott Trudeau International Airport",
              "arrival_airport_name": "Toronto Pearson International Airport",
              "ticket_also_sold_by": [],
              "legroom": "31 in",
              "legroom_category": "average",
              "overnight": false,
              "red_eye": false,
              "often_delayed_by_over_30_min": false,
              "carbon_emissions_kg": 71,
              "extensions": [
                "Average legroom (31 in)",
                "Free Wi-Fi"
              ],
              "airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/AC.png"
            },
            {
              "departure_airport": "YYZ",
              "arrival_airport": "CDG",
              "departure_time": "2026-11-04T21:10:00",
              "arrival_time": "2026-11-05T10:20:00",
              "airline": "Air Canada",
              "airline_code": "AC",
              "flight_number": "AC 872",
              "duration_minutes": 430,
              "aircraft": "Boeing 777",
              "cabin_class": "economy",
              "departure_airport_name": "Toronto Pearson International Airport",
              "arrival_airport_name": "Aéroport de Paris-Charles de Gaulle",
              "ticket_also_sold_by": [],
              "legroom": "31 in",
              "legroom_category": "average",
              "overnight": true,
              "red_eye": true,
              "often_delayed_by_over_30_min": true,
              "carbon_emissions_kg": 394,
              "extensions": [
                "Average legroom (31 in)",
                "Wi-Fi for a fee"
              ],
              "airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/AC.png"
            }
          ],
          "departure_airport": "YUL",
          "arrival_airport": "CDG",
          "duration_minutes": 1090,
          "stops": 1,
          "layover_airports": [
            "YYZ"
          ],
          "is_direct": false,
          "layovers": [
            {
              "duration_minutes": 565,
              "airport": "YYZ",
              "airport_name": "Toronto Pearson International Airport",
              "city": "Toronto",
              "departure_airport": "YYZ",
              "change_of_airport": false,
              "overnight": false
            }
          ],
          "airlines": [
            "Air Canada"
          ],
          "departure_time": "2026-11-04T10:10:00",
          "arrival_time": "2026-11-05T10:20:00"
        }
      ],
      "price": 535,
      "currency": "USD",
      "display_price": "$535",
      "carbon_emissions_kg": 464,
      "carbon_emissions_comparison": "16% higher than typical",
      "trip_type": "round_trip",
      "total_stops": 1,
      "is_direct": false,
      "departure_token": "gf1.eNqFUMkKwjAU_Jd3TiGpVqU3TVuhBO1iIhpyEhe09NJWBfHfTRexxS2BlxneMvNygzPYBMEObJkWSYKqQOpHKo0kQbi8Cr3yn4IsD6w4A12rVMmBOtOGVSW4VQ4mNgcGwQax4Dmg7u5k6hF1x5hqPhr2Qf3w0quU29JdW9-NmCb8WbEReFMnCkFWfWMONtBj5C1db8bdq8dEFMRYzBm3AkHJhAnfC_klj0XkL04iDoW_1kttdBuPHY0OiYbbVKN9iYoM7g_hQ347",
      "google_flights_url": "https://www.google.com/travel/flights/search?tfs=CBwQAhpgEgoyMDI2LTExLTA0Ih8KA1lVTBIKMjAyNi0xMS0wNBoDWVlaKgJBQzIDNDA3Ih8...",
      "group": "other",
      "price_exact": 534.12,
      "carbon_emissions": {
        "this_flight": 464000,
        "typical_for_this_route": 399000,
        "difference_percent": 16
      },
      "total_duration_minutes": 1090,
      "carry_on_bags_included": 1,
      "airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/AC.png"
    }
  ],
  "wire_bytes": 330950,
  "elapsed_s": 0.942,
  "cheapest_price": 527,
  "trip_type": "round_trip",
  "leg_index": 0,
  "legs_total": 2,
  "itinerary_count": 69,
  "best_count": 3,
  "price_insights": {
    "lowest_price": 527,
    "price_level": "typical",
    "typical_price_range": [
      475,
      530
    ],
    "price_history": [
      [
        1790568000,
        528
      ],
      [
        1790654400,
        528
      ]
    ]
  },
  "airlines_available": [
    {
      "code": "ONEWORLD",
      "name": "Oneworld",
      "type": "alliance"
    },
    {
      "code": "SKYTEAM",
      "name": "SkyTeam",
      "type": "alliance"
    }
  ],
  "google_flights_url": "https://www.google.com/travel/flights/search?tfs=CBwQAhoeEgoyMDI2LTExLTA0agcIARIDWVVMcgcIARIDQ0RHGh4SCjIwMjYtMTEtMTFqBwgBEgNDREdyBwgBEgNZVUxAAUgBcAGCAQsI____________AZgBAQ&hl=en&gl=us&curr=USD",
  "source": "rpc",
  "return_date": "2029-04-04"
}
Arrays are shortened to their first items.

Response fields

Fields marked required are always present; others appear when they apply.

  • departure_airportstringrequired

    Echo of the request's departure.

  • arrival_airportstringrequired

    Echo of the request's arrival.

  • departure_datestring (date)required

    Date of the leg these options are for.

  • return_datestring (date)

    Present only for round trips.

  • currencystringrequired

    The requested currency.

  • adultsintegerrequired
  • itinerariesarray of objectrequired

    Options for the leg being chosen: Google's best flights first, then the others.

    Show 22 child fields
    • itineraries[].legsarray of objectrequired

      The leg chosen in this call (one entry). Earlier legs are not repeated; /v1/serp/google_flights_booking returns every leg.

      Show 11 child fields
      • itineraries[].legs[].segmentsarray of objectrequired

        Flights in order.

      • itineraries[].legs[].departure_airportstringrequired

        IATA code.

      • itineraries[].legs[].arrival_airportstringrequired

        IATA code.

      • itineraries[].legs[].departure_timestring

        Airport-local wall-clock time as Google shows it, ISO 8601 without a UTC offset, e.g. 2026-11-04T18:10:00. Present only when known.

      • itineraries[].legs[].arrival_timestring

        Airport-local wall-clock time as Google shows it, ISO 8601 without a UTC offset, e.g. 2026-11-04T18:10:00. Present only when known.

      • itineraries[].legs[].duration_minutesinteger | nullrequired

        Door-to-door travel time including layovers, minutes.

      • itineraries[].legs[].stopsintegerrequired
      • itineraries[].legs[].layover_airportsarray of stringrequired

        IATA codes of the connection airports.

      • itineraries[].legs[].is_directbooleanrequired

        stops is 0.

      • itineraries[].legs[].layoversarray of objectrequired
      • itineraries[].legs[].airlinesarray of stringrequired

        Airline names Google lists for this leg.

    • itineraries[].pricenumber | nullrequired

      Google's displayed whole amount for the whole trip (every leg, all passengers), in currency. Google rounds up (527 where the exact fare is 526.19; see price_exact). When priced_in is set, the amount is in that currency instead.

    • itineraries[].currencystringrequired

      The requested currency.

    • itineraries[].display_pricestring | nullrequired

      price with its currency symbol, e.g. $527. Null when price is null or priced_in is set.

    • itineraries[].booking_tokenstring | nullrequired

      Pass to POST /v1/serp/google_flights_booking for sellers, prices and booking links. Set only on complete itineraries (one-way options, and the options of a trip's last leg); null when departure_token is set. Compatibility: until 2026-09-30 this field held Google's raw price token on every itinerary; that value is now price_token.

    • itineraries[].booking_urlstring | nullrequired

      Google Flights booking page for the complete itinerary. Set together with booking_token.

    • itineraries[].carbon_emissions_kginteger | nullrequired

      CO2e estimate for this itinerary, kilograms (rounded). carbon_emissions has the same figure in grams.

    • itineraries[].carbon_emissions_comparisonstring | nullrequired

      e.g. 19% lower than typical or typical for this route.

    • itineraries[].trip_typestringrequired

      one_way, round_trip or multi_city.

      One ofone_wayround_tripmulti_city

    • itineraries[].total_stopsintegerrequired

      Stops across legs.

    • itineraries[].is_directbooleanrequired

      total_stops is 0.

    • itineraries[].departure_tokenstring | nullrequired

      Pass to POST /v1/serp/google_flights_return for the next leg's options after choosing this one. Set while legs remain to choose (round-trip outbound, multi-city legs before the last); null when booking_token is set. Self-contained: nothing else is needed with it.

    • itineraries[].google_flights_urlstring | nullrequired

      Google Flights page for this option: the search page with the earlier legs chosen, or the booking page once every leg is chosen.

    • itineraries[].groupstringrequired

      best (Google's top flights) or other. Every option is other when sort_by is not top_flights.

      One ofbestother

    • itineraries[].price_exactnumber | nullrequired

      Price with minor units, from Google's price token (526.19 where price is 527). Null when the token has no amount or is in another currency.

    • itineraries[].price_tokenstring | nullrequired

      Google's own opaque price token for this option, on every itinerary (returned as booking_token until 2026-09-30). Usable as an itinerary key; no endpoint takes it.

    • itineraries[].priced_instring | nullrequired

      Set only when Google priced this option in another currency than requested: that ISO 4217 code. price is then in this currency and warnings says so.

    • itineraries[].carbon_emissionsobject | nullrequired

      Null when Google gives no estimate.

      Show 3 child fields
      • itineraries[].carbon_emissions.this_flightintegerrequired

        Estimate for this itinerary, grams of CO2e.

      • itineraries[].carbon_emissions.typical_for_this_routeinteger | nullrequired

        Typical estimate for this route, grams of CO2e.

      • itineraries[].carbon_emissions.difference_percentinteger | nullrequired

        This itinerary vs typical, percent (negative = lower).

    • itineraries[].total_duration_minutesinteger | nullrequired

      Sum of the legs' door-to-door durations, minutes; null when one is unknown.

    • itineraries[].carry_on_bags_includedinteger | nullrequired

      Carry-on bags included in the fare, as Google states it; null when not stated.

    • itineraries[].checked_bags_includedinteger | nullrequired

      Checked bags included in the fare, as Google states it; null when not stated.

    • itineraries[].airline_logostring | nullrequired

      Logo URL of the main airline; null when several airlines share the itinerary.

  • wire_bytesintegerrequired

    Size of Google's response, bytes.

  • elapsed_snumberrequired

    Time Google took to answer, seconds.

  • cheapest_pricenumber | nullrequired

    Lowest price in itineraries; null when none is priced.

  • trip_typestringrequired

    one_way, round_trip or multi_city.

    One ofone_wayround_tripmulti_city

  • leg_indexintegerrequired

    Which leg these options are for: 0 = first (outbound), 1 = return or second multi-city leg, and so on.

  • legs_totalintegerrequired

    Legs in the trip: 1 one-way, 2 round trip, 2-5 multi-city.

  • itinerary_countintegerrequired

    Number of entries in itineraries.

  • best_countintegerrequired

    How many itineraries have group: best.

  • price_insightsobject | null

    Null when Google gives none (some filtered searches). Omitted when itineraries is empty; that answer is not billed.

    Show 4 child fields
    • price_insights.lowest_pricenumber | nullrequired

      Lowest price Google shows for this search, in currency.

    • price_insights.price_levelstring | nullrequired

      Google's verdict on today's price: low (below its typical range), typical (inside it) or high (above it).

      One oflowtypicalhigh

    • price_insights.typical_price_rangearray of number | nullrequiredmin items 2, max items 2

      [low, high]: Google's typical price range for this trip.

    • price_insights.price_historyarray of array of numberrequired

      [[unix_seconds, price], ...]: Google's price history for this trip, about 60 days. Empty when Google gives none.

  • airlines_availablearray of objectrequired

    Airlines and alliances Google offers as filters for this search; the codes work in include_airlines.

    Show 3 child fields
    • airlines_available[].codestringrequired

      IATA airline code, or STAR_ALLIANCE / SKYTEAM / ONEWORLD.

    • airlines_available[].namestring | nullrequired
    • airlines_available[].typestringrequired

      One ofallianceairline

  • google_flights_urlstringrequired

    Google Flights search page for this trip.

  • sourcestringrequired

    rpc normally; html when the results came from Google's server-rendered page fallback, which holds only Google's first screen of results (about 8-10 itineraries).

    One ofrpchtml

  • warningsarray of stringrequired

    Notices about this answer, e.g. that Google priced some options in another currency (see each itinerary's priced_in). Empty when none.

Errors

Errors return a JSON body with a detail field. Failed requests are not charged. See Errors for the full list and retry advice.

StatusMeaningRetry?
401Unauthorized

Missing or invalid API key.

{"detail":"missing or invalid API key"}
No, fix the request
402Payment Required

Not enough credits for this request. Only returned once credit enforcement is switched on; during the beta metering runs in shadow mode and never blocks.

{"detail":"insufficient credits: this request costs 5, 0 available. Credits renew 2026-11-01."}
No, fix the request
404Not Found

The property, stay, job or record was not found.

{"detail":"job not found"}
No, fix the request
422Unprocessable Content

Request validation failed. detail is a list of problems for schema errors, or a string for semantic checks performed by the endpoint.

{"detail":[{"loc":["body","name"],"msg":"Field required","type":"missing"}]}
No, fix the request
429Too Many Requests

Too many requests: the key's requests-per-minute limit was exceeded, or (once credit enforcement is on) the plan's concurrent-request limit. No rate-limit or Retry-After headers are sent; back off and retry.

{"detail":"rate limit 60/min exceeded"}
Yes, with backoff
502Bad Gateway

The upstream source failed, blocked the request or returned an unusable answer. Safe to retry later; failed requests are not charged.

{"detail":"RuntimeError"}
Yes, with backoff

Try it

  1. Export your key: export SCRAPERCOMPANY_API_KEY=sk_... (no key yet? request access).
  2. Copy the cURL example above and run it in a terminal.
  3. Or open the interactive playground on api.scrapercompany.com, paste your key and pick this endpoint.

Credits

3 credits per successful call. Failed, blocked and empty results are free. Credit metering is in beta and does not block requests yet.