AI-AUGMENTED · GDS-DERIVED · ARC-ACCREDITED

The award availability API,
straight from the source.

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.

WHAT IT DOES
  • Award availability for one origin, destination, airline and date: flight, operating and marketing carrier, schedule, aircraft, cabin, seat count and verification time.
  • Points prices for a route from each programme's published award chart, with credit-card transfer paths (the points endpoint).
  • Over REST and MCP.
WHAT IT DOESN'T
  • No fares and no booking.
  • No guessed prices: programmes that price dynamically are named, not priced.
  • No carriers that withhold award space from open distribution (e.g. Singapore Suites, Emirates First).
  • Results can be up to 12 hours old; each carries its check time.

Availability is observed and timestamped; points prices are calculated from published award charts.

WHY DIRECT-SOURCE

Scrapers break. Inventory feeds don't.

Resilient by design

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.

Clean, normalized data

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.

Long-haul premium space, partners included

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.

COVERAGE

What the award availability API covers

Airlines

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.

Cabins

Economy, business and first. Ask for the cabin you want; results carry the cabin name, not a fare code.

Dates

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.

QUICKSTART

One query, one answer

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.

POST · awardsecrets.com/api.php
Bearer auth
REQUEST
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"}'
200 OK — FACTS ONLY (NO PRICING, NO FARE CODES)
{
  "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.

REDEMPTION PRICING

What a flight costs in points

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.

POST · awardsecrets.com/points.php
Bearer auth
REQUEST · QATAR AIRWAYS, MELBOURNE TO LONDON VIA DOHA, BUSINESS
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"}'
200 OK — A REAL RESPONSE, ABRIDGED
{
  "status": "ok",
  "quota_remaining": 999,
  "operation": "best_path",
  "result": {
    "priced": [
      { "programme": "QATAR_PRIVILEGE_CLUB", "programme_name": "Qatar Airways Privilege Club (Avios)",
        "miles": 90000, "price_type": "fixed", "pricing_basis": "journey",
        "surcharge_level": "low", "as_of": "2026-10-13" },
      { "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" },
      { "programme": "IBERIA_CLUB", "programme_name": "Iberia Club (Avios)",
        "miles": 113000, "peak_miles": 148500, "pricing_basis": "per_flight_sum",
        "surcharge_level": "low", "as_of": "2026-10-12" },
      { "programme": "AADVANTAGE", "programme_name": "American Airlines AAdvantage",
        "miles": 122500, "price_type": "starting_at", "pricing_basis": "two_awards",
        "surcharge_level": "low", "as_of": "2026-10-10" }
      …three more, cheapest first
    ],
    "unpriced": [
      { "programme": "ASIA_MILES", "unpriced_reason": "no_chart_entry" }
    ],
    "stale_count": 1
  }
}

Same trip, four programmes, four ways of pricing: Qatar's own programme prices the whole connection once by region pair; JAL prices the whole trip once on its total distance; Iberia prices each flight, with off-peak and peak; AAdvantage counts two long-haul flights as two awards. Every option carries all the fields below. The public route pages show this same pricing for every route we monitor. 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.

Request

operation
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).
carrier
The airline that operates the flight (two-letter code). Programmes price by operating airline.
origin, destination
Three-letter airport codes.
cabin
economy, business or first.
via
Optional. Connecting airports, e.g. ["DOH"]. Needed for correct prices on connections: some programmes price each flight, others the total distance.
date
Optional. Departure date, 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.
currencies_held
Optional. Card currencies (e.g. AMEX_MR, CHASE_UR) or programmes you hold directly (e.g. AVIOS). Omit it to price every programme that can book the flight.

What each price tells you

