Travel & Lodging

Flights API

The Flights API returns flight search and fare data as clean JSON.

5 actionsLive JSON1,000 free creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary search_flights endpoint returns flights with price and segments (carrier, flight number, departure and arrival), and you can search places, pull airport_info, a price_graph and seat_info. It is built for travel apps and fare monitoring that need flight search without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.

Live example

Real request and response JSON

Captured from the indexed primary action, search_flights, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/flights/v1/search_flights",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "origin": "London",
    "destination": "New York",
    "depart_date": "2026-08-17",
    "limit": 5
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "flights",
    "endpoint": "search_flights",
    "mode": "live",
    "latency_ms": 3780.8,
    "record_count": 5,
    "bytes": 26789,
    "cache_hit": false,
    "completeness_pct": 100,
    "trip_type": "oneway",
    "total_available": 50,
    "has_more_pending": false,
    "polls": 0,
    "cabin_class": "ECONOMY",
    "sort": "PRICE",
    "requests": 3
  },
  "data": {
    "flights": [
      {
        "id": "ItineraryOneWay:eyJwcm92aWRlcnMiOiJLSVdJLUJBU0lDOktJV0kiLCJyb3V0ZV9kYXRhIjoiUks6ODYwNTpTVE46MTc4NzAwMDQwMDpFREk6MTc4NzAwNTIwMDplY29ub215OkZhbHNlOjo6Ukt8V1M6Mzc6RURJOjE3ODcwNDkwMDA6WVlaOjE3ODcwNzY2MDA6ZWNvbm9teTpUcnVlOjpUcnVlOldTfFBEOjIxNDM6WVRaOjE3ODcwOTk0MDA6RVdSOjE3ODcxMDQ4MDA6ZWNvbm9teTpUcnVlOjpUcnVlOlAzIiwicHJpY2UiOiI1MjgifQ==",
        "type": "oneway",
        "price": {
          "amount": 528,
          "currency": "USD"
        },
        "price_eur": {
          "amount": 461.659526,
          "currency": "eur"
        },
        "duration_seconds": 104400,
        "cabin_classes": [
          "ECONOMY"
        ],
        "booking_url": "https://www.kiwi.com/en/booking/?direct=true&locale=en&currency=usd&passengers=1-0-0&token=H4x4DbJeoaJndFxr-ReLNqgpiJS59TpPEFg6RQ_k09RuxvyRkJTIJx-udfpE0g_NQMcrs5nckIB6SnIvgEilgf1Dyz5hC7vugZmWY-EJRYgzmPDXDvkwuI8Qf_2o6JsVNnDOw87rm1q3Ri3HroVtnHy8ltfttAugiDBFvHZv_lsLepLvhQN5eFL0mXyFeKBgai0D4OKtDgSV3MaiVFpgCtsTlnyEwscjH0tzEQqhVBnuZvGm_YUuoztiaPrRyhQzw_qKD7e9ZPGjUFG01q3XGT65TGeROZ8cYywpelhZePZtBZBXqI6OJlNKGgrCRtCAOS4hHMINcTNOmk7YEoUjsGaQk-7N_5hPVwqrzBnYUnSVQ7Dzo4UcawQmtRs9XXq07d5thQUmr5EGBEzoS_DHC7vJfzsKJX__HRPJM3qGJYZPn10nhhmywSRNhBi-I-AoyFuLIOhcT6Ku2tqbRe6d5XNz6Zuq4X0v42txqFbSKnpWepqtmIxQ1GrOBY-33",
        "origin": "STN",
        "destination": "EWR",
        "departure": "[redacted-phone]T22:00:00",
        "arrival": "[redacted-phone]T22:00:00",
        "stops": 2,
        "segments": [
          {
            "carrier": "[trimmed-depth]",
            "carrier_code": "[trimmed-depth]",
            "flight_no": "[trimmed-depth]",
            "operating_carrier": "[trimmed-depth]",
            "from": "[trimmed-depth]",
            "from_name": "[trimmed-depth]",
            "from_city": "[trimmed-depth]",
            "to": "[trimmed-depth]",
            "to_name": "[trimmed-depth]",
            "to_city": "[trimmed-depth]",
            "departure": "[trimmed-depth]",
            "arrival": "[trimmed-depth]",
            "departure_utc": "[trimmed-depth]",
            "arrival_utc": "[trimmed-depth]",
            "duration_seconds": "[trimmed-depth]"
          },
          {
            "carrier": "[trimmed-depth]",
            "carrier_code": "[trimmed-depth]",
            "flight_no": "[trimmed-depth]",
            "operating_carrier": "[trimmed-depth]",
            "from": "[trimmed-depth]",
            "from_name": "[trimmed-depth]",
            "from_city": "[trimmed-depth]",
            "to": "[trimmed-depth]",
            "to_name": "[trimmed-depth]",
            "to_city": "[trimmed-depth]",
            "departure": "[trimmed-depth]",
            "arrival": "[trimmed-depth]",
            "departure_utc": "[trimmed-depth]",
            "arrival_utc": "[trimmed-depth]",
            "duration_seconds": "[trimmed-depth]"
          },
          {
            "carrier": "[trimmed-depth]",
            "carrier_code": "[trimmed-depth]",
            "flight_no": "[trimmed-depth]",
            "operating_carrier": "[trimmed-depth]",
            "from": "[trimmed-depth]",
            "from_name": "[trimmed-depth]",
            "from_city": "[trimmed-depth]",
            "to": "[trimmed-depth]",
            "to_name": "[trimmed-depth]",
            "to_city": "[trimmed-depth]",
            "departure": "[trimmed-depth]",
            "arrival": "[trimmed-depth]",
            "departure_utc": "[trimmed-depth]",
            "arrival_utc": "[trimmed-depth]",
            "duration_seconds": "[trimmed-depth]"
          }
        ],
        "carriers": [
          "PD",
          "RK",
          "WS"
        ]
      },
      {
        "id": "ItineraryOneWay:eyJwcm92aWRlcnMiOiJLSVdJLUJBU0lDOktJV0kiLCJyb3V0ZV9kYXRhIjoiRlI6MjU2OlNUTjoxNzg3MDAzMTAwOkRVQjoxNzg3MDA3OTAwOmVjb25vbXk6RmFsc2U6Ojp8QjY6ODQyOkRVQjoxNzg3MDQ5MDAwOkpGSzoxNzg3MDc2MzYwOmVjb25vbXk6VHJ1ZTpQSVQ6VHJ1ZTpCNiIsInByaWNlIjoiNTMyIn0=",
        "type": "oneway",
        "price": {
          "amount": 532,
          "currency": "USD"
        },
        "price_eur": {
          "amount": 465.156947,
          "currency": "eur"
        },
        "duration_seconds": 73260,
        "cabin_classes": [
          "ECONOMY"
        ],
        "booking_url": "https://www.kiwi.com/en/booking/?direct=true&locale=en&currency=usd&passengers=1-0-0&token=Hqz9Gb6d0gLO7Yye9TBaUDtGYhUhv0uCcOpCUTBB1_56LxQH8zZ9-dHIy3Yn-01VLNV4vO2bTr0mLmLbfZJ1wRTD_3tf00cG1JHJNQ08tbDDS2lJY7OxvhbuSJBW9hsFS4NqTNrhA-in11XIZXAOl-hnIM9INm7hVw2AIzRx5stwibay7USR-6JGS6iaCs6sepCPd8wm75raVMT5aPpdB_Q4uIZKxty8VAVxGzhKc2IV9ln90lZfpmbMUbGdIgS6tLIchUsZvzyHMTDCd4knzIorHHOv6pTXNwBttCInqPeN1pZzU1bxRg-oc6Wdav6Ybn37drLO-qYYVbb5yPyqgCA3_paBkoSoq5BGo3_R8gDIqwr0ZIdkuvRxApK42QTG3ADN7dCu1k4ogNMJGDRK6HphGLxJORZsijYIqBQsCse3GNoiPx7ely_mZ0BmJUwE9Ft0HzhGudCENDnBcfgxCF0hqMlyr5Z0sLyBQEWQPnyBoMhaB4kgG2fELxWvc",
        "origin": "STN",
        "destination": "JFK",
        "departure": "[redacted-phone]T22:45:00",
        "arrival": "[redacted-phone]T14:06:00",
        "stops": 1,
        "segments": [
          {
            "carrier": "[trimmed-depth]",
            "carrier_code": "[trimmed-depth]",
            "flight_no": "[trimmed-depth]",
            "operating_carrier": "[trimmed-depth]",
            "from": "[trimmed-depth]",
            "from_name": "[trimmed-depth]",
            "from_city": "[trimmed-depth]",
            "to": "[trimmed-depth]",
            "to_name": "[trimmed-depth]",
            "to_city": "[trimmed-depth]",
            "departure": "[trimmed-depth]",
            "arrival": "[trimmed-depth]",
            "departure_utc": "[trimmed-depth]",
            "arrival_utc": "[trimmed-depth]",
            "duration_seconds": "[trimmed-depth]"
          },
          {
            "carrier": "[trimmed-depth]",
            "carrier_code": "[trimmed-depth]",
            "flight_no": "[trimmed-depth]",
            "operating_carrier": "[trimmed-depth]",
            "from": "[trimmed-depth]",
            "from_name": "[trimmed-depth]",
            "from_city": "[trimmed-depth]",
            "to": "[trimmed-depth]",
            "to_name": "[trimmed-depth]",
            "to_city": "[trimmed-depth]",
            "departure": "[trimmed-depth]",
            "arrival": "[trimmed-depth]",
            "departure_utc": "[trimmed-depth]",
            "arrival_utc": "[trimmed-depth]",
            "duration_seconds": "[trimmed-depth]"
          }
        ],
        "carriers": [
          "B6",
          "FR"
        ]
      },
      {
        "id": "ItineraryOneWay:eyJwcm92aWRlcnMiOiJLSVdJLUJBU0lDOktJV0kiLCJyb3V0ZV9kYXRhIjoiUks6ODYwNTpTVE46MTc4NzAwMDQwMDpFREk6MTc4NzAwNTIwMDplY29ub215OkZhbHNlOjo6Ukt8V1M6NzM6RURJOjE3ODcwNDE1MDA6WUhaOjE3ODcwNjQ2MDA6ZWNvbm9teTpUcnVlOjpUcnVlOldTfFdTOjgwMzpZSFo6MTc4NzA3MDYwMDpZWVo6MTc4NzA3OTYwMDplY29ub215OkZhbHNlOjo6V1N8UEQ6NjA3OllZWjoxNzg3MDg5ODAwOkxHQToxNzg3MDk1NTAwOmVjb25vbXk6VHJ1ZTo6VHJ1ZTpQRCIsInByaWNlIjoiNTQxIn0=",
        "type": "oneway",
        "price": {
          "amount": 541,
          "currency": "USD"
        },
        "price_eur": {
          "amount": 473.026143,
          "currency": "eur"
        },
        "duration_seconds": 95100,
        "cabin_classes": [
          "ECONOMY"
        ],
        "booking_url": "https://www.kiwi.com/en/booking/?direct=true&locale=en&currency=usd&passengers=1-0-0&token=HqNot3bc1zIvThuL8OuCgNn0pCObmGiRghZJ6aH2loI--MGEvsvZz6gpyvHw0ti1VsBy2kadvUCNfkmCTAT57jfk1Uv4MvtjHhrvypoWtFxJQspgYWsrAnr1OegKfdV2kMWkahRedWA0ZVe8EhIEYmAfNCVvgnT8ls7WFXVxojtZnZe0psacQbyPJB2MbbskDaWCg4inTMmmfh8Ur-ieQqG8uymTAf39hfZkGQ5LLhksLeWe9SnPCsUb5bhH-vBHdX9m7Vh6TaP28ZowJqOkxa2iA_pkHBjkynOVhH_bCDNZNHubuZiB79rFARKUpsCcFNGqIkvYsQ2b8KuV6l29n_aqPnmvBmRol9bme_aCIEmhG90zggtHeIr_4cBmJy5c1Ms-VbYThw5Qswq5OMINZ5rk6iELkKkYaReYk6ez7tVRB2FtYiQ76GZtuDVE-3yTfSUeXeAEsimTVeQzFG4u8djAXzCpuMTrHDlVp4UnsbWBBVcnm8xDE7j9jR4vB",
        "origin": "STN",
        "destination": "LGA",
        "departure": "[redacted-phone]T22:00:00",
        "arrival": "[redacted-phone]T19:25:00",
        "stops": 3,
        "segments": [
          {
            "carrier": "[trimmed-depth]",
            "carrier_code": "[trimmed-depth]",
            "flight_no": "[trimmed-depth]",
            "operating_carrier": "[trimmed-depth]",
            "from": "[trimmed-depth]",
            "from_name": "[trimmed-depth]",
            "from_city": "[trimmed-depth]",
            "to": "[trimmed-depth]",
            "to_name": "[trimmed-depth]",
            "to_city": "[trimmed-depth]",
            "departure": "[trimmed-depth]",
            "arrival": "[trimmed-depth]",
            "departure_utc": "[trimmed-depth]",
            "arrival_utc": "[trimmed-depth]",
            "duration_seconds": "[trimmed-depth]"
          },
          {
            "carrier": "[trimmed-depth]",
            "carrier_code": "[trimmed-depth]",
            "flight_no": "[trimmed-depth]",
            "operating_carrier": "[trimmed-depth]",
            "from": "[trimmed-depth]",
            "from_name": "[trimmed-depth]",
            "from_city": "[trimmed-depth]",
            "to": "[trimmed-depth]",
            "to_name": "[trimmed-depth]",
            "to_city": "[trimmed-depth]",
            "departure": "[trimmed-depth]",
            "arrival": "[trimmed-depth]",
            "departure_utc": "[trimmed-depth]",
            "arrival_utc": "[trimmed-depth]",
            "duration_seconds": "[trimmed-depth]"
          },
          {
            "carrier": "[trimmed-depth]",
            "carrier_code": "[trimmed-depth]",
            "flight_no": "[trimmed-depth]",
            "operating_carrier": "[trimmed-depth]",
            "from": "[trimmed-depth]",
            "from_name": "[trimmed-depth]",
            "from_city": "[trimmed-depth]",
            "to": "[trimmed-depth]",
            "to_name": "[trimmed-depth]",
            "to_city": "[trimmed-depth]",
            "departure": "[trimmed-depth]",
            "arrival": "[trimmed-depth]",
            "departure_utc": "[trimmed-depth]",
            "arrival_utc": "[trimmed-depth]",
            "duration_seconds": "[trimmed-depth]"
          }
        ],
        "carriers": [
          "PD",
          "RK",
          "WS"
        ]
      }
    ],
    "count": 5,
    "trip_type": "oneway",
    "origin": {
      "input": "London",
      "id": "City:london_gb",
      "name": "London",
      "code": "LON",
      "type": "City",
      "slug": "london-united-kingdom",
      "resolved_from": "places"
    },
    "destination": {
      "input": "New York",
      "id": "City:new-york-city_ny_us",
      "name": "[redacted-name]",
      "code": "NYC",
      "type": "City",
      "slug": "new-york-city-new-york-united-states",
      "resolved_from": "places"
    },
    "currency": "USD",
    "total_available": 50
  }
}
Actions

