# Schiphol vluchtgegevens

De Public Flight API van Schiphol geeft per vlucht de geplande en verwachte tijden, status, gate, terminal, bagageband, vliegtuigtype en route, plus lijsten van luchtvaartmaatschappijen, bestemmingen en vliegtuigtypen. Gratis na registratie, maar de voorwaarden zijn streng: alleen om reizigers te helpen, niets langer dan 24 uur bewaren en geen statistiek.

- Uitgever: Royal Schiphol Group
- Gebied: Nederland · Laagste detail: vlucht
- Periode: heden · Ververst: elke minuut
- Toegang: Gratis sleutel · Licentie: Voorwaarden Schiphol (geen opslag langer dan 24 uur, geen statistiek)
- Koppelsleutels: vluchtnummer (flightName), IATA-luchthavencode, datum (scheduleDate)
- Status: grijs
- URL: https://developer.schiphol.nl

## Wat kun je ermee?
- **Een vertrekbord voor je eigen publiek.** Toon de vertrekken van vandaag met gate en status, bijvoorbeeld op een pagina voor bezoekers van een congres. Dat helpt reizigers en past dus binnen de voorwaarden. Commercieel gebruik moet Schiphol eerst uitdrukkelijk goedkeuren.
- **Iemand ophalen.** Volg een aankomende vlucht van gepland via in Nederlands luchtruim (FIR) en geland (LND) tot de eerste koffer op de band (FIB). Het veld baggageClaim zegt welke band.
- **Trends? Gebruik een andere bron.** Statistiek en historische analyse zijn met deze API niet toegestaan. Voor het aantal passagiers en vliegbewegingen per maand is er CBS-tabel 37478hvv; voor vliegroutes OpenSky.

## Zo verwerk je het
1. **Registreer en maak een applicatie.** Maak een account op het ontwikkelaarsportaal, maak een applicatie en abonneer die op de Public Flight API. Het client secret zie je maar één keer. Sommige abonnementen moeten eerst worden goedgekeurd.
   `https://developer.schiphol.nl/news-and-updates/api-consumer-getting-started-guide`
2. **Haal een token op.** Ruil client ID en secret in voor een JWT bij https://api.auth.schiphol.nl/oauth/token, met audience https://api.schiphol.nl/public. Het token is 30 minuten geldig: bewaar het en vraag niet bij elke aanroep een nieuw, dan loop je tegen de limiet.
3. **Vraag de vluchten op.** Stuur het token mee als Authorization: Bearer. Filter met scheduleDate, flightDirection (A of D), airline, route, en sorteer met sort. Zonder token geeft de API 401.
   `https://api.schiphol.nl/public/public-flights/v4/flights?scheduleDate=2026-10-15&flightDirection=D&page=0`
4. **Volg de Link-kop voor de volgende pagina.** Een antwoord bevat maximaal 20 vluchten. De volgende pagina staat in de HTTP-kop Link (rel="next"). Pagina's lopen van 0 tot en met 499.

