
# Persmonitor GraphQL API – publiek

::: warning Auth verplicht
Live calls: `Authorization: Bearer <api-token>`. Zonder token: HTTP 401.  
Prototype eerst met [demo-data](/guide/demo-data) of lees [Voor AI-tools](/guide/voor-ai-tools).  
Signup: https://monitor.persmonitor.nl/registreren · Index: [/llms.txt](/llms.txt)
:::

**Endpoint:** `POST https://graphql.persmonitor.nl/graphql`

Publiek lees-API: P2000, kazernes, voertuigen, KNMI, alerts, aircraft, wegen, locatie, RSS, analytics.  
Guides: [P2000 API](/guide/p2000-api) · [Brandweer API](/guide/brandweer-api).

Waar hieronder **Auth: public** staat, betekent dat: geen *gebruikerslogin*, wél een **geldige API-token** (Bearer).

---

## Queries

### accidentSeverityLevels

Ongeval ernst-niveaus voor accident-monitors.

Return: `[MonitorReferenceItem!]!`. Auth: Bearer API-token.

### aiDefaults

Persmonitor AI defaults: models, prompts, placeholders.

Return: `AiDefaults!`. Auth: Bearer API-token.

### aircraft

Alle gevolgde aircraft met laatste positie.

Return: `[Aircraft]!`. Auth: Bearer API-token.

### aircraftContentItem

Eén aircraft content item op slug (bijv. lifeliner-1 of politiehelikopter-01).

Return: `AircraftContentItem`. Auth: Bearer API-token.

Argumenten:

- `slug`: String!

### aircraftContentItems

Alle aircraft content items (Lifeliners + politiehelikopters). Filter optioneel met type (bijv. "lifeliner", "politie").

Return: `[AircraftContentItem]!`. Auth: Bearer API-token.

Argumenten:

- `type`: String – Filter op type: "lifeliner" of "politie".

### aircraftEventsForMonitor

Aircraft-events die door het filter van een aircraft-monitor komen (toestel + event, optioneel locatie).

Return: `[AircraftEvent!]!`. Auth: Bearer API-token.

Argumenten:

- `monitor`: MonitorRef!
- `first`: Int – Max aantal (1–200).
- `page`: Int

### aircraftLive

Live positie van één aircraft op ICAO.

Return: `Aircraft`. Auth: Bearer API-token.

Argumenten:

- `icao`: String!

### aircraftRoute

Route met punten en log-entries (voor live/detail view).

Return: `AircraftRoute`. Auth: Bearer API-token.

Argumenten:

- `route`: AircraftRouteRef – Route-selectie, bijv. { uuid }.
- `routeUuid`: String – Deprecated: gebruik route { uuid }.

### aircraftRoutes

Routes voor een aircraft. Default: alleen gestarte routes, gesorteerd op relevantie (gestart + places + active eerst).

Return: `[AircraftRoute]!`. Auth: Bearer API-token.

Argumenten:

- `icao`: String!
- `status`: String – Filter: active of completed
- `includeUnstarted`: Boolean – True: ook routes zonder geldige startedAt. Default false (alleen gestarte routes).
- `limit`: Int

### aircraftStatistics

Aircraft met aantal vluchten en recente routes (voor statistieken).

Return: `[AircraftWithStats]!`. Auth: Bearer API-token.

### amberAlertHistory

Publieke AMBER Alert-historie per landactie: wat en wanneer, zonder naam, foto of laatste-gezien-tekst.

Return: `[AmberAlertHistory!]!`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Max aantal (1–100).
- `page`: Int
- `since`: Timestamp – Alleen acties met startedAt >= since (Unix seconds).
- `until`: Timestamp – Alleen acties met startedAt <= until (Unix seconds).
- `activeOnly`: Boolean

### amberAlerts

AMBER Alert historie uit Neo4j. Gebruik activeOnly: true voor alleen nog actieve alerts.

Return: `[AmberAlert!]!`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Max aantal (1–100).
- `page`: Int
- `activeOnly`: Boolean – Alleen nog actieve alerts.

### availableHectometers

Distinct hectometer values for a road (for 112hub dropdown).