What the Flights API does

ActionDescriptionConcrete use caseKey params
search_flightsSearch flights from origin to destination for a given date. Returns ranked itineraries with price, all flight segments (carrier, flight number, departure/arrival times), total journey duration and a direct booking link. Supports one-way and return trips.Travel apps call search_flights to search flights from origin to destination for a given date.origin, destination, depart_date, return_date, depart_date_end, ...
search_placesResolve a city or airport name to location IDs used in flight search — useful when you want to pin an exact airport rather than a city (e.g. 'Heathrow' → LHR).Pricing monitors call search_places to resolve a city or airport name to location IDs used in flight search.query, limit
airport_infoLook up airports and cities by name or IATA code. Returns full reference data: IATA + ICAO codes, GPS coordinates, timezone, country, and — for a city — the list of all its airports. Useful to validate a code, geolocate an airport, or map a city to its airports.Itinerary products call airport_info to look up airports and cities by name or IATA code.query, limit
price_graphFind the cheapest day to fly. Returns the lowest price for each departure date across a date range, each tagged CHEAP / AVERAGE / EXPENSIVE, plus the single cheapest option. Set nights_min/nights_max for a return trip; omit them for one-way. One fast call.Hospitality analysts call price_graph to find the cheapest day to fly.origin, destination, depart_date, depart_date_end, nights_min, ...
seat_infoGet the seat specs and amenities for a specific flight: seat pitch, width and recline (legroom/comfort), plus power, Wi-Fi and in-flight entertainment availability. Look up by airline + flight number + route + date. Returns honest empty when the flight is unknown.Travel apps call seat_info to get the seat specs and amenities for a specific flight.carrier, flight_number, source, destination, date, ...
Code samples

