P2000.page API
Documentatie voor ontwikkelaars
Met de API haal je de nieuwste P2000-meldingen op in JSON, gefilterd op regio, dienst, capcode of zoekwoord. Je hebt een eigen API-sleutel nodig. Die krijg je direct na het afsluiten van een abonnement op je API-pagina.
1. Snel beginnen
Eén verzoek, de 50 nieuwste meldingen:
https://service.p2000.page/api-JOUW_SLEUTEL Alleen brandweer in twee regio's:
https://service.p2000.page/api-JOUW_SLEUTEL/r/06~17/d/brandweer
2. Je sleutel
Je sleutel staat in de link, direct na api-:
https://service.p2000.page/api-JOUW_SLEUTEL Filters zet je erachter als /naam/waarde, zoveel als je wilt en in elke volgorde, bijvoorbeeld:
https://service.p2000.page/api-JOUW_SLEUTEL/r/06/d/brandweer/pr/1 De gewone schrijfwijze met een vraagteken werkt ook: …/api-JOUW_SLEUTEL?r=06&d=brandweer&pr=1.
Zet je sleutel nooit in code die in de browser van bezoekers draait (JavaScript op een website, een openbare app-repository). Iedereen kan hem daar uitlezen. Haal de meldingen op via je eigen server en geef ze vanaf daar door aan je website of app.
3. Filters
Meerdere waarden scheid je met een tilde ~. Zonder filters krijg je de nieuwste meldingen van heel Nederland.
| Parameter | Betekenis | Voorbeeld |
|---|---|---|
r | Regio's (twee cijfers, zie de lijst hieronder) | /r/06~17 |
d | Diensten: brandweer, ambulance, politie, mmt, lifeliner, knrm, bruggen | /d/brandweer~ambulance |
k | Capcodes (7 cijfers) en/of zoekwoorden die je extra wilt zien, naast je regio/dienst-filter. Zonder r of d krijg je alleen deze. | /k/0611072~Zwolle |
kt | Capcodes en/of zoekwoorden als enige filter: alleen meldingen met deze capcodes of woorden (binnen je regio/dienst als je die ook opgeeft) | /kt/0611072~0620591 |
plaatsje | Zoekwoorden uit k/kt zoeken in de plaatsnaam in plaats van in de meldingstekst | /kt/Zwolle/plaatsje/1 |
o | Grote opschalingen: zonder regio alleen grote opschalingen, met regio ook grote opschalingen buiten je regio | /o/1 |
pr | Alleen meldingen met prioriteit 1 (spoed) | /pr/1 |
lo | Alleen meldingen met een bekende locatie | /lo/1 |
Zoekwoorden mogen letters, cijfers, spaties en - bevatten, maximaal 60 tekens per woord.
Regio's
Gebruik de nummers 01 t/m 26 en 28. De naam van de regio staat in elke melding in het veld vr.
4. Het antwoord
Je krijgt een JSON-lijst met maximaal 50 meldingen, nieuwste eerst. Alle waarden zijn tekst (ook getallen).
[
{
"uid": "3f2c…",
"link": "https://p2000.page/u-3f2c…/7",
"timestamp": "1792751330",
"datum": "23-10-2026",
"tijd": "14:28:50",
"korttijd": "14:28u",
"melding": "P 1 BDH-01 Brand woning Dorpsstraat Zwolle",
"plaats": "Zwolle",
"regios": "R06",
"vr": "IJsselland",
"dienst": "Brandweer",
"prio": "1",
"capcodes": "0611072 0620591",
…
}
] | Veld | Inhoud |
|---|---|
uid | Unieke code van de melding (gebruik deze om dubbele meldingen over te slaan) |
link | Link naar de melding op p2000.page |
timestamp | Tijdstip als Unix-tijd (seconden) |
datum, tijd, korttijd | Datum (dd-mm-jjjj), tijd (uu:mm:ss) en korte tijd (uu:mmu) |
melding | De tekst van de P2000-melding |
plaats | Plaats van de melding |
regios | Regiocode(s), bijvoorbeeld R06 |
vr, regio | Naam van de veiligheidsregio |
dienst | Brandweer, Ambulance, Politie, MMT, KNRM, Lifeliner of bruggen |
prio | Prioriteit; 1 = spoed |
groot | 1 bij een grote opschaling |
grip, soortopschaling | GRIP-niveau (0 = geen) en soort opschaling |
capcodes | De capcodes van de melding, gescheiden door spaties |
capcodes_json | De capcodes met hun omschrijving, als JSON-tekst |
voertuigen_json | De betrokken voertuigen, als JSON-tekst (kan leeg zijn) |
locatie | Adres of locatie (Onbekend als die er niet is) |
latlong, plaats_latlon | Coördinaten van de locatie en van de plaats (kan leeg zijn) |
kruising | 1 als de locatie een kruising is |
ambu, groep, antiespam | Extra kenmerken van p2000.page (0 of 1) |
5. Limieten
Elk pakket heeft een maximaal aantal verzoeken per dag. De teller begint elke nacht om 00:00 uur (Nederlandse tijd) opnieuw.
Bij elk antwoord krijg je de koppen X-RateLimit-Limit en X-RateLimit-Remaining mee.
| Pakket | Verzoeken per dag | Ophalen kan dan |
|---|---|---|
| Hobby | 2.000 | elke 44 seconden, de hele dag |
| Hobby Plus | 20.000 | elke 5 seconden, de hele dag |
| Hobby Pro | 100.000 | elke seconde, de hele dag |
| Commercieel commercieel | 200.000 | elke seconde, de hele dag |
Tip: haal niet vaker op dan nodig. Een nieuwe melding verschijnt meestal binnen enkele seconden; elke 5–10 seconden ophalen is voor de meeste apps ruim voldoende.
6. Foutcodes
Bij een fout krijg je ook een lijst met één "melding" waarin de uitleg staat (veld melding), zodat een app die de fout direct kan tonen.
| Code | Betekenis | Wat te doen |
|---|---|---|
200 | Gelukt | Een lege lijst [] betekent: geen meldingen voor dit filter. |
401 | Sleutel ontbreekt, klopt niet of je abonnement is verlopen | Controleer je sleutel en je abonnement op je API-pagina. |
403 | Sleutel geblokkeerd | Neem contact met ons op. |
429 | Daglimiet bereikt, of te veel foute sleutels vanaf jouw IP-adres | Wacht tot de kop Retry-After (seconden) voorbij is, of kies een groter pakket. |
503 | Tijdelijk onderhoud | Probeer het over een minuut opnieuw. |
7. Voorbeelden
curl
curl "https://service.p2000.page/api-JOUW_SLEUTEL/r/06/d/brandweer" PHP
<?php
$sleutel = "JOUW_SLEUTEL"; // liever uit een configuratiebestand
$context = stream_context_create(["http" => ["timeout" => 10]]);
$json = file_get_contents("https://service.p2000.page/api-" . $sleutel . "/r/06/d/brandweer", false, $context);
$meldingen = json_decode($json, true) ?? [];
foreach ($meldingen as $m) {
echo $m["korttijd"] . " " . $m["melding"] . " (" . $m["plaats"] . ")\n";
} Python
import requests
sleutel = "JOUW_SLEUTEL" # liever uit een configuratiebestand
antwoord = requests.get(f"https://service.p2000.page/api-{sleutel}",
params={"r": "06", "d": "brandweer"}, timeout=10)
antwoord.raise_for_status()
for m in antwoord.json():
print(m["korttijd"], m["melding"], m["plaats"]) JavaScript (Node.js, op je eigen server)
const sleutel = process.env.P2000_SLEUTEL; // bijv. JOUW_SLEUTEL
const antwoord = await fetch(`https://service.p2000.page/api-${sleutel}/r/06/d/brandweer`);
const meldingen = await antwoord.json();
meldingen.forEach((m) => console.log(m.korttijd, m.melding, m.plaats)); Alleen nieuwe meldingen verwerken
Onthoud welke uid's je al hebt gezien en sla die over. Zo krijg je elke melding maar één keer, ook als je vaak ophaalt.
8. Regels in het kort
- Je sleutel is persoonlijk: deel hem niet en maak een nieuwe als hij is uitgelekt.
- Hobby-pakketten zijn alleen voor niet-commercieel gebruik. Met het pakket Commercieel mag je de API in je eigen commerciële app of website gebruiken.
- Doorverkopen of doorgeven is nooit toegestaan: je mag de API, je sleutel of de gegevens niet als eigen API, datafeed of dataset aan anderen aanbieden.
- De gegevens komen uit openbare P2000-berichten en kunnen onvolledig of vertraagd zijn. Gebruik ze nooit voor beslissingen over noodhulp – bel bij nood altijd 112.
De volledige regels staan in de algemene voorwaarden. Vragen? Mail naar info@p2000.page.