Skip to content

Persmonitor GraphQL API – volledige specificatie (voor AI/LLM)

Deze pagina bevat de volledige API-specificatie in één document. Geschikt voor AI-assistenten en LLMs: één URL, geen navigatie nodig.
Endpoint: POST https://graphql.persmonitor.nl/graphql
Body: JSON met query (verplicht) en optioneel variables. Voor login / logout / sessionValid / me / refreshToken: header Authorization: Bearer <token> (token uit login of refreshToken).


1. Algemeen

  • Method: POST
  • URL: https://graphql.persmonitor.nl/graphql
  • Content-Type: application/json
  • Body: { "query": "&lt;GraphQL document&gt;", "variables": { ... } }variables is optioneel.
  • Authenticatie: Voor beveiligde operaties: header Authorization: Bearer <token>. Token krijg je via de login-mutatie (of refreshToken om te verlengen). De API zet geen cookie; de client slaat de token op.

Voorbeeld (curl):

bash
curl -X POST https://graphql.persmonitor.nl/graphql \
  -H "Content-Type: application/json" \
  -d '{"query":"query { __typename }"}'

2. Queries

2.1 sessionValid

Of de token nog geldig is. Geen argumenten. Header: Authorization: Bearer <token>. Response: Boolean!true of false.

graphql
query SessionValid { sessionValid }

2.2 me

Huidige gebruiker op basis van token. Geen argumenten. Header: Authorization: Bearer <token>. Zonder of met ongeldige token: me is null. isAdmin is true voor admin-accounts.

graphql
query Me {
  me {
    uuid displayName created changed
    email { address verified }
    hasPassword
    isAdmin
  }
}

2.3 mySessions

Alle sessies van de huidige gebruiker. Header: Authorization: Bearer <token>. Geen argumenten.

graphql
query MySessions { mySessions { uuid ipAddress userAgent lastActivityAt expiresAt isCurrent } }

2.4 currentEnvironment

Huidige environment van de sessie. Header: Authorization: Bearer <token>. Geen argumenten.

graphql
query CurrentEnvironment { currentEnvironment { uuid name organization { uuid name } } }

2.5 myOrganizations

Alle organisaties waar de gebruiker lid van is. Header: Authorization: Bearer <token>. Geen argumenten.

graphql
query MyOrganizations { myOrganizations { uuid name environments { uuid name organization { name } } } }

2.6 channels

Alle kanalen (e-mail, SMS, webhook, etc.) voor het huidige environment. Header: Authorization: Bearer <token>. Geen argumenten.

graphql
query Channels { channels { uuid type name emailAddress url headers { name value } } }

2.6b monitors

Alle P2000-monitoren voor het huidige environment. Header: Authorization: Bearer <token>. Geen argumenten. Velden query, channels, notificationRules zijn JSON-strings.

graphql
query Monitors { monitors { uuid name description active type query location locationMode radius channels notificationRules created changed } }

2.6c monitor

Eén monitor op UUID. Argument: uuid (String!, verplicht).

graphql
query Monitor($uuid: String!) { monitor(uuid: $uuid) { uuid name description active type query location locationMode radius channels notificationRules created changed } }

2.7 apiTokens

Alle API-tokens voor het huidige environment. Header: Authorization: Bearer <token>. Geen argumenten.

graphql
query ApiTokens { apiTokens { uuid name tokenPreview scopes expiresAt created } }

2.8 apiToken

Eén API-token op UUID. Argument: uuid (String!, verplicht).

graphql
query ApiToken($uuid: String!) { apiToken(uuid: $uuid) { uuid name tokenPreview scopes expiresAt created } }

2.9 apiScopes

Alle beschikbare scopes voor API-tokens. Header: Authorization: Bearer <token>. Geen argumenten.

graphql
query ApiScopes { apiScopes { name description } }

2.10 p2000Messages

Lijst P2000-berichten. Paginering: first (default 10), page (default 1). Optioneel filter: filter (type P2000MessageFilterInput).

P2000MessageFilterInput: sended (object met from en to, beide ISO-8601 verplicht), capcodes (array van capcode-UUIDs). Beide velden optioneel.