miles
Points required, one way, per person. For off-peak/peak charts, the off-peak price.
price_type
fixed: a published chart price. starting_at: the programme publishes minimums (show it as “from”); the actual price can be higher.
round_trip
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, season_miles
Seasonal charts (ANA’s own flights): 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.
pricing_basis
How the price was worked out: 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).
legs
With 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, peak_note
Peak-date price, where the programme publishes off-peak and peak prices. If the peak price is not confirmed, peak_miles is null and peak_note says so.
stale, stale_note
true when the chart behind the price is pending re-verification. Treat it as indicative and confirm before transferring points.
surcharge_level
Carrier-imposed surcharges on the award: low, moderate or high, with surcharge_usd_approx as a rough estimate.
bookable_online, phone_only_note
Some partner awards can only be booked by phone.
notes, price_note
Programme-specific conditions, such as round-trip pricing effects or restrictions.
as_of
The date of the chart the price comes from.
reachable_from
With currencies_held: which of your currencies transfer to the programme, the ratio and the points needed.
unpriced[].unpriced_reason
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.

MODEL CONTEXT PROTOCOL

Native tool for AI agents

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.

Streamable HTTP

Remote transport, no local process to install. Same bearer key as the REST API.

One tool, strictly literal

search_award_availability takes one origin, one destination, one airline, one date. The schema tells the model to fan out rather than guess.

Same facts contract

Cabin and seat count. No fare codes, no pricing, no invented advice for a model to repeat.

POST · awardsecrets.com/mcp
JSON-RPC 2.0
DISCOVER — NO KEY REQUIRED
curl -X POST https://awardsecrets.com/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
CALL THE TOOL
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.

PRICING

API membership. One monthly plan.

Membership gives you Award AI access (which loyalty programmes can book each flight, published-chart points cost, card transfer paths and alerts) and API and MCP access to the AwardSecrets data set: award availability observed through a GDS connection, with points prices from published award charts. Each plan includes a monthly fair-use allowance; there are no per-search charges.

MONTHLY PLANS
Sandbox
Up to 1,000 queries a month · Award AI access for 1 user
$49/mo Start
POPULAR
Developer
Up to 10,000 queries a month · Award AI access for 1 user
$499/mo Start
Enterprise
A custom plan tailored to your business needs
Contact us

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.

QUESTIONS

Award availability API FAQ

Is there an API for award seat availability?

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.

How is this different from scraping-based award search tools?

The AwardSecrets data set is observed in airline inventory through a GDS under our own agreement, with points prices calculated from published award charts; it is not scraped from airline websites, so an integration does not break when a carrier redesigns its site or adds anti-bot defenses.

Does it work with AI agents such as Claude or Cursor?

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.

What does API access cost?

API access is a monthly membership that gives you Award AI access (booking programmes, published-chart points cost, transfer paths and alerts) and API and MCP access to the AwardSecrets data set: award availability observed through a GDS connection, with points prices from published award charts: 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.

How are connections and seat counts represented?

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.

Does it return prices or fare codes?

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.

How current is the data?

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.

Will the response format change?

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. 18 Oct 2026 (v1.5.0): no change to responses; documents fields already returned: each reachable_from entry (currency, ratio, points_needed, transfer_time, bonus), where points_needed is rounded up to whole transfer blocks; confidence, pricing_model, surcharge fields and valuation_cpp; pricing_basis values two_awards, mixed_journey and mixed_per_flight_sum; and the full list of programme codes (x-programme-codes in the OpenAPI spec). New programmes: Aer Lingus AerClub, China Southern Sky Pearl Club, EVA Air Infinity MileageLands, Finnair Plus, Thai Royal Orchid Plus and Vietnam Airlines Lotusmiles; Etihad Guest, JAL Mileage Bank, Qatar Privilege Club and Velocity cover more partner airlines. 31 Oct 2026 (v1.6.0): searched (true when the airline's availability was checked); when it is false, not_searched_reason (airline_not_covered or search_incomplete) and not_searched_detail are added, and the call uses no quota. 2 Nov 2026 (v1.6.1): no field changes. airline_not_covered now also answers, without searching, a cabin AwardSecrets cannot see on an airline it otherwise covers: British Airways and American Airlines business and first; Garuda Indonesia, TAROM, Aeromexico and Cathay Pacific economy; and Middle East Airlines and Air India in every cabin. Airlines whose award space is not visible (for example Singapore Airlines) are now reported as airline_not_covered, not search_incomplete. airline_not_covered is permanent: do not retry.

How far ahead can I search?

About 11 months: dates up to roughly 330 days ahead. Airlines release award space around then, so later dates cannot have availability yet.

GET STARTED

Start a membership

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.