Flight Search API & MCP for AI Agents | FetchLayer
Unofficial Third-party API
1 endpoints live

Flight data.
Without a partner agreement.

48 priced itineraries in one call Layovers with airport & duration One-way or round trip Any cabin, any currency MCP ready

Priced itineraries for any route and date — the carrier, the stops, the layovers, the times and the cabin — one-way or round trip, as clean JSON via REST or MCP.

Free tier included No credit card No scraper maintenance

Trusted by developers shipping real products.

246,825 served today

POST /flights/search
200 OK

Request

$ curl -X POST \
  https://api.fetchlayer.dev/flights/search \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"origin":"JFK","destination":"LHR",
      "departureDate":"2026-10-15"}'

Response

{
  "itineraryCount": 48,
  "scrapedAt": "2026-09-17T11:59:50Z",
  "currency": "USD",
  "itineraries": [{
    "outbound": {
      "segments": [{ "airline": "British Airways",
        "departureTime": "7:50 AM",
        "arrivalTime": "7:45 PM" }],
      "stops": 0, "layovers": [],
      "durationMinutes": 415
    },
    "price": { "amount": 295, "currency": "USD" },
    "priceType": "one_way"
  }], "pagesFetched": 1
}

Used by developers at

Individual developers or teams — not official partnerships

Built for feedback workflows

Fetch the public signal. Use it wherever your team works.

Every fare on the route, in one call

Name two airports and a date and the whole day comes back priced — a measured New York to London search returned 48 itineraries, and every one of them had a price on it. There is no paging to walk and no second request to make: one call is the complete answer for that route and date.

Budget carriers ranked beside the flag carriers

One list, both ends of the market. A measured Dublin to Stansted search put Ryanair at $22 next to Turkish Airlines in the same response, sorted on price like any other option. A Los Angeles to Tokyo search returned United, JAL, ANA and Philippine Airlines together. You are not looking at one alliance or one channel.

Where it stops, and how long you wait there

Connections come with the detail that decides whether one is tolerable: the airport code, the airport's full name, the city and the wait in minutes. A measured Los Angeles to Tokyo option came back as one stop with 125 minutes at Manila. The stop count is its own field, so a connection can never be mistaken for a nonstop.

Times and total duration, not just a price

Departure and arrival times, the dates on both ends — so an overnight arriving two days later is obvious — the operating airline for each leg, and the total door-to-door duration in minutes. Enough to rank a day of options by what the trip actually costs in time as well as money.

A timestamp on every price you receive

Fares move by the hour, and a number without a time attached is a number you cannot trust. Every response records exactly when the fares were read, so a figure you are holding can be aged, refreshed or discarded on evidence rather than on a guess about how long it has been sitting in your cache.

The cabin you actually fly, and everyone travelling

Price economy, premium economy, business or first and get results for that cabin — a measured business-class search on New York to London returned 44 priced options. Filter to nonstop when a connection is not on the table. And price the whole party in one request: up to 9 adults, with children and infants counted separately rather than rounded into "passengers".

Round trips priced whole, one-ways priced clean

Add a return date and the fare covers both directions, labelled as a round-trip total so it is never mistaken for a one-way. Leave it off and you get a straight one-way search with no invented return window. Either way the price is in the currency you asked for, as a number with its code beside it.

FetchLayer Research Chat

Ask what the route actually costs—then export it.

Prefer not to write code? Describe the trip in FetchLayer Research Chat and get a table back, with every fare stamped with the moment it was read rather than presented as a price that holds.

  • Ask questions in plain English
  • Analyze themes, sentiment, and pain points
  • Download the structured results as CSV or JSON
Compare fares in Chat

No code or setup required · Uses your FetchLayer credits

Flight Search research

What does Dublin to London cost next Thursday, and which carriers fly it? Show me nonstops only, cheapest first.

Y

18 itineraries, all nonstop, read four minutes ago. Ryanair is cheapest at $22 for an 80-minute hop into Stansted; Ryanair UK and Turkish Airlines make up the rest. The spread across the day is $22 to $186, and the late-evening departures are the cheap ones.

flights-dub-lon.csv

18 itineraries · 11 columns · ready to download

CSV

From raw feedback to action

One request is the start of the workflow.

Store the structured response, run it on a schedule, pass it to an LLM, or feed it into the system your team already uses. FetchLayer handles retrieval so you can focus on the outcome.

  1. 01

    Name the route and the date

    Two three-letter airport codes and a departure date is the whole required request. Add a return date for a round trip, or leave it off for a one-way — there is no implicit return window either way.

  2. 02

    Narrow it to what you would actually book

    Filter to nonstop, choose the cabin, set the currency, and count adults, children and infants separately. Every result comes back priced for exactly that, rather than for a default you then have to correct.

  3. 03

    Read the stops, not the legs

    Each itinerary carries its stop count as a field and its layovers as a list — airport, city and wait in minutes. A one-stop trip can be described as a single leg, so the count is the number to trust.

  4. 04

    Check how old the price is

    Every response is stamped with the moment the fares were read. Compare that against your own clock before acting on a number, and refresh on evidence rather than on a fixed cache window.

