>
A clean JSON API for live business, first, and economy award space — pulled direct from global airline inventory, not scraped from airline websites. Built for LLM agents, travel tools, and backend integrations.
Airline website redesigns and anti-bot defenses don't touch us. We query airline inventory directly, so your integration doesn't break every time a carrier ships a new front end.
Responses are plain facts: carrier, flight, route, times, cabin, and seat count — already mapped to human cabin names. No fare-code decoding, no parsing required on your end.
Surfaces long-haul business and first award space — including alliance and partner segments — that consumer airline sites and scraper tools frequently don't show.
Honest about limits: award space is volatile and released in real time, so availability changes minute to minute. A small set of carriers block their award space from open distribution entirely (e.g. Singapore Suites, Emirates First) — we don't pretend to see what isn't there.
Major carriers across Star Alliance, oneworld and SkyTeam, plus independents, queried one airline at a time. Where a carrier's space only appears under a partner's flight number, the response shows it via operated_by.
Economy, business and first. Ask for the cabin you want; results carry the cabin name, not a fare code.
Up to about 11 months ahead, which is as far as airlines release award space. One date per query: fan out across dates for flexible searches.
Not covered: carriers that withhold award space from distribution entirely (e.g. Singapore Suites, Emirates First). If a carrier is not in the GDS, it is not in the results.
Each request searches exactly one origin, one destination, one airline, and one date. For flexible searches, make one query per combination. Authenticate with a bearer token.
curl -X POST https://awardsecrets.com/api.php \
-H "Authorization: Bearer ak_live_…" \
-H "Content-Type: application/json" \
-d '{"origin":"JFK","destination":"LHR","airline":"VS","date":"2027-03-05","cabin":"business"}'
{
"status": "ok",
"quota_remaining": 4998,
"found": true,
"flight_count": 11,
"observed_at": "2026-10-10T14:05:00Z",
"dates": [
{
"date": "2027-03-05",
"observed_at": "2026-10-10T14:05:00Z",
"flights": [
{
"carrier": "VS",
"flight_number": "VS4",
"operated_by": null,
"origin": "JFK",
"destination": "LHR",
"depart": "2027-03-05T18:00",
"arrive": "2027-03-06T06:20",
"equipment": "351",
"cabin": "business",
"seats": 4
}
… 10 more
]
}
]
}
operated_by names the operating airline when it differs from the marketing airline (codeshares, e.g. "DL"); null means the marketing airline operates the flight. Rarely, the operator is given only in a form we can't yet resolve; it is then null too, and we add such names as we find them. Connections return one object per segment. Times are ISO-8601 local. seats on a segment is its count within its journey (9 means nine or more); for what is bookable use the journey's itineraries[].seats, always 1 to 8. observed_at is when that availability was observed in airline inventory (UTC); results can be up to 12 hours old.
A separate endpoint on the same key and the same monthly allowance: one pricing request counts as one query. Give it the airline that operates the flight and the route, and it returns every programme that can price it from a published award chart, cheapest first, each labelled with how the price was worked out. Programmes without a published chart are listed as unpriced, with the reason. We never estimate a number.
curl -X POST https://awardsecrets.com/points.php \
-H "Authorization: Bearer ak_live_…" \
-H "Content-Type: application/json" \
-d '{"operation":"best_path","carrier":"QR","origin":"MEL","destination":"LHR","via":["DOH"],"cabin":"business"}'
{
"status": "ok",
"quota_remaining": 999,
"operation": "best_path",
"result": {
"priced": [
{ "programme": "JAL_MILEAGE_BANK", "programme_name": "JAL Mileage Bank",
"miles": 110000, "price_type": "fixed", "pricing_basis": "per_trip",
"surcharge_level": "low", "as_of": "2026-10-10", "stale": false },
{ "programme": "ALASKA", "programme_name": "Alaska Atmos Rewards",
"miles": 130000, "price_type": "starting_at", "pricing_basis": "journey",
"price_note": "Starting rate: the programme publishes minimums; …" },
{ "programme": "AVIOS", "programme_name": "British Airways Club (Avios)",
"miles": 175250, "pricing_basis": "per_flight_sum",
"legs": [ { "from": "MEL", "to": "DOH", "miles": 113250 },
{ "from": "DOH", "to": "LHR", "miles": 62000 } ],
"stale": true, "stale_note": "This chart value is pending re-verification; …" },
{ "programme": "QANTAS_FF", "programme_name": "Qantas Frequent Flyer",
"miles": 182900, "price_type": "fixed", "pricing_basis": "per_trip",
"surcharge_level": "high", "as_of": "2025-08-05" }
],
"unpriced": [
{ "programme": "AADVANTAGE", "unpriced_reason": "no_chart_entry" },
{ "programme": "ASIA_MILES", "unpriced_reason": "no_chart_entry" }
],
"stale_count": 1
}
}
Same trip, four programmes, three ways of pricing: JAL and Qantas price the whole trip once on its total distance; British Airways prices each flight; Alaska prices by region and publishes minimums. Every option carries all the fields below. The request prices the trip as Qatar-operated throughout to illustrate the fields. In practice Melbourne–Doha is VA7, a Virgin Australia flight operated with a Qatar aircraft (sold as QR8402), so that journey is mixed-operator: price each operating airline separately, and expect programmes to treat the whole journey differently.
best_path (what this flight costs, by programme), chart (one programme’s chart price), programme (what a programme can book) or transfers (where a card currency can transfer).economy, business or first.["DOH"]. Needed for correct prices on connections: some programmes price each flight, others the total distance.YYYY-MM-DD. Seasonal charts (ANA’s own flights) use it to pick the season; without it they return a from price with every season listed.AMEX_MR, CHASE_UR) or programmes you hold directly (e.g. AVIOS). Omit it to price every programme that can book the flight.fixed: a published chart price. starting_at: the programme publishes minimums (show it as “from”); the actual price can be higher.true when miles is a round-trip price because the programme does not sell one-way awards on that route (ANA Mileage Club). Ranking counts it as half per direction.season is low, regular or high for the date given; season_miles lists all three. Without a date, season is null and miles is the lowest.per_trip (the whole one-way trip priced once on its total distance), per_flight / per_flight_sum (each flight priced separately; legs shows each), journey (by region or zone, origin to destination).per_flight / per_flight_sum on a connection: each flight’s price (from, to, miles). null when the trip is a single flight or is priced as a whole.peak_miles is null and peak_note says so.true when the chart behind the price is pending re-verification. Treat it as indicative and confirm before transferring points.low, moderate or high, with surcharge_usd_approx as a rough estimate.currencies_held: which of your currencies transfer to the programme, the ratio and the points needed.dynamic_pricing (no published chart, so it cannot be quoted in advance) or no_chart_entry (a chart exists, but we don’t hold this route or origin yet). We never estimate these. Unpriced entries share the option structure, but their price fields (miles, price_type, pricing_basis, legs) carry no price information: ignore them.Prices come from each programme’s published award charts and are indicative: programmes change their charts, and some publish only minimums. Confirm the price with the programme before transferring points. Coverage grows as we verify more charts; each response states exactly which programmes are priced and why the others are not.
The same search, exposed as an MCP tool. Point Claude Code, Cursor, or any MCP client at https://awardsecrets.com/mcp and award availability becomes something your agent can call directly — no client code to write.
Remote transport, no local process to install. Same bearer key as the REST API.
search_award_availability takes one origin, one destination, one airline, one date. The schema tells the model to fan out rather than guess.
Cabin and seat count. No fare codes, no pricing, no invented advice for a model to repeat.
curl -X POST https://awardsecrets.com/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
curl -X POST https://awardsecrets.com/mcp \
-H "Authorization: Bearer ak_live_…" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"search_award_availability",
"arguments":{"origin":"JFK","destination":"LHR",
"airline":"VS","date":"2027-03-05"}}}'
tools/list and initialize answer without a key, so a client can discover the server before you have one. tools/call requires a key and is currently in limited release.
Membership gives you Award AI access (which loyalty programmes can book each flight, typical points cost, card transfer paths and alerts) and API and MCP access to the AwardSecrets data set: AI-augmented award-availability intelligence derived from GDS inventory and lived award-travel experience. Each plan includes a monthly fair-use allowance; there are no per-search charges.
A query is one origin, destination, airline and date. Above your allowance, queries pause until the next month or you move up a plan; nothing is billed per search. Each plan includes Award AI access for one user; teammates can add it with the standard US$9.99/month membership.
Terms of Service — see §5 for API terms and §6 for what you may do with the data.
Yes. The AwardSecrets API returns award (points and miles) seat availability as JSON: carrier, flight number, route, times, aircraft, cabin and seat count. Each request covers one origin, one destination, one airline and one date.
The AwardSecrets data set is derived from airline inventory through a GDS under our own agreement and from lived award-travel experience, then augmented by AI; it is not scraped from airline websites, so an integration does not break when a carrier redesigns its site or adds anti-bot defenses.
Yes. The same search is available as a Model Context Protocol (MCP) tool at https://awardsecrets.com/mcp. Discovery works without a key; searches need one.
API access is a monthly membership that gives you Award AI access (booking programmes, typical points cost, transfer paths and alerts) and API and MCP access to the AwardSecrets data set: AI-augmented award-availability intelligence derived from GDS inventory and lived award-travel experience: Sandbox US$49 (up to 1,000 queries a month) and Developer US$499 (up to 10,000), each with Award AI access for one user; Enterprise is a custom plan tailored to your business needs. Teammates can add Award AI access with the standard US$9.99/month membership. There are no per-search charges; above the allowance, queries pause until the next month or you move up a plan.
Each date lists its flight segments in journey order, and each segment carries an itinerary number: segments of one connection share it. Each date also has an itineraries summary per journey, with its segments, connecting airports, operating airline of each segment and bookable seats. Seat counts are journey-specific: airlines control connecting availability by journey, so a first leg shared by two connections can show 6 seats in one and 7 in the other. The bookable seats for a journey are the lowest count across its segments. Journeys flown by more than one airline are flagged mixed_operators (programmes price them differently), and a change of airport within a city is flagged airport_change. via lists the airport where each connection arrives; airport_change shows the arriving and departing airports (e.g. NRT→HND). In itineraries, operated_by always names an airline: the marketing airline when the flight itself is operated by it.
Journeys showing the system's maximum count (9, meaning nine or more) on every segment are withheld, because that figure often doesn't reflect bookable award seats, as are journeys with counts the aircraft's cabin cannot hold. A connection whose lowest segment is 1 to 8 is returned, so a journey's bookable seats (itineraries[].seats) are always 1 to 8; an individual segment can still show 9.
The availability endpoint returns facts only: availability, cabin and seat count, with no fare codes and no prices. Redemption pricing is a separate endpoint (points.php) on the same key and allowance: published award-chart prices by programme, each labelled with how it was worked out, whether it is a fixed price or a published minimum, and whether the chart is pending re-verification. Programmes without a published chart are listed as unpriced, never estimated.
Every response includes observed_at: when that availability was observed in airline inventory (UTC, ISO 8601). When an identical query has run recently, a result showing availability can be up to 12 hours old, and a "nothing available" result up to 90 minutes old. Use observed_at to show your users how recent each result is.
We may add new fields at any time, so your client should ignore fields it doesn't recognise. We won't remove or change existing fields without notice to members. Changelog: 10 Oct 2026, added observed_at (top level and per date). 11 Oct 2026 (v1.2.0): redemption pricing endpoint, points.php. 11 Oct 2026 (v1.3.0): journeys: itinerary on each flight, itineraries per date with bookable seats, itinerary_count. 11 Oct 2026 (v1.4.0): pricing: optional date, round_trip, season and season_miles; ANA Mileage Club priced. 12 Oct 2026 (v1.4.1): no field changes. Connections where only some segments show 9 are now returned (journeys are judged by their lowest segment; before, any segment showing 9 withheld the journey). Documentation clarified: operated_by null, via and airport_change, legs, price_type on unpriced options.
About 11 months: dates up to roughly 330 days ahead. Airlines release award space around then, so later dates cannot have availability yet.
Start a Sandbox or Developer membership online: sign in with Google, pay securely with Stripe, and your API key arrives by email within a minute. Enterprise plans are tailored to your business.
Enterprise, or questions: api@awardsecrets.com
Already a member? Your account · Cancel any time.