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.

meteen beginnen
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.

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

verder lezen
Hoe het werkt van antenne tot reconstructie
Pieken dezelfde incidenten, voor mensen
Meldingen de doorzoekbare tijdlijn
Atom-feeds per dienst, stad en piek
Veelgestelde vragen over P2000 en deze site