Return: `[Float!]`. Auth: Bearer API-token.

Argumenten:

- `road`: RoadRef! – Weg-selectie, bijv. { name: "A12" }.

### cities

Zoek Nederlandse woonplaatsen (City) op naam/gemeente; min. 2 tekens. Bij gelijknamige plaatsen (Heusden) toont displayName de gemeente; filter bij voorkeur op uuid.

Return: `[City!]!`. Auth: Bearer API-token.

Argumenten:

- `search`: String! – Zoekterm (min. 2 tekens).
- `first`: Int – Max. aantal resultaten (1–50).

### fireStation

Eén kazerne via slug, naam of uuid.

Return: `FireStationListItem`. Auth: Bearer API-token.

Argumenten:

- `slug`: String! – Kazerne-slug, naam of uuid.

### fireStations

Kazerne-index: `filter` (zoek/regio) + paginatie.

Return: `[FireStationListItem]`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: FireStationFilterInput – Index-filters (zoekterm, regio).

### fireStationsCount

Totaal aantal kazernes voor het opgegeven `filter` (voor paginatie).

Return: `Int!`. Auth: Bearer API-token.

Argumenten:

- `filter`: FireStationFilterInput – Zelfde filters als fireStations.

### fireVehicle

Eén voertuig via roepnummer (met of zonder streepje, bijv. "16-1630" of "161630").

Return: `FireVehicle`. Auth: Bearer API-token.

Argumenten:

- `number`: String! – Roepnummer met of zonder streepje.

### fireVehicles

Voertuig-index: `filter` (zoek/regio/kazerne) + paginatie.

Return: `[FireVehicle]`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: FireVehicleFilterInput – Index-filters (zoekterm, regio, kazerne).

### fireVehiclesCount

Totaal aantal voertuigen voor het opgegeven `filter` (voor paginatie).

Return: `Int!`. Auth: Bearer API-token.

Argumenten:

- `filter`: FireVehicleFilterInput – Zelfde filters als fireVehicles.

### hectometerMarker

Fetch one hectometer marker by UUID.

Return: `HectometerMarker`. Auth: Bearer API-token.

Argumenten:

- `marker`: HectometerMarkerRef! – Marker-selectie, bijv. { uuid }.

### hectometerMarkers

Hectometer-markers: `filter` + paginatie.

Return: `[HectometerMarker]`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: HectometerMarkerFilterInput – Index-filters (weg, hectometer, zijde).

### hectometerMarkersNearest

Nearest hectometer markers to a lat/lon (e.g. for 112hub "dichtstbijzijnde paaltje"). Each marker includes distance_km.

Return: `[HectometerMarker]`. Auth: Bearer API-token.

Argumenten:

- `lat`: Float! – Latitude (WGS84).
- `lon`: Float! – Longitude (WGS84).
- `limit`: Int – Max number of markers to return (default 10, max 50).

### highways

Snelwegen (A-wegen) uit Neo4j Road-nodes, voor matrix/files/accident filters.

Return: `[MonitorReferenceItem!]!`. Auth: Bearer API-token.

### hubAnalyticsHourly

P2000-aantallen per uur plus nacht/ochtend/middag/avond. Alleen echte meldingen. Gecached.

Return: `HubAnalyticsHourly!`. Auth: Bearer API-token.

Argumenten:

- `days`: Int – Aantal dagen in het sended-venster (7–90). Default 28.

### hubAnalyticsUrgency

P2000-urgentie (Spoed, Gepaste spoed, geen). Gecached.

Return: `HubAnalyticsUrgency!`. Auth: Bearer API-token.

Argumenten:

- `days`: Int – Aantal dagen in het sended-venster (7–90). Default 28.

### hubAnalyticsWeekdays

P2000-aantallen per weekdag, verwachting (weekdag-gemiddelde) en gisteren vs verwacht. Geen AI. Gecached.

Return: `HubAnalyticsWeekdays!`. Auth: Bearer API-token.

Argumenten:

- `days`: Int – Aantal dagen in het sended-venster (7–90). Default 28.

### imnIncidents

IMN ongevallenmeldingen (actueel en historie). Standaard alle; filter met active.

