
Schiphol flight data
Schiphol's Public Flight API gives per flight the scheduled and expected times, status, gate, terminal, baggage belt, aircraft type and route, plus lists of airlines, destinations and aircraft types. Free after registration, but the terms are strict: only to help travellers, nothing stored for more than 24 hours and no statistics.

Passengers at Schiphol by origin and destination (CBS): Europe is the largest part, 71% in 2025
Breakdown in 2025: Europe 71%, Americas 16%, Asia 9.2%, Africa 4%. Total: 68,770,805 passengers.
Passengers at Schiphol per year (CBS): 68.8 million passengers in 2025, 75% more than in 2000
Passengers at Schiphol per year (CBS), 2000 – 2025, in million passengers. The highest point was 2019 (71.7).
Passengers at Schiphol (CBS): highest on average in August, lowest in January
Passengers at Schiphol (CBS) per month, January 2022 – August 2026, in million passengers. Average over 4 full years: August 6.1, January 3.9. Highest month: August 2026 (6.6).
What you can build with it1
What can you do with it?3 ideas
A departure board for your own audience
Show today's departures with gate and status, for example on a page for conference visitors. That helps travellers and so fits the terms. Commercial use needs Schiphol's explicit approval first.
Picking someone up
Follow an arriving flight from scheduled through Dutch airspace (FIR) and landed (LND) to the first bag on the belt (FIB). The baggageClaim field tells you which belt.
Trends? Use another source
Statistics and historical analysis are not allowed with this API. For passengers and aircraft movements per month there is CBS table 37478hvv; for flight paths, OpenSky.
How to process it4 steps
Register and create an application
Create an account on the developer portal, create an application and subscribe it to the Public Flight API. You see the client secret only once. Some subscriptions need approval first.
https://developer.schiphol.nl/news-and-updates/api-consumer-getting-started-guide
Get a token
Exchange client ID and secret for a JWT at https://api.auth.schiphol.nl/oauth/token, with audience https://api.schiphol.nl/public. The token lasts 30 minutes: keep it and don't request a new one per call, or you hit the rate limit.
Request the flights
Send the token as Authorization: Bearer. Filter with scheduleDate, flightDirection (A or D), airline, route, and order with sort. Without a token the API returns 401.
https://api.schiphol.nl/public/public-flights/v4/flights?scheduleDate=2026-10-15&flightDirection=D&page=0
Follow the Link header to the next page
A response holds at most 20 flights. The next page is in the HTTP Link header (rel="next"). Pages run from 0 to 499.
Interesting combinations
Similar sources
OpenSky NetworkAircraft positions over the Netherlands from open ADS-B receivers, without gate or passenger information.
- CLCBS Luchtvaart; maandcijfers Nederlandse luchthavens (37478hvv) not in the index yet
Passengers, freight and aircraft movements per month for Schiphol and the other airports of national importance. Fine for statistics.
What to watch out for
- Only to help travellers
The Public API may only be used for travellers and people picking someone up. Not allowed: competitive analysis, market research, delay compensation claims, reselling or passing data to third parties, and statistical or historical analysis.
- Keep for at most 24 hours
Data may be cached for at most 24 hours. After that you must delete it. Building your own archive is not allowed.
- New platform since October 2026
The old platform with App_Id and App_Key shut down on 1 October 2026. Old examples using api.schiphol.nl/public-flights and a ResourceVersion header no longer work; the version is now in the path (/v4/).
- Status is a code
publicFlightState returns codes such as SCH, DEL, BRD, GTD, DEP, LND, CNX. The OpenAPI specification has no fixed list; the meaning is on the Flight Statuses page.
- Keys are personal
Credentials are not transferable, don't belong in browser-side code and must be rotated at least every 90 days according to the terms.
APIREST (JSON), OAuth2 · read 16 Oct 2026
Account on developer.schiphol.nl, create an application there and subscribe to the PublicFlight API. Exchange client ID and secret (OAuth2 client credentials) at https://api.auth.schiphol.nl/oauth/token, audience https://api.schiphol.nl/public, for a 30-minute JWT. Send it as Authorization: Bearer, together with Accept: application/json. Without a token: 401 Unauthorized. tested
json
Base URL
https://api.schiphol.nl/public/public-flights/v4
Endpoints 8
- GET
/flightsFlights on a day (default today), with filters on direction, flight number, airline, route and time fields. 20 per page. - GET
/flights/{id}One flight by its numeric id. - GET
/flights/idsOnly the ids of flights between fromDateTime and toDateTime (on scheduleDateTime), at most three days. - GET
/airlinesAll airlines at Schiphol (name, IATA, ICAO, NVLS code). - GET
/airlines/{airline}One airline by IATA or ICAO code. - GET
/aircrafttypesAircraft types with IATA main and sub code, short and long name; filter iataMain, iataSub. - GET
/destinationsDestinations with IATA code, Dutch and English name, city and country. - GET
/destinations/{iata}One destination by IATA code.
Filtering from the description
Each condition is its own query parameter; combinations act as AND. Time windows via fromDateTime/toDateTime with searchDateTimeField.
Parameters 12
scheduleDate | Day of the flight; without: today. | from the description |
scheduleTime | Flights from this scheduled time. | from the description |
flightDirection | A = arrival, D = departure. | from the description |
flightName | Flight number as on the ticket, e.g. KL672. | from the description |
airline / airlineCode | Airline as IATA (KL) or ICAO prefix (KLM), or as NVLS code; one at a time. | from the description |
route | IATA or ICAO code of an airport on the route; several separated by commas. | from the description |
fromDateTime / toDateTime + searchDateTimeField | Search a time window on a time field: scheduleDateTime, estimatedLandingTime, actualLandingTime, publicEstimatedOffBlockTime, actualOffBlockTime, expectedTimeBoarding, expectedTimeGateOpen, expectedTimeGateClosing, expectedTimeOnBelt or lastUpdatedAt. | from the description |
fromScheduleDate / toScheduleDate | Range of flight days. | from the description |
includedelays | Also include flights from an earlier day that shift to the requested day because of delay (default false). | from the description |
isOperationalFlight | Only operational (true) or non-operational (false) flights. | from the description |
sort | Sort with + or −, several fields with commas, e.g. -scheduleDate,+scheduleTime (default +scheduleTime). | from the description |
page | Page number (starts at 0). Better follow the URL in the Link header rel="next". | from the description |
Fields of a flight (according to the documentation; not seen ourselves) 15
| Name | Type | Meaning |
|---|---|---|
flightName / flightNumber / prefixIATA / prefixICAO | tekst | Vluchtnummer (KL672) en zijn delen |
flightDirection | tekst | A (aankomst) of D (vertrek) |
scheduleDate / scheduleTime | datum / tijd · lokale tijd | Geplande dag en tijd |
serviceType | tekst | J passagiers lijn, C passagiers charter, F vracht lijn, H vracht charter |
mainFlight / codeshares | tekst | Uitvoerende vlucht en alle codeshare-nummers |
route.destinations | lijst | Luchthavens op de route (IATA) |
publicFlightState.flightStates | lijst | Statuscodes: SCH, AIR, EXP, FIR, LND, FIB, ARR, DIV, CNX, TOM (aankomst); SCH, DEL, WIL, GTO, BRD, GCL, GTD, DEP, CNX, GCH, TOM (vertrek) |
terminal / gate / baggageClaim.belts | tekst | Vertrek- of aankomsthal, gate (pieren B tot en met H en M) en bagageband |
aircraftType.iataMain / iataSub | tekst | Vliegtuigtype, bv. 739 en 73J |
aircraftRegistration | tekst | Registratie van het toestel, bv. PHTFA |
estimatedLandingTime / actualLandingTime | datetime | Verwachte en werkelijke landing |
publicEstimatedOffBlockTime / actualOffBlockTime | datetime | Verwacht en werkelijk vertrek van de gate |
Show all 15
| Name | Type | Meaning |
|---|---|---|
expectedTimeBoarding / expectedTimeGateOpen / expectedTimeGateClosing / expectedTimeOnBelt | datetime | Verwachte tijden voor boarding, gate en eerste koffer op de band |
routesEu / visa | tekst / boolean | S (Schengen), E (Europa) of N (buiten Europa); visum nodig |
lastUpdatedAt | datetime | Laatste wijziging in het vluchtinformatiesysteem |
Limits and pitfalls
- 100 requests per minute per application (Public tier). Above that 429 Too Many Requests with Retry-After. from the description
- At most 20 results per page, pages 0 to 499. An empty page can return 204 No Content. from the description
- Token valid for 30 minutes: get it once and reuse it; a new token per call hits the token server's limit. from the description
- Terms: only to help travellers. Not allowed: competitive analysis, unauthorised commercial use, reselling or passing on to third parties, and historical or statistical analysis. Data cached for at most 24 hours, then deleted; no own archive. Rotate keys at least every 90 days. from the description
- The old platform (App_Id, App_Key, ResourceVersion header) stopped on 1 October 2026; the version is now in the path (/v4/). A test environment is at https://api-acc.schiphol.nl/public/public-flights/v4. from the description
- Parameters also exist in lower case (scheduledate, flightname, flightdirection, includeDelays); the camelCase variant takes precedence. from the description
- Status codes are not a fixed list in the specification; their meaning is on the Flight Statuses page. from the description
- For statistics an open alternative: CBS table 37478hvv (passengers, freight and aircraft movements per month, Schiphol = A043590). For positions: OpenSky. experience
Try it
No call: we have no account and no token (without a token the API returns 401). The terms also forbid passing data to third parties and statistics.
Read from OpenAPI specification of PublicFlight API 4 (in the portal; endpoints, parameters, patterns) · Explanation of all fields of flights, airlines, destinations and aircraft types · Meaning of the status codes (SCH, AIR, LND, BRD, DEP …) · Pagination with the HTTP Link header · Best practices: limit per tier, tokens, cache times, error codes · Terms of use: what is and isn't allowed. Labels: from the description stated in what the api itself publishes. tested from our own small call. platform applies to every api on this platform, per its documentation. experience learned while building open data index.
More in this topic
See how this page is built
bron: schiphol-vluchten blokken: [] secties: - ideeen - verwerken - koppelingen - vergelijkbaar - beperkingen cache: tag: bron:schiphol-vluchten ververs: na statuscheck, als de bron nieuwer is statuscheck: methode: openbare documentatiepagina van de Public Flight API bereikbaar verwacht: elke minuut
Source: content/bronnen/schiphol-vluchten.yaml · Markdown




