Naar inhoud

Webhook payloads ​

Als een monitor matcht, POST Persmonitor JSON naar jouw webhook-URL. Dit zijn voorbeeldpayloads (zoals bij een testmelding). Configureer het kanaal in de Monitor (Instellingen → Kanalen).

Header: X-Persmonitor-Webhook-Version: 1 of 2 (gelijk aan de payload-versie van het kanaal).

Nieuwe webhook-kanalen gebruiken standaard versie 2. Bestaande kanalen zonder payloadVersion blijven op versie 1.

Versie 2 (aanbevolen) ​

Versioned envelope: version, type, timestamp (UTC ISO-8601), test, data.

json
{
  "version": 2,
  "type": "p2000.message.created",
  "timestamp": "2026-03-18T12:34:56Z",
  "test": true,
  "data": {
    "id": "test-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "message": "[TEST] Persmonitor testmelding voor dit kanaal. A1 Damrak Amsterdam",
    "sentAt": "2026-03-18T12:34:56Z",
    "capcodes": ["13101"],
    "disciplines": ["ambulance"],
    "urgencies": ["spoed"],
    "cities": ["Amsterdam"],
    "streets": ["Damrak"],
    "url": "https://112hub.nl/…",
    "ai": {
      "title": "Optionele AI-titel",
      "body": "Optionele AI-tekst"
    }
  }
}

ai staat alleen in de payload als AI voor het kanaal aan staat.

Urgentie in v2: data.urgencies is een array van urgentie-slugs (spoed, gepaste-spoed), dezelfde waarden als filter.urgencies in GraphQL. De testmelding hierboven krijgt ["spoed"]. Op P2000Message staat urgentie als nullable object urgency { uuid, slug, name } (of null). Zie Urgentiewaarden.

Event-types (veld type) ​

typeWanneer
p2000.message.createdNieuwe P2000-melding
p2000.nl_alert.createdNL-Alert gekoppeld aan dossier
p2000.dossier.item.createdDossier-RSS item
p2000.status.updatedStatusupdate dossier
p2000.escalation.createdEscalatie

Andere monitor-typen (aircraft, KNMI, …) gebruiken dezelfde envelope met een ander type en andere data-velden.

Versie 1 (legacy) ​

Root is altijd { "content": … }. Bij P2000 lijkt content op het oude Gwingo/staging-formaat. sended is Unix-tijd in milliseconden.

json
{
  "content": {
    "uuid": "test-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "id": "test-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "message": "[TEST] Persmonitor testmelding voor dit kanaal. A1 Damrak Amsterdam",
    "sended": 1742296496000,
    "replaced_message": "De ambulance is met spoed uitgerukt naar de Damrak in Amsterdam.",
    "street": {
      "name": "Damrak",
      "city": { "name": "Amsterdam" }
    },
    "capcodes": {
      "data": [{ "capcode": "13101" }]
    },
    "discipline": { "name": "ambulance" },
    "urgency": { "name": "spoed" },
    "test": true
  }
}

Urgentie in v1: content.urgency is een object { "name": "<urgentie-slug>" } (hier "spoed").

Wat jouw endpoint moet doen ​

  1. Accepteer POST met Content-Type: application/json.
  2. Antwoord met HTTP 2xx bij succes (anders retries volgens kanaalinstelling).
  3. Behandel test: true als testmelding (niet als echte incident-feed).

Webhooks stel je in in de Monitor. GraphQL mutations voor kanalen staan niet in de publieke docs.

Zie ook: P2000 meldingen · Aan de slag