Return: `[ImnIncident!]!`. Auth: Bearer API-token.

Argumenten:

- `active`: Boolean – null/weglaten = alle; true = alleen actueel; false = alleen afgesloten.
- `first`: Int – Max aantal (1–200).
- `page`: Int

### imnIncidentsForMonitor

IMN-meldingen die door het filter van een accident-monitor komen (locatie/radius, incidentTypes).

Return: `[ImnIncident!]!`. Auth: Bearer API-token.

Argumenten:

- `monitor`: MonitorRef!
- `active`: Boolean – null/weglaten = alle; true = alleen actueel; false = alleen afgesloten.
- `first`: Int
- `page`: Int

### imnIncidentTypes

IMN incident types (Ongeval/Pech/Onbeheerd) voor accident-monitors.

Return: `[MonitorReferenceItem!]!`. Auth: Bearer API-token.

### knmiColorCodes

KNMI waarschuwingsniveaus (code geel/oranje/rood) voor knmi_weather-monitors.

Return: `[MonitorReferenceItem!]!`. Auth: Bearer API-token.

### knmiGeneral

Landelijke KNMI-waarschuwingen (general). Voor 112Hub homepage. Null als nog geen data.

Return: `KnmiRegionDetail`. Auth: Bearer API-token.

### knmiLatestObservation

Laatste weersobservatie (10-min EDR, standaard De Bilt). Null als nog geen data (voer knmi:sync-observations uit).

Return: `KnmiObservation`. Auth: Bearer API-token.

Argumenten:

- `stationId`: String – EDR location id. Null = standaardstation (De Bilt).

### knmiObservationHistory

Historie weersobservaties voor een station (voor grafieken/stats).

Return: `[KnmiObservation]!`. Auth: Bearer API-token.

Argumenten:

- `stationId`: String! – EDR location id (bijv. 0-20000-0-06260 voor De Bilt).
- `fromTs`: Int! – Start Unix timestamp.
- `toTs`: Int! – Eind Unix timestamp.
- `limit`: Int – Max aantal observaties (default 1000).

### knmiRegionDetail

Volledige KNMI-detail voor één regio (waarschuwingen met periodes). Voor 112Hub detailpagina.

Return: `KnmiRegionDetail`. Auth: Bearer API-token.

Argumenten:

- `code`: String! – Regiocode (bijv. noord-holland, limburg).

### knmiRegionDetails

Alle KNMI-regio’s met volledige detail (waarschuwingen, periodes). Voor 112Hub of bulk-export.

Return: `[KnmiRegionDetail]!`. Auth: Bearer API-token.

### knmiRegions

Lijst van alle KNMI-regio’s (12 provincies) met actuele status.

Return: `[KnmiRegion]!`. Auth: Bearer API-token.

### knmiSnapshot

Snapshot van alle KNMI-regio’s op een kalenderdag (YYYY-MM-DD, Europe/Amsterdam). Vandaag = live actuele data; anders = stand aan einde van die dag (laatste event ≤ 23:59:59).

Return: `[KnmiRegionDetail]!`. Auth: Bearer API-token.

Argumenten:

- `date`: String! – Kalenderdag YYYY-MM-DD (Europe/Amsterdam).

### knmiStatsAvailableYears

Jaren waarin ten minste één KNMI waarschuwings-event bestaat. Voor dropdown op statistiekenpagina.

Return: `[Int]!`. Auth: Bearer API-token.

### knmiStatsMonthly

Maandelijkse statistieken: per maand het aantal hele dagen per waarschuwingsniveau. Een dag telt als het hoogste niveau dat die dag actief was.

Return: `[KnmiMonthlyStats]!`. Auth: Bearer API-token.

Argumenten:

- `regionCode`: String – Regiocode (bijv. noord-holland). Null = alle regio's gecombineerd (totaal).
- `year`: Int! – Jaar (bijv. 2025).

### knmiWarningEventsForMonitor

KNMI-waarschuwingsevents die door het filter van een knmi_weather-monitor komen (regio + kleurcode).

Return: `[KnmiWarningEvent!]!`. Auth: Bearer API-token.

Argumenten:

- `monitor`: MonitorRef!
- `first`: Int – Max aantal (1–200).
- `page`: Int

### locationSuggestions

Zoek Nederlandse plaatsen, adressen of postcodes (PDOK); min. 2 tekens. Geeft coördinaten terug voor straalfilters.

Return: `[LocationSuggestion!]!`. Auth: Bearer API-token.

Argumenten:

- `search`: String! – Zoekterm (min. 2 tekens), bijv. Utrecht, Oudegracht 100 of 3511.
- `first`: Int – Max. aantal resultaten (1–20).

### nlAlerts

NL-Alert historie uit Neo4j (zoals KNMI warning events). Filters op periode, regio en actief.

Return: `[NlAlert!]!`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Max aantal (1–100).
- `page`: Int
- `since`: Timestamp – Alleen alerts met startAt >= since (Unix seconds).
- `until`: Timestamp – Alleen alerts met startAt <= until (Unix seconds).
- `regionNumber`: String – Filter op P2000-regio number (bijv. "23").
- `activeOnly`: Boolean – Alleen nog actieve (niet ingetrokken, stopAt in de toekomst).

### nlProvinces

NL-provincies uit Neo4j Province-nodes (gevuld via CBS woonplaatsen-sync).

Return: `[NlProvince!]!`. Auth: Bearer API-token.

### nlProvincesGeoJson

GeoJSON FeatureCollection van de 12 Nederlandse provincies. Voor KNMI-kaart in de monitor. Null als bestand nog niet gesynct is (voer nl-provinces:sync-geojson uit).

Return: `String`. Auth: Bearer API-token.

### nsRoutes

NS-trajecten voor ns_disruptions-monitors.

Return: `[MonitorReferenceItem!]!`. Auth: Bearer API-token.

### p2000Capcode

Haalt één P2000-capcode op.

Return: `P2000Capcode`. Auth: Bearer API-token.

Argumenten:

- `uuid`: String!

### p2000Capcodes

Capcode-index: alleen `filter` + paginatie (zelfde opzet als p2000Messages).

Return: `[P2000Capcode]`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: P2000CapcodeFilterInput – Index-filters (UUIDs, exacte naam/namen, vrije zoekterm).

### p2000CapcodesCount

Totaal aantal capcodes voor het opgegeven `filter` (voor paginatie).

Return: `Int!`. Auth: Bearer API-token.

Argumenten:

- `filter`: P2000CapcodeFilterInput – Zelfde filters als p2000Capcodes.

### p2000Categories

Alle P2000-incidentcategorieën (Neo4j P2000Category-nodes), inclusief of ze als uitruk meetellen.

Return: `[P2000Category!]!`. Auth: Bearer API-token.

### p2000Discipline

Haalt één P2000-discipline op.

Return: `P2000Discipline`. Auth: Bearer API-token.

Argumenten:

- `uuid`: String!

### p2000Disciplines

Discipline-index: `filter` + paginatie (zelfde opzet als p2000Capcodes).

Return: `[P2000Discipline]`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: P2000DisciplineFilterInput – Optioneel: zoekterm op naam.

### p2000Dossier

Deprecated alias for a single dossier view. Prefer p2000Dossiers(filter: { message: { uuid } }) or filter.dossier. Provide either dossier { uuid } or message { uuid }.

Return: `P2000Dossier`. Auth: Bearer API-token.

Argumenten:

- `dossier`: P2000MessageDossierRef – Dossier selection (not combinable with message).
- `message`: P2000MessageRef – Message selection: linked dossier or single-message fallback (not combinable with dossier).
- `messagesOrderBy`: String – Message list sort: sendedAsc or sendedDesc. Default: sendedAsc.
- `timelineOrderBy`: String – Timeline sort: newestFirst or oldestFirst. Default: newestFirst.

### p2000Dossiers

Dossiers-index (GraphRead). Overzicht: filter.orderBy + paginatie. Detail: filter.message { uuid } of filter.dossier { uuid } (+ messagesOrderBy / timelineOrderBy) — zelfde filterpatroon als p2000Messages / p2000DossierTimeline. Voor grote tijdlijnen: p2000DossierTimeline i.p.v. nested timelineEntries.

