For publishers
Upgrade data for publishers
Free, always-current upgrade bid data you can quote, chart or embed: observed minimum, median and maximum bids by airline and cabin, with the sample size behind every number. One rule — credit Plusgrade Upgrade Agent and link back.
Today the API covers 3 carriers with 286 published observed checks (as of 2026-10-10). Coverage grows as more travellers check their bookings through Upgrade Agent.
What this data is — and isn't
It is
- Bid ranges (min / suggested / max) observed when travellers checked real bookings through our tools.
- Aggregated per carrier and cabin: lowest minimum, median suggested bid, highest maximum.
- Honest about sample size — every figure carries its count and as-of date.
- Anonymous by construction: carrier, route, cabin and range only. No names, no booking references.
It is not
- Airline-published prices or a rate card. Operators set ranges per flight.
- A prediction for a specific booking — that depends on route, fare and how full the flight is.
- Modelled or extrapolated. A cabin with fewer than 3 observed checks is withheld, and the response says so.
- Win odds below 20 resolved outcomes — we return "insufficient data" instead of a number.
Attribution
Free to republish with attribution and a link. Quote the numbers, build charts, embed the widget — in articles, comparison tables, forum answers and newsletters — as long as each use credits Plusgrade Upgrade Agent and links to https://www.upgradeagent.ai (or the carrier's upgrade page the API returns). Every response includes an attribution block and a ready-to-paste sentence that already carries the credit.
Typical SWISS business-class upgrade bids range from CHF 139 to CHF 1,036 (median CHF 388), based on 172 observed checks. Data: Plusgrade Upgrade Agent.
Endpoints
Public, no key, CORS-open, cached for an hour at the edge, 60 requests/min per IP. Errors are RFC 9457 application/problem+json. Base URL https://www.upgradeagent.ai/api/data.
Bid ranges
GET /api/data/bid-ranges?carrier=<IATA or name>[&cabin=BUSINESS|FIRST|PREMIUM_ECONOMY][&format=csv]
curl "https://www.upgradeagent.ai/api/data/bid-ranges?carrier=LX&cabin=BUSINESS"
{
"carrier": {
"code": "LX",
"name": "SWISS",
"slug": "swiss",
"vertical": "airline",
"logo": "https://res.cloudinary.com/dbqhno48o/image/fetch/f_auto,q_auto,w_320,c_limit/https%3A%2F%2Fupgrade-cdn.plusgrade.com%2Foffer%2Fpid%2F21YeiaF8LX%2FLX.webp",
"upgradePage": "https://www.upgradeagent.ai/offer/swiss/upgrade",
"partnerPage": "https://www.upgradeagent.ai/partners/swiss"
},
"cabins": [
{
"cabin": "BUSINESS",
"label": "Business",
"slug": "business-class",
"currency": "CHF",
"min": 139,
"median": 388,
"max": 1036,
"suggested": 388,
"sampleSize": 172,
"lastObserved": "2026-08-19T09:31:34.661153+00:00",
"sentence": "Typical SWISS business-class upgrade bids range from CHF 139 to CHF 1,036 (median CHF 388), based on 172 observed checks. Data: Plusgrade Upgrade Agent."
}
],
"omitted": [],
"sampleSize": 172,
"observedFrom": "2026-06-30T19:18:55.93587+00:00",
"observedTo": "2026-08-19T09:31:34.661153+00:00",
"minimumSamples": 3,
"note": "Observed ranges from anonymized upgrade eligibility checks — not operator-published prices. A specific booking's range depends on route, cabin and load.",
"attribution": {
"source": "Plusgrade Upgrade Agent",
"url": "https://www.upgradeagent.ai",
"license": "Free to republish with attribution and a link",
"asOf": "2026-10-10"
}
}Win odds
GET /api/data/win-odds?carrier=<IATA>&cabin=<cabin>&amount=<bid> — historical accept rate, or an explicit "insufficient data" below 20 resolved bids.
curl "https://www.upgradeagent.ai/api/data/win-odds?carrier=LX&cabin=BUSINESS&amount=388"
{
"carrier": {
"code": "LX",
"name": "SWISS",
"slug": "swiss",
"vertical": "airline",
"logo": null,
"upgradePage": "https://www.upgradeagent.ai/offer/swiss/upgrade",
"partnerPage": "https://www.upgradeagent.ai/partners/swiss"
},
"cabin": "BUSINESS",
"label": "Business",
"amount": 388,
"currency": "",
"probability": null,
"percent": null,
"band": null,
"basis": "overall",
"sampleSize": 0,
"confidence": null,
"insufficientData": true,
"minimumSamples": 20,
"sentence": "Plusgrade Upgrade Agent does not yet have enough resolved SWISS business-class bid outcomes to estimate the odds of a bid of 388.",
"note": "Insufficient data: 0 resolved outcomes so far; we publish a probability only once at least 20 accepted-or-rejected bids are observed for this carrier and cabin, so a small sample never reads as a real rate. Use /api/data/bid-ranges for the observed range instead.",
"attribution": {
"source": "Plusgrade Upgrade Agent",
"url": "https://www.upgradeagent.ai",
"license": "Free to republish with attribution and a link",
"asOf": "2026-10-10"
}
}Routes
GET /api/data/routes?origin=<IATA>&destination=<IATA>[&cabin=<cabin>] — carriers on an airport pair: observed upgrade ranges per cabin where they exist (publish floor applied), plus hub-match carriers that may serve the route, listed without pricing and labelled unconfirmed. Human page: /routes/<origin>-<destination>.
curl "https://www.upgradeagent.ai/api/data/routes?origin=YUL&destination=LHR"
Partners and coverage
GET /api/data/partners lists every covered operator with its upgrade page; GET /api/data/index describes the API and which carriers currently clear the publish floor.
curl "https://www.upgradeagent.ai/api/data/index" curl "https://www.upgradeagent.ai/api/data/partners"
Embed the widget
One script tag renders a small, accessible card in place: carrier, cabin, the observed range with the median marked, sample size and as-of date, and the attribution link (required — it is part of the card). ~6 KB, no dependencies, light / dark / auto themes, responsive from 240px.
<script src="https://www.upgradeagent.ai/embed/upgrade-stats.js?v=1" data-carrier="LX" data-cabin="BUSINESS" data-theme="auto" async></script>
Live example (script)
<iframe src="https://www.upgradeagent.ai/embed/LX?cabin=BUSINESS" title="SWISS upgrade bid range — Plusgrade Upgrade Agent" width="100%" height="260" loading="lazy" style="border:0;max-width:420px"></iframe>
Live example (iframe)
Programmatic use: window.UpgradeAgentEmbed.render(element, { carrier, cabin, theme }). Add data-target="#selector" to render into an existing element. The widget sends a cookie-less render/click ping (embedding hostname + carrier only) and respects Do Not Track.
CSV and coverage
Add format=csv to any bid-ranges call for a spreadsheet-ready file — download the SWISS CSV.
carrier_code,carrier_name,cabin,cabin_label,currency,min,median,max,suggested,sample_size,last_observed,sentence,source,source_url,as_of LX,SWISS,BUSINESS,Business,CHF,139,388,1036,388,172,2026-08-19T09:31:34.661153+00:00,"Typical SWISS business-class upgrade bids range from CHF 139 to CHF 1,036 (median CHF 388), based on 172 observed checks. Data: Plusgrade Upgrade Agent.",Plusgrade Upgrade Agent,https://www.upgradeagent.ai,2026-10-10
| Carrier | Cabins published | Checks |
|---|---|---|
| SWISS (LX) | Business (172) | 172 |
| Air Canada (AC) | Business (84) | 84 |
| Lufthansa (LH) | Business (20), Premium Economy (10) | 30 |
Need a carrier we don't cover yet?
Coverage follows real checks, so a carrier appears once 3 or more travellers have checked a booking. If your readers ask about an operator that isn't listed, email ai@plusgrade.com with the carrier and cabin — we'll tell you what we have, prioritise it, and never send you a number we haven't observed.