MCP & agents

Live

Your AI already knows how to use this.

Use the Flight Search endpoint directly from your MCP-compatible agent. Ask it to retrieve public feedback, identify patterns, and turn the result into a useful brief without writing integration glue.

1
Pick your editor
2
Agent discovers 1 tools
3
Query any platform instantly
connect your agent ~30s

Pick your editor and we hand you the config with your key already in it — no JSON to hand-edit, no wrapper code.

Get your free API key

Free tier · no credit card · any MCP host

New chat fetchlayer connected

Cheapest nonstop Dublin to London next Thursday?

Used fetchlayer.flights_search

Ryanair at $22, departing 10:00 PM and landing at Stansted 80 minutes later. 18 nonstops on the day, spread $22 to $186 — the late departures are the cheap ones. Turkish Airlines also flies it. These fares were read four minutes ago; they move, so re-check before you book.

Ask a follow-up…

Works with every MCP-compatible tool

Cursor
Claude
VS Code
Windsurf
Cline
Hermes
OpenClaw
Kiro
No wrapper code
All 1 endpoints exposed as tools
Official & maintained
Free to install

Use cases

What teams build on fares, routes and schedules.

Itineraries and prices as rows you can sum. Here is what that is for.

01

Fare benchmarking by route

One search returns every itinerary it found for a route and date, each with a price — 48 of them on a measured New York to London search, 18 on Dublin to London Stansted. A route’s real price distribution, not one headline number.

pricingdatasetsresearch
02

Itinerary comparison

Every option carries its carriers, stop count, departure and arrival times and cabin, so "cheapest" and "fastest" and "nonstop" are three columns you can sort rather than three searches.

productsresearchtravel
03

Round-trip total pricing

Give a return date and the price covers the whole trip rather than a leg you have to double. What the response does and does not carry is stated plainly, so nothing gets quietly assumed.

pricingaccuracytravel
04

Layover-aware routing

Stops come with the detail: which airport, which city, how long you sit there. A two-hour connection in Manila and a two-hour connection at your origin are not the same trip, and the data says which one you got.

datasetstravelproducts
05

Cabin and carrier mix

Search economy, premium economy, business or first, and see who actually flies it — a measured Dublin to Stansted search returned Ryanair, Ryanair UK and Turkish Airlines side by side. Full-service and low-cost carriers in the same result set.

researchbenchmarkingtravel
06

Price tracking and travel products

Fares move, and every response is timestamped so you always know how old the number in front of you is. Run a route on a schedule and you have a price history rather than a screenshot.

trendscronproducts

Compare approaches

Spend time on the insight, not the collection layer.

What you needFetchLayerOfficial APIBuild it yourself
Whole route priced in one callPartner onlyYou page through
Budget and full-service carriers togetherOne airlineYou merge sources
Layover airport, city and durationVariesYou derive it
Prices returned as numbersVariesYou parse the string
A timestamp on every faren/aYou guess the age
No airline account or contractApplication requiredYour problem
Ready for AI and MCP workflowsn/aYour integration

FetchLayer provides access to publicly available data. It is not affiliated with, endorsed by, or sponsored by the platform.

Pricing

Start free. Scale when ready.

Pay per request with no commitment, or lock in a flat monthly rate with built-in savings.

Free plan — 30 requests

Verify responses, inspect the API, no credit card required.

Try free

Pay as you go

$1.99

per 1,000 requests

$0.00199 per request · credits never expire

How credits work — no multipliers

One credit = one API call, on every endpoint and platform. No matter how many results come back, you pay for the call, not the output size. Most scraping APIs charge multipliers of 5x, 25x, even 75x per call depending on the target — here it's always 1.

  • No multipliers — 1 request = 1 credit
  • No monthly commitment
  • Credits never expire
  • Same API & MCP access as subscribers
  • ∞ req/min, ∞ API keys
Get API key

Expiry

Credits stay until you use them. No monthly reset, no pressure to hit a quota.

0

Commitments

No subscription, no contract, no minimums. Start, pause, or scale whenever.

100%

Access

Every endpoint and MCP included. Not a limited tier — same data as any subscriber.

API reference

Every parameter, documented.

All requests are POST with a JSON body and Bearer auth header.

POST /flights/search

Priced itineraries for a route and date: the operating carrier, the stop count, every layover with its airport, city and duration, departure and arrival times, total duration and the fare. One-way or round trip, in the cabin and currency you ask for.

