Moving off Amadeus Flight Status
On July 17, 2026 Amadeus decommissioned the Self-Service section of Amadeus for Developers. Self-service API keys stopped working, and only the Enterprise APIs remain, through an Amadeus contract. If your app called On-Demand Flight Status with a self-service key, it has been getting errors since. FlightByte takes the same three inputs, carrier, flight number and local departure date, and returns the same flight with gates, delays and the baggage belt. It also pushes the changes, which Amadeus never did.
What happened, and what still works
From Amadeus’s letter to self-service users as reported by PhocusWire, and the notice now on developers.amadeus.com.
- Amadeus tells self-service users the portal will close
- February 2026
- Registration for new users paused
- March 2026
- Self-Service portal decommissioned, keys disabled
- July 17, 2026
- Enterprise portal and Enterprise APIs
- Still available, by contract
Amadeus gave no reason. Enterprise customers who also used self-service APIs were told to move their applications through their account managers. Everyone else needs another provider for each API they used: for flight status, that is what this page is about.
In thirty seconds
x-api-key, no token to refresh.scheduledDepartureDate is local to the departure airport.PT25M.delayMinutes, delay.increased and delay.decreased.mainGate and a terminal code per flight point.departure.gate.changed, arrival.terminal.changed and the rest.arrival.baggagearrival.baggage.changed when it is set.status.phaseAmadeus figures from its archived OpenAPI specification and the notice on developers.amadeus.com, checked October 25, 2026. If something here is out of date, tell us and we will fix it.
The two calls, side by side
On the left, what a self-service app sent until July 17; on the right, the call that replaces it.
# Amadeus Self-Service (until July 17, 2026) POST https://api.amadeus.com/v1/security/oauth2/token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials &client_id=$AMADEUS_ID&client_secret=$AMADEUS_SECRET GET https://api.amadeus.com/v2/schedule/flights ?carrierCode=UA &flightNumber=1 &scheduledDepartureDate=2026-10-25 Authorization: Bearer $ACCESS_TOKEN
# FlightByte GET https://api.flightbyte.dev/v1/flights/UA/1/2026-10-25 x-api-key: $FLIGHTBYTE_KEY # or, the same lookup as a query GET https://api.flightbyte.dev/v1/flights/search ?carrier=UA&flightNumber=1&date=2026-10-25 x-api-key: $FLIGHTBYTE_KEY
Field mapping
Where an On-Demand Flight Status response and a FlightByte snapshot meet, and what only one of them has.
| Amadeus | FlightByte | Note |
|---|---|---|
carrierCode, flightNumber | carrier, flightNumber | Path segments here, query parameters there. |
scheduledDepartureDate | date | The same rule: the local departure date at the origin. |
flightPoints[].iataCode | departure.airport.iata, arrival.airport.iata | Plus icao, name, city, timezone and a country. |
timings with qualifier STD, STA | times.scheduledGate | In UTC and local time; estimated and actual times sit beside it. |
timings[].delays[].duration | delayMinutes | PT25M becomes 25, on each side of the flight. |
departure.gate.mainGate | departure.gate | And arrival.gate. |
departure.terminal.code | departure.terminal | And arrival.terminal. |
segments[].partnership.operatingFlight | operatedBy, codeshares | Every other number for the same leg is listed too. |
legs[].aircraftEquipment.aircraftType | equipment.iata, equipment.name | Plus equipment.tailNumber. |
segments, legs | alternates, origin | A number with several legs lists each one; origin picks yours. |
| — | arrival.baggage | The baggage belt. |
| — | status.phase | Scheduled, boarding, departed, en route, landed, arrived, cancelled, diverted. |
| — | timeline | The airline's own history of changes for the leg. |
Replace the polling loop
Most status integrations on Amadeus asked the same question on a timer. Subscribe once instead.
POST https://api.flightbyte.dev/v1/subscriptions
x-api-key: $FLIGHTBYTE_KEY
{
"carrier": "UA",
"flightNumber": "1",
"date": "2026-10-25",
"origin": "SFO",
"webhookUrl": "https://yourapp.com/hooks/flights",
"events": ["departure.gate.changed", "delay.increased",
"flight.departed", "flight.arrived",
"flight.cancelled"],
"metadata": { "bookingId": "BK-1042" }
}FlightByte polls the flight on its own schedule, every few hours a week out and every three minutes at the gate, compares each answer with the last, and sends only the changes you asked for. Each delivery is signed with HMAC-SHA256, retried with backoff if your endpoint is down, and logged.
The subscription ends itself once the flight is in and the window for the baggage belt has passed. What the timer was costing you is worked out in Why polling a flight API costs more than you think.
Migration checklist
From a self-service status call to FlightByte, in the order that keeps the app working.
- Take a key. The free plan has every feature, and the quickstart walks through the first call.
- Delete the token code. No client ID, secret or refresh; send
x-api-keyon every request. - Swap the endpoint.
/v2/schedule/flightsbecomes/v1/flights/{carrier}/{flightNumber}/{date}with the same values. - Map the fields. Use the table above; keep
bestTimeUtcfor the one time a screen shows. - Turn the timer into a subscription. One per flight you care about, up to seven days ahead.
- Verify the receiver. Send a test event and check the signature as in Verifying webhook signatures.
Questions people ask after the shutdown
Is the Amadeus Self-Service API shut down?
Can I still get an Amadeus API key?
What replaces On-Demand Flight Status?
GET /v1/flights/UA/1/2026-10-25, with an x-api-key header instead of an OAuth token, and adds gates, the baggage belt, a phase to branch on and webhooks when the flight changes.What does FlightByte cost compared with Amadeus Self-Service?
Does FlightByte predict delays like Amadeus did?
I also used Amadeus for flight search and booking. Does FlightByte do that?
Your status calls, working again tonight.
Three flights a month free, a hundred for nine dollars. The same three inputs, and the changes pushed to you.
A free key in a minute, no card. Paid plans are paid by card in the dashboard.