GraphQL:

graphql
query GetP2000Messages($first: Int, $page: Int, $filter: P2000MessageFilterInput) {
  p2000Messages(first: $first, page: $page, filter: $filter) {
    uuid
    message
    sended
    created
    changed
    capcodes { uuid name }
  }
}

Variabelen (voorbeeld):

json
{
  "first": 10,
  "page": 1,
  "filter": {
    "sended": { "from": "2025-01-01T00:00:00Z", "to": "2025-12-31T23:59:59Z" },
    "capcodes": ["uuid-1", "uuid-2"]
  }
}

2.11 p2000Message

Eén P2000-bericht op UUID. Argument: uuid (String!, verplicht).

graphql
query GetP2000Message($uuid: String!) {
  p2000Message(uuid: $uuid) {
    uuid message sended created changed
    capcodes { uuid name }
  }
}

Variabelen: { "uuid": "&lt;bericht-uuid&gt;" }

2.5 p2000Capcodes

Lijst P2000-capcodes. Paginering: first, page. Optioneel filter: filter (type P2000CapcodeFilterInput).

P2000CapcodeFilterInput: sended (object met from en to, ISO-8601), capcodes (array van UUIDs). Beide optioneel.

graphql
query GetP2000Capcodes($first: Int, $page: Int, $filter: P2000CapcodeFilterInput) {
  p2000Capcodes(first: $first, page: $page, filter: $filter) {
    uuid name created changed
    discipline { uuid name }
  }
}

Variabelen (voorbeeld): { "first": 20, "page": 1, "filter": { "sended": { "from": "2025-01-01T00:00:00Z", "to": "2025-12-31T23:59:59Z" } } }

2.13 p2000Capcode

Eén P2000-capcode op UUID. Argument: uuid (String!, verplicht).

graphql
query GetP2000Capcode($uuid: String!) {
  p2000Capcode(uuid: $uuid) {
    uuid name created changed discipline { uuid name }
  }
}

Variabelen: { "uuid": "&lt;capcode-uuid&gt;" }

2.14 knmiGeneral (landelijk, 112Hub homepage)

Landelijke KNMI-waarschuwingen (één request voor de homepage). Geen authenticatie. Null als nog geen data (sync nog niet gedraaid). Zelfde velden als een regio-detail: code, name, statusCode, status, warnings met periodes.

graphql
query KnmiGeneral {
  knmiGeneral {
    regionCode
    name
    statusCode
    status { description }
    warnings { icon label periods { description status_code from to } }
  }
}

2.15 knmiRegions (overzicht regio’s)

Lijst van alle KNMI-regio’s (12 provincies) met actuele status. Geen authenticatie vereist. Elk regio is een losse node; data komt uit Neo4j (sync elke 5 min).

graphql
query KnmiRegions {
  knmiRegions {
    uuid
    code
    name
    statusCode
    status { description }
  }
}

2.16 knmiRegionDetail (detailpagina 112Hub)

Volledige KNMI-detail voor één regio: waarschuwingen met periodes (van–tot, beschrijving). Argument: code (String!, regiocode zoals noord-holland, limburg). Null als code onbekend of nog geen data.

graphql
query KnmiRegionDetail($code: String!) {
  knmiRegionDetail(code: $code) {
    regionCode
    name
    statusCode
    status { description }
    warnings {
      icon
      label
      periods { description status_code from to }
    }
  }
}

Variabelen: { "code": "noord-holland" }

2.17 knmiRegionDetails (alle regio’s met volledige detail)

Alle KNMI-regio’s met dezelfde velden als knmiRegionDetail (waarschuwingen, periodes). Handig voor één call als je alle detailpagina-data nodig hebt.

graphql
query KnmiRegionDetails {
  knmiRegionDetails {
    regionCode
    name
    statusCode
    status { description }
    warnings { icon label periods { description status_code from to } }
  }
}

3. Mutations

3.1 register

Maakt organisatie, environment en user in één keer. Input: RegisterInput! — velden: email (verplicht), password (optioneel), organizationName, environmentName, displayName (alle optioneel).

