Skip to content

Mutations

Overzicht van alle beschikbare mutations met voorbeelden.

Registratie: bij registratie roept de frontend de register-mutatie aan. Die maakt in één keer organisatie, environment en user aan (met e-mail en optioneel wachtwoord) en koppelt ze.


register

Maakt in één keer een organisatie, environment en user aan en koppelt ze. De user krijgt een Email-object en optioneel een PasswordCredential. Wachtwoord is optioneel (bijv. voor OAuth-only users).

Argumenten:

ArgumentTypeVerplichtBeschrijving
inputRegisterInput!JaBevat email (verplicht), password (optioneel), organizationName, environmentName, displayName.

Minimale variabelen (alleen email + eventueel password):

json
{
  "input": {
    "email": "[email protected]",
    "password": "geheim123"
  }
}

Voorbeeld-mutation:

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

Variabelen (uitgebreid):

json
{
  "input": {
    "email": "[email protected]",
    "password": "geheim123",
    "organizationName": "Mijn Bedrijf",
    "environmentName": "default",
    "displayName": "Jan Jansen"
  }
}

login

Logt een gebruiker in met e-mail en wachtwoord. Bij succes retourneert de API een token en de user. De API zet geen cookie; de client (bijv. monitor.persmonitor.nl) slaat de token op en stuurt die bij volgende requests mee in de header Authorization: Bearer <token>.

Argumenten:

ArgumentTypeVerplichtBeschrijving
inputLoginInput!JaBevat email en password.

Voorbeeld-mutation:

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

Variabelen:

json
{
  "input": {
    "email": "[email protected]",
    "password": "geheim123"
  }
}

Bij succes krijg je token (access token, 15 min geldig), refreshToken (7 dagen) en user. Sla beide tokens op; gebruik refreshToken voor de mutatie refreshToken om de sessie te verlengen.

Bij verkeerde gegevens: GraphQL-error met boodschap "These credentials do not match our records." of "Invalid email address." / "Password is required."


logout

Maakt de huidige token ongeldig. Stuur de token mee in de header Authorization: Bearer <token> (niet via cookie; de API is stateless).

Geen argumenten. Response is de string "Logged out.".
Geen of ongeldige token: GraphQL-error "Not authenticated. Send Authorization: Bearer <token>."

Voorbeeld-mutation:

graphql
mutation Logout {
  logout
}

refreshToken

Geeft nieuwe access + refresh tokens terug. Stuur de refresh token in de header Authorization: Bearer &lt;refresh_token&gt;. De oude refresh token wordt ongeldig (rotation). Handig voor een heartbeat: zo blijft de sessie verlengd zonder opnieuw in te loggen.

Geen argumenten. Response is een object met accessToken en refreshToken. Sla beide op.

Voorbeeld-mutation:

graphql
mutation RefreshToken {
  refreshToken {
    accessToken
    refreshToken
  }
}

Zie Auth, sessie & heartbeat voor hoe de monitor dit gebruikt.


deleteSession

Beëindigt één specifieke sessie (AuthSession) voor de huidige gebruiker. Handig voor de “Sessies”-pagina zodat je jezelf op afstand kunt uitloggen. Vereist Authorization: Bearer &lt;token&gt;.

Argumenten:

ArgumentTypeVerplichtBeschrijving
uuidString!JaUUID van de sessie (bijv. uit mySessions).
graphql
mutation DeleteSession($uuid: String!) {
  deleteSession(uuid: $uuid)
}

Response is true bij succes. Bij een onbekende UUID of een sessie die niet bij de gebruiker hoort, volgt een GraphQL-fout.


deleteOtherSessions

Beëindigt alle andere sessies behalve de huidige. Handig als een gebruiker “overal elders” wil uitloggen na verlies van een device. Vereist Authorization: Bearer &lt;token&gt;.

Geen argumenten.

graphql
mutation DeleteOtherSessions {
  deleteOtherSessions
}

Response is true bij succes.


setCurrentEnvironment

Koppelt een environment aan de huidige sessie. De monitor-app gebruikt dit wanneer je in de UI een ander environment kiest. Vereist Authorization: Bearer &lt;token&gt;.

Argumenten:

ArgumentTypeVerplichtBeschrijving
environmentUuidString!JaEnvironment waar de gebruiker toegang toe heeft.
graphql
mutation SetCurrentEnvironment($environmentUuid: String!) {
  setCurrentEnvironment(environmentUuid: $environmentUuid) {
    uuid
    name
  }
}

Als de gebruiker geen toegang heeft, krijg je een GraphQL-fout. De nieuwe waarde is vervolgens zichtbaar via de query currentEnvironment.


createOrganization

Maakt een nieuwe organisatie aan.

Argumenten:

ArgumentTypeVerplichtBeschrijving
inputCreateOrganizationInput!JaBevat name.

Voorbeeld:

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

Variabelen:

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

createEnvironment

Maakt een nieuw environment aan onder een bestaande organisatie.

Argumenten:

ArgumentTypeVerplichtBeschrijving
inputCreateEnvironmentInput!JaBevat organizationUuid en name.

Voorbeeld:

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

Variabelen:

json
{
  "input": {
    "organizationUuid": "uuid-van-de-organisatie",
    "name": "production"
  }
}

createP2000Message

Maakt een nieuw P2000-bericht aan en kan optioneel capcodes koppelen.

Argumenten:

ArgumentTypeVerplichtBeschrijving
inputCreateP2000MessageInput!JaBevat message, sended (ISO-8601), optioneel capcodes.

Voorbeeld:

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

Variabelen:

json
{
  "input": {
    "message": "A1 DIA 16167 Rit 75494 Amsterdam",
    "sended": "2025-10-09T14:30:00Z",
    "capcodes": [
      { "name": "0100001" },
      { "name": "1300031" }
    ]
  }
}

switchEnvironment

Wisselt naar een ander environment. Maakt een nieuwe sessie aan met het gekozen environment en retourneert nieuwe access + refresh tokens. De oude sessie wordt ongeldig. De monitor-app gebruikt dit bij de environment-switcher. Vereist Authorization: Bearer &lt;token&gt;.

Argumenten:

ArgumentTypeVerplichtBeschrijving
environmentUuidString!JaUUID van het environment waar je naartoe wilt.
graphql
mutation SwitchEnvironment($environmentUuid: String!) {
  switchEnvironment(environmentUuid: $environmentUuid) {
    accessToken
    refreshToken
    environment {
      uuid
      name
    }
  }
}

Sla de nieuwe accessToken en refreshToken op; de oude token is daarna ongeldig.


updateOrganization

Werk een organisatie bij (naam). Vereist Authorization: Bearer &lt;token&gt; en lidmaatschap van de organisatie.

Argumenten:

ArgumentTypeVerplichtBeschrijving
inputUpdateOrganizationInput!JaBevat uuid en name.
graphql
mutation UpdateOrganization($input: UpdateOrganizationInput!) {
  updateOrganization(input: $input) {
    uuid
    name
    created
    changed
  }
}

createApiToken

Maakt een nieuwe API-token aan voor het huidige environment. Vereist Authorization: Bearer &lt;token&gt;. Het volledige token (plainToken) wordt alleen bij aanmaken geretourneerd; bewaar hem veilig.

Argumenten:

ArgumentTypeVerplichtBeschrijving
inputCreateApiTokenInput!JaBevat name, scopes (array van strings), validDays (optioneel, null = nooit verlopen).
graphql
mutation CreateApiToken($input: CreateApiTokenInput!) {
  createApiToken(input: $input) {
    token {
      uuid
      name
      tokenPreview
      scopes
      expiresAt
      created
    }
    plainToken
  }
}

Variabelen:

json
{
  "input": {
    "name": "Mijn integratie",
    "scopes": ["auth:login", "monitors:read", "notifications:read"],
    "validDays": 30
  }
}

validDays: null of 0 = nooit verlopen. Scopes: bijv. auth:login, auth:register, monitors:read, monitors:write, notifications:read, notifications:write, screens:read, screens:write, organization:read. Gebruik de query apiScopes voor de volledige lijst.


updateApiToken

Werk een API-token bij (naam en/of scopes). Vereist Authorization: Bearer &lt;token&gt;.

Argumenten:

ArgumentTypeVerplichtBeschrijving
uuidString!JaUUID van het token.
nameStringNeeNieuwe naam.
scopes[String]NeeNieuwe scopes (vervangt de bestaande).
graphql
mutation UpdateApiToken($uuid: String!, $name: String, $scopes: [String]) {
  updateApiToken(uuid: $uuid, name: $name, scopes: $scopes) {
    uuid
    name
    tokenPreview
    scopes
    expiresAt
    created
  }
}

deleteApiToken

Trek een API-token in (verwijderen). Vereist Authorization: Bearer &lt;token&gt;.

Argumenten:

ArgumentTypeVerplichtBeschrijving
uuidString!JaUUID van het token.
graphql
mutation DeleteApiToken($uuid: String!) {
  deleteApiToken(uuid: $uuid)
}

Response is true bij succes.


createChannel

Maakt een nieuw kanaal aan (e-mail, SMS, Telegram, webhook, etc.) voor het huidige environment. Vereist Authorization: Bearer &lt;token&gt;.

Argumenten:

ArgumentTypeVerplichtBeschrijving
inputCreateChannelInput!JaBevat type, name, en type-specifieke velden (bijv. emailAddress, url, headers).

Zie de monitor-app of GraphQL-schema voor de exacte velden per kanaaltype.


deleteChannel

Verwijdert een kanaal. Vereist Authorization: Bearer &lt;token&gt;.

Argumenten:

ArgumentTypeVerplichtBeschrijving
uuidString!JaUUID van het kanaal.
graphql
mutation DeleteChannel($uuid: String!) {
  deleteChannel(uuid: $uuid)
}

Response is true bij succes.


createMonitor

Maakt een P2000-monitor aan voor het huidige environment. Vereist Authorization: Bearer &lt;token&gt;.

Argumenten:

ArgumentTypeVerplichtBeschrijving
inputCreateMonitorInput!JaBevat name (verplicht), description, active, type, query (JSON), location, locationMode, locationLiveSourceId, radius, channels (JSON), notificationRules (JSON).

query, channels en notificationRules zijn JSON-strings. Zie de monitor-app voor de structuur.

graphql
mutation CreateMonitor($input: CreateMonitorInput!) {
  createMonitor(input: $input) {
    uuid
    name
    description
    active
    type
    created
    changed
  }
}

updateMonitor

Werk een bestaande monitor bij. Vereist Authorization: Bearer &lt;token&gt;.

Argumenten:

ArgumentTypeVerplichtBeschrijving
inputUpdateMonitorInput!JaBevat uuid (verplicht) en alle velden die je wilt bijwerken (optioneel).
graphql
mutation UpdateMonitor($input: UpdateMonitorInput!) {
  updateMonitor(input: $input) {
    uuid
    name
    description
    active
    changed
  }
}

deleteMonitor

Verwijdert een monitor. Vereist Authorization: Bearer &lt;token&gt;.

Argumenten:

ArgumentTypeVerplichtBeschrijving
uuidString!JaUUID van de monitor.
graphql
mutation DeleteMonitor($uuid: String!) {
  deleteMonitor(uuid: $uuid)
}

Response is true bij succes.


requestPasswordReset

Vraag een wachtwoord-reset aan. Vereist een API-token met scope auth:password_reset (niet de gebruikerstoken). Stuurt een e-mail met reset-link (indien geïmplementeerd).

Argumenten:

ArgumentTypeVerplichtBeschrijving
emailString!JaE-mailadres van het account.
graphql
mutation RequestPasswordReset($email: String!) {
  requestPasswordReset(email: $email)
}

Response is altijd dezelfde string (om te voorkomen dat aanvallers kunnen checken of een e-mail bestaat).


resetPassword

Wijzig wachtwoord met het token uit de reset-e-mail. Geen authenticatie vereist – het token uit de e-mail is voldoende.

Argumenten:

ArgumentTypeVerplichtBeschrijving
tokenString!JaToken uit de reset-e-mail.
newPasswordString!JaNieuw wachtwoord (min. 8 tekens).
graphql
mutation ResetPassword($token: String!, $newPassword: String!) {
  resetPassword(token: $token, newPassword: $newPassword)
}