Return: `[P2000Dossier]!`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: P2000DossierFilterInput – orderBy (overzicht); message / dossier + messagesOrderBy / timelineOrderBy (samengestelde view).

### p2000DossierTimeline

Gepagineerde tijdlijn voor één dossier of via message { uuid } afgeleid dossier / single-message fallback. Gebruik dit i.p.v. nested timeline op grote payloads.

Return: `[P2000TimelineEntry]!`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: P2000DossierTimelineFilterInput! – Minimaal dossier { uuid } of message { uuid }.

### p2000GripLevels

P2000 GRIP-niveaus (Grip 1-5). Paginering: first, page.

Return: `[P2000GripLevel]`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: P2000TaxonomyFilterInput – Optioneel: o.a. `search` op naam (regio: ook op nummer).

### p2000Message

Haalt één P2000 Bericht op.

Return: `P2000Message`. Auth: Bearer API-token.

Argumenten:

- `uuid`: String!

### p2000Messages

Message-index: alleen `filter` + paginatie (o.a. monitor / dossier als geneste refs).

Return: `[P2000Message]`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: P2000MessageFilterInput – Index-filters (o.a. monitor { uuid }, dossier { uuid }, disciplines, …).

### p2000MessagesCount

Totaal aantal meldingen voor het opgegeven filter (zelfde filters als p2000Messages).

Return: `Int!`. Auth: Bearer API-token.

Argumenten:

- `filter`: P2000MessageFilterInput – Zelfde filters als p2000Messages.

### p2000MessageStatistics

Melding-aantallen per periode voor een P2000-message-filter (voertuig, capcode, kazerne, algemeen, …). Zelfde filter als p2000Messages.

Return: `P2000MessageStatistics!`. Auth: Bearer API-token.

Argumenten:

- `filter`: P2000MessageFilterInput – Index-filter (bijv. vehicle { number }, capcode { names }, disciplines). Standaard alleen echte meldingen (exerciseType geen).
- `chartDays`: Int – Aantal dagen in de grafiek (1–90, default 30).

### p2000Qualifications

P2000 kwalificaties (brandgrootte/hulpverlening, zonder GRIP). Paginering: first, page.

Return: `[P2000Qualification]`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: P2000TaxonomyFilterInput – Optioneel: o.a. `search` op naam (regio: ook op nummer).

### p2000Region

Eén veiligheidsregio via slug, naam, nummer of uuid.

Return: `P2000Region`. Auth: Bearer API-token.

Argumenten:

- `slug`: String! – Regio-slug, naam, nummer of uuid.

### p2000Regions

P2000 veiligheidsregio's (25 regio's met 2-cijferige capcode prefix). Paginering: first, page.

Return: `[P2000Region]`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: P2000TaxonomyFilterInput – Optioneel: o.a. `search` op naam (regio: ook op nummer).

### p2000Statistics

P2000-meldingen statistieken: vandaag, gisteren, grafiek (7 dagen of maanden dit jaar), per discipline/categorie/weg. Alleen echte meldingen (geen oefening/proefalarm). period=THIS_YEAR is duurder en wordt alleen berekend als gevraagd. byRoadThisYear alleen als dat veld gevraagd wordt.

Return: `P2000Statistics!`. Auth: Bearer API-token.

Argumenten:

- `period`: P2000StatisticsPeriod – Periode voor last7Days-grafiek, byDiscipline, byCategory en byRoad. Standaard LAST_7_DAYS. THIS_YEAR pas opvragen wanneer nodig (lazy).

### p2000Urgencies

P2000 urgentieniveaus (spoed, gepaste spoed, oefening). Paginering: first, page.

Return: `[P2000Urgency]`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: P2000TaxonomyFilterInput – Optioneel: o.a. `search` op naam (regio: ook op nummer).

### parseHectometerSearch

Parse free-text hectometer search (e.g. "A12 45.2 links") into road, hectometer and side. For 112hub and other frontends; logic in API for consistency.

Return: `ParseHectometerSearchResult`. Auth: Bearer API-token.

Argumenten:

- `search`: String! – Free-text search (e.g. "A12 45.2 links" or "N201 10.5").