## Interessante koppelingen
- Welke vluchten lopen vandaag vertraging op door het weer? → [knmi-daggegevens](https://www.opendataindex.nl/bron/knmi-daggegevens.md) via datum. Zet de vluchtstatus van vandaag (DEL, CNX, DIV) naast wind en zicht van het KNMI. Alleen voor actuele informatie aan reizigers; opslaan voor statistiek mag niet.

## Vergelijkbare bronnen
- [opensky](https://www.opendataindex.nl/bron/opensky.md): Posities van vliegtuigen boven Nederland uit open ADS-B-ontvangers, zonder gate- of passagiersinformatie.
- [CBS Luchtvaart; maandcijfers Nederlandse luchthavens (37478hvv)](https://opendata.cbs.nl/ODataApi/OData/37478hvv): Passagiers, vracht en vliegbewegingen per maand voor Schiphol en de andere luchthavens van nationaal belang. Wel geschikt voor statistiek.

## Waar je op moet letten
- **Alleen om reizigers te helpen.** De Public API mag alleen worden gebruikt voor reizigers en mensen die iemand ophalen. Niet toegestaan: concurrentieanalyse, marktonderzoek, claims voor vertragingscompensatie, doorverkopen of doorgeven aan derden, en statistische of historische analyse.
- **Maximaal 24 uur bewaren.** Gegevens mogen hooguit 24 uur in een cache. Daarna moet je ze verwijderen. Een eigen archief opbouwen is niet toegestaan.
- **Nieuw platform sinds oktober 2026.** Het oude platform met App_Id en App_Key stopte op 1 oktober 2026. Oude voorbeelden met api.schiphol.nl/public-flights en een ResourceVersion-kop werken niet meer; de versie staat nu in het pad (/v4/).
- **Status is een code.** publicFlightState geeft codes zoals SCH, DEL, BRD, GTD, DEP, LND, CNX. De OpenAPI-specificatie heeft er geen vaste lijst van; de betekenis staat op de pagina Flight Statuses.
- **Sleutels zijn persoonlijk.** Credentials zijn niet overdraagbaar, horen niet in code aan de kant van de browser en moeten volgens de voorwaarden minstens elke 90 dagen worden vervangen.

## API (REST (JSON), OAuth2)

- Basis: https://api.schiphol.nl/public/public-flights/v4
- Toegang: Account op developer.schiphol.nl, daar een applicatie maken en abonneren op de PublicFlight API. Ruil client ID en secret (OAuth2 client credentials) bij https://api.auth.schiphol.nl/oauth/token, audience https://api.schiphol.nl/public, in voor een JWT van 30 minuten. Stuur dat mee als Authorization: Bearer, samen met Accept: application/json. Zonder token: 401 Unauthorized. (getest)
- Formaten: json
- Filteren: Elke voorwaarde is een eigen queryparameter; combinaties gelden als EN. Tijdvakken via fromDateTime/toDateTime met searchDateTimeField.; =, van/tot, sort + / −

### Endpoints
- `GET /flights`: Vluchten op een dag (standaard vandaag), met filters op richting, vluchtnummer, maatschappij, route en tijdvelden. 20 per pagina.
- `GET /flights/{id}`: Eén vlucht op het numerieke id.
- `GET /flights/ids`: Alleen de id's van vluchten tussen fromDateTime en toDateTime (op scheduleDateTime), hoogstens drie dagen.
- `GET /airlines`: Alle luchtvaartmaatschappijen op Schiphol (naam, IATA, ICAO, NVLS-code).
- `GET /airlines/{airline}`: Eén maatschappij op IATA- of ICAO-code.
- `GET /aircrafttypes`: Vliegtuigtypen met IATA-hoofd- en subcode, korte en lange naam; filter iataMain, iataSub.
- `GET /destinations`: Bestemmingen met IATA-code, Nederlandse en Engelse naam, stad en land.
- `GET /destinations/{iata}`: Eén bestemming op IATA-code.

### Parameters
- `scheduleDate`: Dag van de vlucht; zonder: vandaag. (uit de beschrijving)
- `scheduleTime`: Vluchten vanaf dit geplande tijdstip. (uit de beschrijving)
- `flightDirection`: A = aankomst, D = vertrek. (uit de beschrijving)
- `flightName`: Vluchtnummer zoals op het ticket, bv. KL672. (uit de beschrijving)
- `airline / airlineCode`: Maatschappij als IATA- (KL) of ICAO-prefix (KLM), of als NVLS-code; één tegelijk. (uit de beschrijving)
- `route`: IATA- of ICAO-code van een luchthaven op de route; meerdere met komma's. (uit de beschrijving)
- `fromDateTime / toDateTime + searchDateTimeField`: Zoeken in een tijdvak op een tijdveld: scheduleDateTime, estimatedLandingTime, actualLandingTime, publicEstimatedOffBlockTime, actualOffBlockTime, expectedTimeBoarding, expectedTimeGateOpen, expectedTimeGateClosing, expectedTimeOnBelt of lastUpdatedAt. (uit de beschrijving)
- `fromScheduleDate / toScheduleDate`: Bereik van vluchtdagen. (uit de beschrijving)
- `includedelays`: Ook vluchten van een eerdere dag die door vertraging naar de gevraagde dag schuiven (standaard false). (uit de beschrijving)
- `isOperationalFlight`: Alleen operationele (true) of niet-operationele (false) vluchten. (uit de beschrijving)
- `sort`: Sorteren met + of −, meerdere velden met komma's, bv. -scheduleDate,+scheduleTime (standaard +scheduleTime). (uit de beschrijving)
- `page`: Paginanummer (begint bij 0). Volg liever de URL in de kop Link rel="next". (uit de beschrijving)

### Velden van een vlucht (volgens de specificatie; niet zelf gezien) (15)
`flightName / flightNumber / prefixIATA / prefixICAO` tekst, `flightDirection` tekst, `scheduleDate / scheduleTime` datum / tijd, `serviceType` tekst, `mainFlight / codeshares` tekst, `route.destinations` lijst, `publicFlightState.flightStates` lijst, `terminal / gate / baggageClaim.belts` tekst, `aircraftType.iataMain / iataSub` tekst, `aircraftRegistration` tekst, `estimatedLandingTime / actualLandingTime` datetime, `publicEstimatedOffBlockTime / actualOffBlockTime` datetime, `expectedTimeBoarding / expectedTimeGateOpen / expectedTimeGateClosing / expectedTimeOnBelt` datetime, `routesEu / visa` tekst / boolean, `lastUpdatedAt` datetime

### Limieten en valkuilen
- 100 verzoeken per minuut per applicatie (tier Public). Daarboven 429 Too Many Requests met Retry-After. (uit de beschrijving)
- Hoogstens 20 resultaten per pagina, pagina 0 tot en met 499. Een lege pagina kan 204 No Content geven. (uit de beschrijving)
- Token 30 minuten geldig: één keer halen en hergebruiken; een nieuw token per aanroep loopt tegen de limiet van de tokenserver. (uit de beschrijving)
- Voorwaarden: alleen om reizigers te helpen. Niet toegestaan: concurrentieanalyse, ongeautoriseerd commercieel gebruik, doorverkopen of doorgeven aan derden, en historische of statistische analyse. Gegevens hoogstens 24 uur in een cache, daarna verwijderen; geen eigen archief. Sleutels minstens elke 90 dagen vervangen. (uit de beschrijving)
- Het oude platform (App_Id, App_Key, kop ResourceVersion) stopte op 1 oktober 2026; de versie staat nu in het pad (/v4/). Een testomgeving staat op https://api-acc.schiphol.nl/public/public-flights/v4. (uit de beschrijving)
- De parameters bestaan dubbel in kleine letters (scheduledate, flightname, flightdirection, includeDelays); de camelCase-variant gaat voor. (uit de beschrijving)
- Statuscodes zijn in de specificatie geen vaste lijst; de betekenis staat op de pagina Flight Statuses. (uit de beschrijving)
- Voor statistiek een open alternatief: CBS-tabel 37478hvv (passagiers, vracht en vliegbewegingen per maand, Schiphol = A043590). Voor posities: OpenSky. (ervaring)

## Wat je ermee kunt bouwen
- [Wat vliegt er nu boven mijn huis?](https://www.opendataindex.nl/bouwen/vliegtuigen-boven-je-huis.md): Een kleine app die elke paar minuten laat zien welke vliegtuigen binnen 25 km van jouw adres vliegen, hoe hoog, hoe snel en of ze stijgen of dalen, met de live posities van OpenSky en zonder account.


## Voorbeelden met echte cijfers (3)

Per voorbeeld de bevinding, de peildatum en de aanroep die precies deze cijfers ophaalt.

- **Passagiers op Schiphol naar herkomst en bestemming (CBS): Europa is het grootste deel, 71% in 2025** (2025). Tabel 37478hvv. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/schiphol-passagiers-bestemming)
  - `https://opendata.cbs.nl/ODataApi/OData/37478hvv/TypedDataSet?$filter=Luchthavens%20eq%20'A043590'%20and%20Perioden%20eq%20'2025JJ00'&$select=EuropaTotaal_22,Azie_36,Amerika_32,Afrika_26`
- **Passagiers op Schiphol per jaar (CBS): 68,8 miljoen passagiers in 2025, 75% meer dan in 2000** (2025). Tabel 37478hvv. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/schiphol-passagiers-per-jaar)
  - `https://opendata.cbs.nl/ODataApi/OData/37478hvv/TypedDataSet?$filter=Luchthavens%20eq%20'A043590'%20and%20substringof('JJ'%2CPerioden)&$select=Perioden,TotaalAantalPassagiers_12`
- **Passagiers op Schiphol (CBS): gemiddeld het hoogst in augustus, het laagst in januari** (augustus 2026). Tabel 37478hvv. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/schiphol-passagiers-per-maand)
  - `https://opendata.cbs.nl/ODataApi/OData/37478hvv/TypedDataSet?$filter=Luchthavens%20eq%20'A043590'%20and%20substringof('MM'%2CPerioden)&$select=Perioden,TotaalAantalPassagiers_12`
