API voor 112-meldingen

P2000 is openbaar. Bruikbaar is het niet: het is een stroom halve zinnen met codes en afkortingen. Wij leveren het resultaat van het uitzoekwerk — met coördinaten, een leesbare straat en een incident-nummer — binnen een seconde na de alarmering.

Wat je krijgt bovenop de ruwe stroom

Coördinaten
Wij zetten Nemerlaerhof Helmond om naar een punt, met de precisie erbij: adres, straat, postcode of alleen de woonplaats. Je weet dus ook hóé nauwkeurig het is.
Echte straatnamen
Elke gevonden naam wordt getoetst aan de lijst van alle 171.664 Nederlandse straatnamen. Geen achtervoegselgokwerk, dus ook "Balatonmeer" en "Het Zand" komen eruit.
Dienst en urgentie
Brandweer, ambulance, politie of KNRM, met de urgentiecode los daarvan. Spreekt de berichtkop de capcodes tegen, dan winnen de capcodes.
Eenheden
Roepnummers vertaald naar wat het is: tankautospuit, zorgambulance, mobiel medisch team — inclusief de kazerne waar hij vandaan komt.
Incidenten
Oproepen die bij elkaar horen zitten onder één incident_id, zodat je niet zes keer dezelfde brand doorgeeft.
Gemeten vluchten
Bij een traumahelikopter koppelen we de ADS-B-vlucht aan de alarmering: opgestegen om, boven de locatie om, op zoveel meter. Dat is een tweede bron, geen afleiding.

Wat wij niet leveren: de afloop van een inzet. P2000 meldt nooit dat iets klaar is, en wij verzinnen dat niet.

Meldingen ophalen

curl -H "X-API-Key: JOUW_SLEUTEL" \
  "https://112hier.nl/api/v1/meldingen?dienst=brandweer&limiet=50"

Blijf bij: onthoud laatste_id uit het antwoord en vraag de volgende ronde op met ?sinds=. Dan krijg je alleen wat je nog niet had.

GET /api/v1/meldingen?sinds=1395
ParameterBetekenis
sindsalleen meldingen met een hoger id
dienstbrandweer, ambulance, politie, knrm
regioVR01 t/m VR25
plaatswoonplaats, bijvoorbeeld haarlem
urgentieA0, A1, A2, P 1, PRIO 1 …
met_locatie1 = alleen meldingen die op de kaart staan
limiet1 – 200, standaard 50

Webhook: wij bellen jou

Pollen is prima, maar een webhook is sneller en scheelt verkeer. Zodra er een melding binnenkomt die aan je filter voldoet, sturen wij hem door.

curl -X POST -H "X-API-Key: JOUW_SLEUTEL" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://jouwsite.nl/hook",
    "soort": "melding",
    "filters": { "regio": "VR12", "dienst": "brandweer" }
  }' \
  https://112hier.nl/api/v1/webhooks

Filteren kan op dienst, regio, plaats, urgentie of op een straal: {"lat":52.38,"lon":4.64,"straal_km":15}.

Controleren dat wij het zijn

Elke levering krijgt twee headers mee. Bereken zelf de handtekening en vergelijk; wijkt hij af, gooi het bericht weg.

X-112hier-Timestamp: 1789926000
X-112hier-Signature: sha256=<hmac>

hmac = HMAC_SHA256(geheim, "<timestamp>.<body>")

Wij proberen drie keer met oplopende pauze. Een 4xx zien we als "aan jouw kant fout" en herhalen we niet. Twintig mislukkingen achter elkaar zet de webhook uit; je ziet dat terug bij GET /api/v1/webhooks. Met POST /api/v1/webhooks/<id>/test stuur je jezelf een proefbericht, zodat je je ontvanger kunt bouwen zonder op een brand te wachten.

Alle ingangen

AdresWat het doet
GET /api/v1/meldingenlosse alarmeringen, nieuwste eerst (of vooruit met sinds)
GET /api/v1/meldingen/<id>één melding
GET /api/v1/incidentensamengevoegde gebeurtenissen
GET /api/v1/incidenten/<id>incident met alle oproepen én gemeten helikoptervluchten
GET /api/v1/ontvangsthoe onze antenne het doet — dezelfde cijfers als hier
GET /api/v1/webhooksje webhooks, met foutstatus
POST /api/v1/webhookswebhook aanmaken
DELETE /api/v1/webhooks/<id>webhook weghalen

Limiet staat in de headers X-RateLimit-Limit en X-RateLimit-Remaining. Zit je eroverheen, dan krijg je 429 — gebruik dan een webhook in plaats van vaker te pollen.

Eerlijk over wat dit is

Wij ontvangen P2000 met één antenne op één plek. Wat die antenne niet haalt, staat ook niet in deze API. Op de ontvangstpagina staat live hoeveel dat is: aantal berichten per uur, aandeel schoon ontvangen en de langste stilte. Wij publiceren die cijfers ook als ze tegenvallen, zodat je zelf kunt beoordelen of dit goed genoeg is voor wat jij ermee wilt.

De duiding — dienst, straat, coördinaat, incidentindeling — is ons werk en dus ons oordeel. Elk veld zegt erbij hoe zeker het is: precisie bij de locatie, kwaliteit bij de melding, inschatting bij het incident. Wat wij niet weten, is null en niet weggelaten.

Gebruik het niet voor iets waar levens van afhangen. Dit is een hobbyontvanger, geen C2000-aansluiting.

Sleutel aanvragen