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