graphql
mutation Register($input: RegisterInput!) {
  register(input: $input) {
    user { uuid displayName created email { address verified } hasPassword }
    organization { uuid name }
    environment { uuid name }
  }
}

Variabelen (minimaal): { "input": { "email": "[email protected]" } }
Met wachtwoord: { "input": { "email": "[email protected]", "password": "secret" } }
Volledig: { "input": { "email": "...", "password": "...", "organizationName": "...", "environmentName": "default", "displayName": "..." } }

3.2 login

Log in met e-mail en wachtwoord. Input: LoginInput! — velden email, password. Bij succes: token (access token), refreshToken en user. De API zet geen cookie; client slaat tokens op en stuurt access token mee als Authorization: Bearer <token>. Vereist een API-token met scope auth:login in de header (voor de monitor-app).

graphql
mutation Login($input: LoginInput!) {
  login(input: $input) {
    user { uuid displayName created email { address verified } hasPassword }
    token
    refreshToken
    message
  }
}

Variabelen: { "input": { "email": "[email protected]", "password": "secret" } }
Fout (verkeerde gegevens): "These credentials do not match our records."

3.3 logout

Token ongeldig maken. Geen argumenten. Header: Authorization: Bearer <token>. Response: string "Logged out.".
Geen token: "Not authenticated. Send Authorization: Bearer <token>."

graphql
mutation Logout { logout }

3.4 refreshToken

Nieuwe access + refresh tokens. Stuur de refresh token in de header Authorization: Bearer <refresh_token>. De oude refresh token wordt ongeldig (rotation). Response: object met accessToken en refreshToken. Handig voor heartbeat/sessie-verlenging.

graphql
mutation RefreshToken {
  refreshToken {
    accessToken
    refreshToken
  }
}

3.5 createOrganization

Input: CreateOrganizationInput! — veld name.

graphql
mutation CreateOrganization($input: CreateOrganizationInput!) {
  createOrganization(input: $input) { uuid name created changed }
}

Variabelen: { "input": { "name": "Mijn Bedrijf" } }

3.6 createEnvironment

Input: CreateEnvironmentInput! — velden organizationUuid, name.

graphql
mutation CreateEnvironment($input: CreateEnvironmentInput!) {
  createEnvironment(input: $input) {
    uuid name created changed organization { uuid name }
  }
}

Variabelen: { "input": { "organizationUuid": "&lt;org-uuid&gt;", "name": "production" } }

3.7 deleteSession

Beëindigt één sessie. Argument: uuid (String!, sessie-UUID). Header: Authorization: Bearer <token>.

graphql
mutation DeleteSession($uuid: String!) { deleteSession(uuid: $uuid) }

3.8 deleteOtherSessions

Beëindigt alle andere sessies behalve de huidige. Geen argumenten. Header: Authorization: Bearer <token>.

graphql
mutation DeleteOtherSessions { deleteOtherSessions }

3.9 setCurrentEnvironment

Koppelt environment aan sessie. Argument: environmentUuid (String!). Header: Authorization: Bearer <token>.

graphql
mutation SetCurrentEnvironment($environmentUuid: String!) {
  setCurrentEnvironment(environmentUuid: $environmentUuid) { uuid name }
}

3.10 switchEnvironment

Wisselt naar ander environment; nieuwe access + refresh tokens. Argument: environmentUuid (String!). Header: Authorization: Bearer <token>.

graphql
mutation SwitchEnvironment($environmentUuid: String!) {
  switchEnvironment(environmentUuid: $environmentUuid) {
    accessToken refreshToken environment { uuid name }
  }
}

3.11 updateOrganization

Werk organisatie bij. Input: UpdateOrganizationInput! — velden uuid, name. Header: Authorization: Bearer <token>.

graphql
mutation UpdateOrganization($input: UpdateOrganizationInput!) {
  updateOrganization(input: $input) { uuid name created changed }
}

3.12 createApiToken

Maak API-token voor huidige environment. Input: CreateApiTokenInput! — velden name, scopes ([String]), optioneel validDays. Response bevat token en plainToken (alleen bij aanmaken). Header: Authorization: Bearer <token>.

