Een API voor P2000-meldingen en de incidenten erachter

Open en zonder sleutel. Wat deze site van de meldingenstroom máákt, machineleesbaar: de gelezen alarmeringen, de incidenten die eruit gereconstrueerd zijn, de gekoppelde berichtgeving en per gegeven de herkomst. Niet de ruwe P2000-stroom zelf. Antwoordt in JSON of in Markdown, dat laatste bedoeld om rechtstreeks aan een taalmodel te 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. Huisnummers worden overal uit de gestructureerde velden weggelaten.

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/pieken/{id}/context

# hetzelfde, als Markdown voor een taalmodel
curl -H 'Accept: text/markdown' https://zwaailicht.nl/api/v1/pieken/{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/pieken lijst, nieuwste eerst
/api/v1/pieken/{id} één incident
/api/v1/pieken/{id}/context het hele dossier in één request
/api/v1/pieken/{id}/messages het bewijsmateriaal
/api/v1/pieken/{id}/news gekoppelde berichtgeving
/api/v1/pieken/{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/messages?city=alkmaar lijst, filterbaar
/api/v1/messages/{id} één melding
/api/v1/messages/{id}/piek het incident eromheen

Statistiek

Aantallen incidenten, gegroepeerd.

/api/v1/stats/pieken?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 wordt aan de rand gelimiteerd, dus haal rustig op en volg pagination.next in plaats van zelf URL's te bouwen. Antwoorden zijn cachebaar; een If-None-Match levert een goedkope 304 op.

Hergebruik mag, mits elk overgenomen item een zichtbare link naar de bijbehorende pagina bevat — zie de voorwaarden. Huisnummers worden overal uit de gestructureerde velden weggelaten.

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