303,525 datasets indexed1,419 publishers
Open Data IndexThe index of open data about the Netherlands
Sources›Traffic and transport

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.

Traffic and transportFree keyAPIReal timeNetherlands · flight
Reachable · checked 17:23
developer.schiphol.nl
Screenshot of developer.schiphol.nl

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.

Source: CBS, tabel 37478hvv (Luchtvaart; maandcijfers Nederlandse luchthavens van nationaal belang) · opgehaald 25 oktober 2026Open the table Single block

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).

Source: CBS, tabel 37478hvv (Luchtvaart; maandcijfers Nederlandse luchthavens van nationaal belang) · opgehaald 25 oktober 2026Open the table Single block

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).

Source: CBS, tabel 37478hvv (Luchtvaart; maandcijfers Nederlandse luchthavens van nationaal belang) · opgehaald 25 oktober 2026Open the table Single block

What you can build with it1

What can you do with it?3 ideas

Getting started

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.

Getting started

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.

Advanced

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

  1. 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
  2. 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.

  3. 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
  4. 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

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

StandardREST (JSON), OAuth2docs
Access login

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

Formats

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.

=van/totsort + / −

Parameters 12

scheduleDateDay of the flight; without: today.from the description
scheduleTimeFlights from this scheduled time.from the description
flightDirectionA = arrival, D = departure.from the description
flightNameFlight number as on the ticket, e.g. KL672.from the description
airline / airlineCodeAirline as IATA (KL) or ICAO prefix (KLM), or as NVLS code; one at a time.from the description
routeIATA or ICAO code of an airport on the route; several separated by commas.from the description
fromDateTime / toDateTime + searchDateTimeFieldSearch a time window on a time field: scheduleDateTime, estimatedLandingTime, actualLandingTime, publicEstimatedOffBlockTime, actualOffBlockTime, expectedTimeBoarding, expectedTimeGateOpen, expectedTimeGateClosing, expectedTimeOnBelt or lastUpdatedAt.from the description
fromScheduleDate / toScheduleDateRange of flight days.from the description
includedelaysAlso include flights from an earlier day that shift to the requested day because of delay (default false).from the description
isOperationalFlightOnly operational (true) or non-operational (false) flights.from the description
sortSort with + or −, several fields with commas, e.g. -scheduleDate,+scheduleTime (default +scheduleTime).from the description
pagePage 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

NameTypeMeaning
flightName / flightNumber / prefixIATA / prefixICAOtekstVluchtnummer (KL672) en zijn delen
flightDirectiontekstA (aankomst) of D (vertrek)
scheduleDate / scheduleTimedatum / tijd · lokale tijdGeplande dag en tijd
serviceTypetekstJ passagiers lijn, C passagiers charter, F vracht lijn, H vracht charter
mainFlight / codesharestekstUitvoerende vlucht en alle codeshare-nummers
route.destinationslijstLuchthavens op de route (IATA)
publicFlightState.flightStateslijstStatuscodes: 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.beltstekstVertrek- of aankomsthal, gate (pieren B tot en met H en M) en bagageband
aircraftType.iataMain / iataSubtekstVliegtuigtype, bv. 739 en 73J
aircraftRegistrationtekstRegistratie van het toestel, bv. PHTFA
estimatedLandingTime / actualLandingTimedatetimeVerwachte en werkelijke landing
publicEstimatedOffBlockTime / actualOffBlockTimedatetimeVerwacht en werkelijk vertrek van de gate
Show all 15
NameTypeMeaning
expectedTimeBoarding / expectedTimeGateOpen / expectedTimeGateClosing / expectedTimeOnBeltdatetimeVerwachte tijden voor boarding, gate en eerste koffer op de band
routesEu / visatekst / booleanS (Schengen), E (Europa) of N (buiten Europa); visum nodig
lastUpdatedAtdatetimeLaatste 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