graphql
mutation CreateApiToken($input: CreateApiTokenInput!) {
  createApiToken(input: $input) {
    token { uuid name tokenPreview scopes expiresAt created }
    plainToken
  }
}

3.13 updateApiToken

Werk API-token bij. Argumenten: uuid (String!), optioneel name, scopes. Header: Authorization: Bearer <token>.

graphql
mutation UpdateApiToken($uuid: String!, $name: String, $scopes: [String]) {
  updateApiToken(uuid: $uuid, name: $name, scopes: $scopes) {
    uuid name tokenPreview scopes expiresAt created
  }
}

3.14 deleteApiToken

Trek API-token in. Argument: uuid (String!). Header: Authorization: Bearer <token>.

graphql
mutation DeleteApiToken($uuid: String!) { deleteApiToken(uuid: $uuid) }

3.15 createChannel

Maak kanaal (e-mail, SMS, webhook, etc.). Input: CreateChannelInput! — velden type, name, type-specifieke velden. Header: Authorization: Bearer <token>.

3.16 deleteChannel

Verwijder kanaal. Argument: uuid (String!). Header: Authorization: Bearer <token>.

graphql
mutation DeleteChannel($uuid: String!) { deleteChannel(uuid: $uuid) }

3.16b createMonitor

Maak P2000-monitor. Input: CreateMonitorInput! — velden name (verplicht), description, active, type, query (JSON), location, locationMode, locationLiveSourceId, radius, channels (JSON), notificationRules (JSON). Header: Authorization: Bearer <token>.

3.16c updateMonitor

Werk monitor bij. Input: UpdateMonitorInput! — veld uuid (verplicht) + optionele velden. Header: Authorization: Bearer <token>.

3.16d deleteMonitor

Verwijder monitor. Argument: uuid (String!). Header: Authorization: Bearer <token>.

graphql
mutation DeleteMonitor($uuid: String!) { deleteMonitor(uuid: $uuid) }

3.17 requestPasswordReset

Vraag wachtwoord-reset aan. Argument: email (String!). Vereist API-token met scope auth:password_reset.

graphql
mutation RequestPasswordReset($email: String!) { requestPasswordReset(email: $email) }

3.18 resetPassword

Wijzig wachtwoord met token uit reset-e-mail. Argumenten: token (String!), newPassword (String!). Geen authenticatie vereist.

graphql
mutation ResetPassword($token: String!, $newPassword: String!) {
  resetPassword(token: $token, newPassword: $newPassword)
}

3.19 createP2000Message

Input: CreateP2000MessageInput! — velden: message, sended (ISO-8601), optioneel capcodes (array van objecten met name).

graphql
mutation CreateP2000Message($input: CreateP2000MessageInput!) {
  createP2000Message(input: $input) {
    uuid message sended created capcodes { uuid name }
  }
}

Variabelen: { "input": { "message": "A1 DIA ...", "sended": "2025-10-09T14:30:00Z", "capcodes": [{ "name": "0100001" }] } }


4. Filtertypes (samenvatting)

  • DateRangeInput: from (DateTime!, ISO-8601), to (DateTime!, ISO-8601).
  • P2000MessageFilterInput: sended (DateRangeInput), capcodes ([String]). Voor query p2000Messages.
  • P2000CapcodeFilterInput: sended (DateRangeInput), capcodes ([String]). Voor query p2000Capcodes.

5. Overzicht operaties

TypeOperaties
QueriessessionValid, me, mySessions, currentEnvironment, myOrganizations, channels, monitors, monitor, apiTokens, apiToken, apiScopes, p2000Messages, p2000Message, p2000Capcodes, p2000Capcode
Mutationsregister, login, logout, refreshToken, deleteSession, deleteOtherSessions, setCurrentEnvironment, switchEnvironment, createOrganization, updateOrganization, createEnvironment, createApiToken, updateApiToken, deleteApiToken, createChannel, deleteChannel, createMonitor, updateMonitor, deleteMonitor, requestPasswordReset, resetPassword, createP2000Message

Alle requests: POST https://graphql.persmonitor.nl/graphql met JSON body { "query": "...", "variables": { ... } }.