origin* string Departure airport, three-letter code, e.g. "JFK".
destination* string Arrival airport, three-letter code, e.g. "LHR".
departureDate* string YYYY-MM-DD. Must not be in the past.
returnDate string YYYY-MM-DD. Omit for a one-way search.
adults / children / infants number Travellers. Up to 9 adults; children and infants counted separately.
cabinClass string economy, premium_economy, business, first. Defaults to economy.
nonstopOnly boolean Exclude itineraries with stops.
currency string Three-letter code to price results in, e.g. "USD".

Fields marked * are required. Full API reference →

FAQ

Common questions.

What is the Flight Search API?

A REST endpoint and MCP tool that returns flight data as structured JSON. You send an origin, a destination and a date with a Bearer token; you get back priced itineraries for that route — the operating carrier, how many stops, where it stops and for how long, departure and arrival times, and the total. One-way or round trip, in the cabin and currency you ask for. No airline account, no partner agreement, no HTML to parse.

How many results come back?

As many as the route has. A measured JFK→LHR search on a single October date returned 48 priced itineraries in one call; DUB→STN returned 18; a LAX→NRT round trip for two adults returned 18. Every one of them was priced. There is no paging to walk and no second call to make — one request is the whole answer for that route and date.

Which airlines are covered?

Both ends of the market, side by side in the same response. A measured Dublin to London Stansted search returned Ryanair and Ryanair UK alongside Turkish Airlines — a budget carrier and a flag carrier ranked together on price. A measured Los Angeles to Tokyo search returned United, JAL, ANA and Philippine Airlines. You are not getting one alliance or one booking channel.

Do I get layovers, or just a stop count?

Both, and you should read the count rather than infer it. Every itinerary carries stops as a number and layovers as a list, each entry naming the airport code, the airport's full name, the city and how long the wait is in minutes. A measured Los Angeles to Tokyo option came back with one stop and a 125-minute layover at Manila. Note that a one-stop itinerary can arrive described as a single leg, so counting legs would call it a nonstop — stops is the field that is always right.

Can I search round trips?

Yes — add a return date and the price covers the whole trip, flagged as round_trip_total so you never mistake it for a one-way fare. One thing to know: each outbound option is priced against its cheapest matching return, and that return flight is not itemised, so the response describes the outbound leg and not the inbound one. The total is real; the return leg's times are not in the response. Leave the return date off and you get a straightforward one-way search — there is no implicit return window.

Can I filter to nonstop, or to business class?

Both. Set nonstopOnly and connections are excluded outright. Set cabinClass to any of economy, premium_economy, business, first and results are priced for that cabin — a measured JFK→LHR business-class search returned 44 priced itineraries, against 48 in economy. You can also price for a whole family in one call: up to 9 adults, plus children and infants counted separately.

What currency are the prices in?

Whichever you ask for. Pass a three-letter currency code and every price comes back in it, as {amount, currency, formatted} — a number you can sum, the code beside it, and a display string. Omit it and results come back in the service's own default, reported on the response so you always know which one you are looking at.

How do I know how fresh a price is?

Every response carries scrapedAt, an ISO timestamp for when the fares were read. Airfares move constantly and any figure you hold is a snapshot — so the response tells you when the snapshot was taken rather than leaving you to assume it matches the time you happened to look. Use that timestamp, not a cached one.

What happens when there are no flights?

You get a 200 with an empty list and a note saying so in plain words: "No itineraries were found for these dates and filters." A route with nothing available is a real answer, not a failure — so there is nothing to retry and nothing to mistake for an outage. A measured search for a first-class nonstop on a short-haul budget route returned exactly that.

What happens if I send a bad request?

You get a 400 that names the problem. A malformed airport code returns {"error":"origin: must be a 3-letter airport code"}; a departure date in the past returns {"error":"departureDate \"2020-01-01\" is in the past"}; a field the route does not know returns {"error":"Unrecognized key: \"sortBy\""} rather than being silently ignored. Wrong requests fail loudly and immediately instead of costing you a call and returning something odd.

How fast is it?

Measured against production on 17 September 2026, three runs each: JFK→LHR answered in 1.3 to 2.8 seconds with 48 itineraries, DUB→STN in 1.7 to 1.9 seconds, a LAX→NRT round trip for two adults in 1.7 to 2.8 seconds, and a filtered nonstop business-class search in 1.8 seconds. One request, one answer, no paging.

How is it billed?

One credit per search, reported on every response as pagesFetched. A search costs the same whether it returns 48 itineraries or none, and there is no pagination to multiply it — the whole result set for a route and date is a single request.

Can my AI agent use it?

Yes. The route is an MCP tool on the same FetchLayer MCP server: flights_search. Tool calls use the same key and are billed exactly like REST, and the agent sees the priceType and the scrapedAt timestamp alongside every fare — so it can tell you that a figure is a round-trip total read four minutes ago, rather than presenting it as a one-way fare that is true now.

Start pulling Fares, routes, layovers & cabins today.

Get a free API key, make your first request, and put public feedback to work in your own product or research workflow.