Call search_flights from your stack

curl -X POST https://api.reefapi.com/flights/v1/search_flights \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"origin":"London","destination":"New York","depart_date":"2026-08-17","limit":5}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.flights.search_flights with {"origin":"London","destination":"New York","depart_date":"2026-08-17","limit":5}.
Use cases

Who uses this API and why

  • Travel apps call search_flights to show fares by route and date.
  • Fare monitors use price_graph to find the cheapest days to fly.
  • Booking flows use seat_info and airport_info to complete a trip.
FAQ

Questions developers ask before integrating

What is the Flights API?

Flights API is a ReefAPI endpoint group for search flights with prices, routes and times. It returns live JSON through POST requests under /flights/v1.

Is the Flights API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Flights calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Flights login or account?

No login to Flights is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Flights data?

The page example is captured from a live search_flights call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Flights API use?

Flights actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Flights from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call flights actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Flights API a Flights scraper?

It is the managed alternative to a DIY Flights scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same search flights with prices, routes and times back as clean JSON.

Why does my Flights scraper keep getting blocked?

Most Flights scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.

docs / flights

Flights

Search flights with prices, routes and times.

base /flights/v15 endpoints
post/flights/v1/search_flights2 credits

Search flights from origin to destination for a given date. Returns ranked itineraries with price, all flight segments (carrier, flight number, departure/arrival times), total journey duration and a direct booking link. Supports one-way and return trips.

