Een API voor P2000-meldingen en de incidenten erachter
Deze API is open en vraagt geen sleutel. Je krijgt de meldingen zoals Zwaailicht ze gelezen heeft, de incidenten die daaruit zijn gereconstrueerd, het nieuws dat eraan gekoppeld is, en bij elk gegeven waar het vandaan komt. De ruwe P2000-berichten zelf zitten er niet in. Antwoorden komen in JSON, of in Markdown als je ze rechtstreeks aan een taalmodel wil geven.
Melding of piek
Een melding is één P2000-alarmering, zoals Zwaailicht die gelezen heeft: een titel, een omschrijving en de herkende velden. Uit één melding valt weinig af te leiden — "woningbrand" kan ook een aangebrande pan zijn.
Een piek is wat eruit gereconstrueerd is: meldingen die binnen ongeveer een kilometer en twintig minuten bij elkaar horen. Dat is het bruikbare antwoord op "wat is daar gebeurd".
Waargenomen of gegenereerd
Alleen de alarmering zelf is waargenomen. Prioriteit, locatie, incidenttype, eenheden en de titel zijn er met vaste regels uit afgeleid; de samenvatting van een piek en het oordeel of meldingen één incident vormen komen van een taalmodel.
Elke piek heeft daarom een aparte herkomstresource die dat onderscheid expliciet maakt, per veld. Behandel een gegenereerde samenvatting dus niet als een geverifieerd feit.
Wat je niet krijgt
De letterlijke P2000-pagertekst wordt via deze API niet herpubliceerd, net zomin als via de Atom-feeds. Wat je per melding krijgt is Zwaailichts eigen lezing: een gegenereerde titel en omschrijving plus de herkende velden — tijd, dienst, prioriteit, incidenttype, plaats en eenheden.
Het veld source.original_text is daarom altijd leeg, met een toelichting ernaast, zodat een agent het als beleid leest en niet als ontbrekende data.
curl https://zwaailicht.nl/api/v1/
# zoek een incident
curl 'https://zwaailicht.nl/api/v1/search?q=grote+brand&city=alkmaar'
# het hele dossier in één request — piek, bewijs, eenheden, nieuws, herkomst
curl https://zwaailicht.nl/api/v1/incidents/{id}/context
# hetzelfde, als Markdown voor een taalmodel
curl -H 'Accept: text/markdown' https://zwaailicht.nl/api/v1/incidents/{id}/context
Zoeken
Eén ingang voor beide soorten resultaten. Pieken staan boven losse meldingen, want een gereconstrueerd incident is meestal het bruikbare antwoord.
/api/v1/search?q=grote+brand
vrij zoeken
/api/v1/search?lat=52.63&lon=4.75&radius=5
binnen een straal (km)
Incidenten (pieken)
Een piek is de reconstructie: meldingen die in tijd en ruimte bij elkaar horen, met een automatisch geschreven titel en samenvatting.
/api/v1/incidents
lijst, nieuwste eerst
/api/v1/incidents/{id}
één incident
/api/v1/incidents/{id}/context
het hele dossier in één request
/api/v1/incidents/{id}/alerts
het bewijsmateriaal
/api/v1/incidents/{id}/news
gekoppelde berichtgeving
/api/v1/incidents/{id}/provenance
wat waargenomen is en wat gegenereerd
Meldingen
Een melding is één P2000-alarmering, zoals Zwaailicht die gelezen heeft: titel, omschrijving en de herkende velden.
/api/v1/alerts?city=alkmaar
lijst, filterbaar
/api/v1/alerts/{id}
één melding
/api/v1/alerts/{id}/incident
het incident eromheen
Statistiek
Aantallen incidenten, gegroepeerd.
/api/v1/stats/incidents?group_by=hour
per uur, dag, weekdag, plaats, type of dienst
Filters
Deze parameters werken op alle drie de collecties: meldingen, pieken en zoeken. Op een piek betekent een dienst- of typefilter dat minstens één melding in dat incident eraan voldoet.
from, to
ISO-8601, bijv. 2026-08-31T00:00:00Z
city
slug of plaatsnaam — alkmaar en Alkmaar werken allebei
service
brandweer, ambulance, politie, lifeliner, knrm
incident_type
fire, medical, traffic, rescue, water, hazmat, violence, major
priority
P2000-prioriteitscode, bijv. A1
limit, cursor
paginering — volg pagination.next, bouw hem niet zelf
JSON of Markdown
Elke resource antwoordt op Accept: application/json (standaard) en op Accept: text/markdown. Beide worden uit dezelfde gegevens opgebouwd, dus ze kunnen niet uit elkaar lopen.
De Markdown-versie is geschreven om zonder bewerking in een context window te passen: feiten als losse regels, gegenereerde tekst als zodanig benoemd, en links naar de bijbehorende API-resources.
Voor AI-agents
Geef een assistent deze regel en die kan de rest zelf vinden:
https://zwaailicht.nl/llms.txt
Of open llms.txt zelf. Verder machineleesbaar: de OpenAPI-beschrijving, llms-full.txt en de api-catalog. Elke belangrijke pagina heeft daarnaast een Markdown-versie: zet .md achter het pad.
Grenzen en voorwaarden
Geen sleutel, geen registratie, alleen lezen. Er geldt een limiet van 10 verzoeken per 10 seconden per IP-adres; daarboven krijg je een 429 met een Retry-After-header. Volg pagination.next in plaats van zelf URL's te bouwen. Lijsten met meldingen lopen 90 dagen terug; een losse melding blijft op elke leeftijd opvraagbaar, en pieken zijn niet begrensd. Antwoorden zijn cachebaar en met If-None-Match krijg je een goedkope 304 terug, al telt ook die mee voor de limiet.
Voor bulkdata, een volledige export of ruimere toegang: mail [email protected]. Voor onderzoek, journalistiek en onderwijs is dat gratis. Zakelijk gebruik gaat in overleg, via [email protected]. De hele verzameling er ongevraagd doorheen trekken mag niet; zie bulkdata op aanvraag.
Hergebruik mag, mits elk overgenomen item een zichtbare link naar de bijbehorende pagina bevat; zie de voorwaarden.