### postcodes

Zoek Nederlandse postcodes op code; min. 2 tekens.

Return: `[Postcode!]!`. Auth: Bearer API-token.

Argumenten:

- `search`: String! – Zoekterm (min. 2 tekens, bijv. 3511 of 3511AB).
- `first`: Int – Max. aantal resultaten (1–50).

### road

Fetch one road by UUID or name.

Return: `Road`. Auth: Bearer API-token.

Argumenten:

- `road`: RoadRef! – Weg-selectie, bijv. { uuid } of { name }.

### roads

Lijst wegen (bijv. A12, N201) met optionele marker-telling; `filter` + paginatie.

Return: `[Road]`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 50; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: RoadFilterInput – Index-filters (o.a. withMarkerCount).

### roadsGroupedByPrefix

Roads grouped by prefix (A, N, S, R) for dropdowns (e.g. 112hub).

Return: `RoadsGroupedByPrefix`. Auth: Bearer API-token.

### rssFeedItems

RSS-items. Paginatie via `first`/`page`. Filter o.a. op monitor (feed-type) of feed + q/since. Gebruik rssFeedItemsCount voor het totaal.

Return: `[RssFeedItem]!`. Auth: Bearer API-token.

Argumenten:

- `first`: Int – Het aantal resultaten per pagina (default 20; globale read-cap 100, tenzij de query een hogere cap documenteert).
- `page`: Int – De pagina die je wilt opvragen.
- `filter`: RssFeedItemFilterInput – Index-filters (o.a. monitor { uuid }, feed, q, since).

### rssFeedItemsCount

Totaal aantal RSS-items (zelfde filters als rssFeedItems).

Return: `Int!`. Auth: Bearer API-token.

Argumenten:

- `filter`: RssFeedItemFilterInput – Index-filters (o.a. monitor { uuid }, feed, q, since).

### searchRoads

Zoek wegen op naam (A12, N201, …) voor autocomplete; min. 1 teken.

Return: `[Road!]!`. Auth: Bearer API-token.

Argumenten:

- `search`: String! – Zoekterm (bijv. A12 of 12).
- `first`: Int – Max. aantal resultaten (1–50).

---

## Mutations

### login

Log in with email and password. Requires API token with scope auth:login in Authorization header. Returns session tokens; the frontend stores them and sends the access token with every request.

Return: `LoginPayload`. Auth: scope.

- `input`: LoginInput! – Email and password.

### refreshToken

Vraag nieuwe access + refresh tokens aan met je refresh token. Oude refresh token wordt ongeldig (rotation). Stuur de refresh token in Authorization: Bearer `<refresh_token>`.

Return: `RefreshTokenPayload!`. Auth: scope.

### register

Register: creates an organization, environment, and user (with email and optional password) in one go. Requires API token with scope auth:register in Authorization header.

Return: `RegisterPayload`. Auth: scope.

- `input`: RegisterInput!

### requestMagicLinkLogin

Stuur een inloglink naar het e-mailadres. Vereist API-token met scope auth:login. returnTo: monitor OAuth-callback URL (zelfde regels als OAuth). Response: message code (locale=api) of vertaalde tekst (locale=nl/en).

Return: `String!`. Auth: scope.

- `email`: String! – E-mailadres van het account.
- `returnTo`: String! – Absolute URL van de client die tokens ontvangt (bijv. monitor /auth/oauth/callback).

### requestPasswordReset

Vraag een wachtwoord-reset aan. Stuurt een e-mail met link. Vereist API-token met scope auth:password_reset.

Return: `String!`. Auth: scope.

- `email`: String! – E-mailadres van het account.

### resetPassword

Wijzig wachtwoord met het token uit de reset-e-mail. Geen auth vereist.

Return: `String!`. Auth: scope.

- `token`: String! – Token uit de reset-e-mail.
- `newPassword`: String! – Nieuw wachtwoord.

### respondOnTheWay

Register or update an on-the-way (Ik ga) response using a signed token. No login required.

Return: `AlertResponder`. Auth: Bearer API-token.

- `token`: String! – HMAC-signed token from the notification link.
- `status`: String! – going or cancelled.