ParameterAllowed / rangeDescription
originrequiredDeparture: IATA code (LON/JFK), city name, or Kiwi location id.
destinationrequiredArrival: IATA code, city name, or Kiwi location id.
depart_daterequiredOutbound date, YYYY-MM-DD (must be a future date).
return_dateoptionalReturn date, YYYY-MM-DD. Omit for a one-way search.
depart_date_endoptionalEnd of an outbound date RANGE (YYYY-MM-DD); search any departure between depart_date and this.
return_date_endoptionalEnd of a return date RANGE (YYYY-MM-DD).
adults = 1optional0–Number of adult passengers.
children = 0optional0–Number of child passengers (2-11).
infants = 0optional0–Number of infant passengers (<2).
cabin_class = economyoptionaleconomy · premium_economy · business · firstCabin class (unknown values fall back to economy).
currency = USDoptionalISO-4217 currency for prices (e.g. USD, EUR, GBP). Default USD.
max_stopsoptional0–Max number of stops (0 = direct only). Omit for any.
sort = priceoptionalprice · duration · quality · date · popularityResult ordering (unknown values fall back to price).
limit = 20optional1–Max itineraries to return (default 20).
Try in playground →
post/flights/v1/search_places1 credit

Resolve a city or airport name to location IDs used in flight search — useful when you want to pin an exact airport rather than a city (e.g. 'Heathrow' → LHR).

ParameterAllowed / rangeDescription
queryrequiredCity or airport name / IATA code to resolve to Kiwi place ids.
limit = 8optional1–Max place matches to return (default 8).
Try in playground →
post/flights/v1/airport_info1 credit

Look up airports and cities by name or IATA code. Returns full reference data: IATA + ICAO codes, GPS coordinates, timezone, country, and — for a city — the list of all its airports. Useful to validate a code, geolocate an airport, or map a city to its airports.

ParameterAllowed / rangeDescription
queryrequiredAirport or city name / IATA code (e.g. 'Heathrow', 'LHR', 'Istanbul').
limit = 5optional1–Max matches to return (default 5).
Try in playground →
post/flights/v1/price_graph2 credits

Find the cheapest day to fly. Returns the lowest price for each departure date across a date range, each tagged CHEAP / AVERAGE / EXPENSIVE, plus the single cheapest option. Set nights_min/nights_max for a return trip; omit them for one-way. One fast call.

ParameterAllowed / rangeDescription
originrequiredDeparture: IATA code (LON/JFK), city name, or Kiwi location id.
destinationrequiredArrival: IATA code, city name, or Kiwi location id.
depart_daterequiredStart of the departure date range, YYYY-MM-DD (future).
depart_date_endoptionalEnd of the departure date range, YYYY-MM-DD. Defaults to ~30 days after depart_date if omitted.
nights_minoptional0–Minimum number of nights at the destination — turns the price graph into a return-trip search (omit both for one-way).
nights_maxoptional0–Maximum number of nights at the destination — turns the price graph into a return-trip search (omit both for one-way).
adults = 1optional0–Number of adult passengers.
children = 0optional0–Number of child passengers (2-11).
infants = 0optional0–Number of infant passengers (<2).
cabin_class = economyoptionaleconomy · premium_economy · business · firstCabin class (unknown values fall back to economy).
currency = USDoptionalISO-4217 currency for prices (e.g. USD, EUR, GBP). Default USD.
Try in playground →
post/flights/v1/seat_info1 credit

Get the seat specs and amenities for a specific flight: seat pitch, width and recline (legroom/comfort), plus power, Wi-Fi and in-flight entertainment availability. Look up by airline + flight number + route + date. Returns honest empty when the flight is unknown.

ParameterAllowed / rangeDescription
carrierrequiredOperating airline IATA code (2 chars, e.g. BA = British Airways, AA = American, LH = Lufthansa).
flight_numberrequiredFlight number (numeric part only, e.g. 177; 'BA177' is also accepted).
sourcerequiredDeparture airport IATA code (e.g. LHR).
destinationrequiredArrival airport IATA code (e.g. JFK).
daterequiredFlight date, YYYY-MM-DD (must be a future date).
cabin_class = economyoptionaleconomy · premium_economy · business · firstCabin class (unknown values fall back to economy).
Try in playground →