Appearance
Persmonitor GraphQL API – publiek
Beta
Deze documentatie staat in beta. Test tegen de live API bij twijfel.
Endpoint: POST https://graphql.persmonitor.nl/graphql
Publiek lees-API: P2000, kazernes, voertuigen, KNMI, alerts, aircraft, wegen, locatie, RSS, analytics.
Queries
accidentSeverityLevels
Ongeval ernst-niveaus voor accident-monitors.
Return: [MonitorReferenceItem!]!. Auth: public.
activeAmberAlerts
Momenteel actieve AMBER Alerts uit Neo4j. Lege lijst als er geen actief alert is.
Return: [AmberAlert!]!. Auth: public.
activeNlAlerts
Momenteel actieve NL-Alerts uit Neo4j (gesynchroniseerd van public-warning). Lege lijst als er geen actief alert is.
Return: [NlAlert!]!. Auth: public.
aiDefaults
Persmonitor AI defaults: models, prompts, placeholders.
Return: AiDefaults!. Auth: public.
aircraft
Alle gevolgde aircraft met laatste positie.
Return: [Aircraft]!. Auth: public.
aircraftContentItem
Eén aircraft content item op slug (bijv. lifeliner-1 of politiehelikopter-01).
Return: AircraftContentItem. Auth: public.
Argumenten:
slug: String!
aircraftContentItems
Alle aircraft content items (Lifeliners + politiehelikopters). Filter optioneel met type (bijv. "lifeliner", "politie").
Return: [AircraftContentItem]!. Auth: public.
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: public.
Argumenten:
monitor: MonitorRef!first: Int – Max aantal (1–200).page: Int
aircraftLive
Live positie van één aircraft op ICAO.
Return: Aircraft. Auth: public.
Argumenten:
icao: String!
aircraftRoute
Route met punten en log-entries (voor live/detail view).
Return: AircraftRoute. Auth: public.
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: public.
Argumenten:
icao: String!status: String – Filter: active of completedincludeUnstarted: 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: public.
amberAlertHistory
Publieke AMBER Alert-historie per landactie: wat en wanneer, zonder naam, foto of laatste-gezien-tekst.
Return: [AmberAlertHistory!]!. Auth: public.
Argumenten:
first: Int – Max aantal (1–100).page: Intsince: 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.
Return: [AmberAlert!]!. Auth: public.
Argumenten:
first: Int – Max aantal (1–100).page: IntactiveOnly: Boolean
availableHectometers
Distinct hectometer values for a road (for 112hub dropdown).
Return: [Float!]. Auth: public.
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: public.
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: public.
Argumenten:
slug: String! – Kazerne-slug, naam of uuid.
fireStations
Kazerne-index: filter (zoek/regio) + paginatie.
Return: [FireStationListItem]. Auth: public.
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: public.
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: public.
Argumenten:
number: String! – Roepnummer met of zonder streepje.
fireVehicles
Voertuig-index: filter (zoek/regio/kazerne) + paginatie.
Return: [FireVehicle]. Auth: public.
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: public.
Argumenten:
filter: FireVehicleFilterInput – Zelfde filters als fireVehicles.
hectometerMarker
Fetch one hectometer marker by UUID.
Return: HectometerMarker. Auth: public.
Argumenten:
marker: HectometerMarkerRef! – Marker-selectie, bijv. { uuid }.
hectometerMarkers
Hectometer-markers: filter + paginatie.
Return: [HectometerMarker]. Auth: public.
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: public.
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: public.
hubAnalyticsHourly
P2000-aantallen per uur plus nacht/ochtend/middag/avond. Alleen echte meldingen. Gecached.
Return: HubAnalyticsHourly!. Auth: public.
Argumenten:
days: Int – Aantal dagen in het sended-venster (7–90). Default 28.
hubAnalyticsUrgency
P2000-urgentie (Spoed, Gepaste spoed, geen). Gecached.
Return: HubAnalyticsUrgency!. Auth: public.
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: public.
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: public.
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: public.
Argumenten:
monitor: MonitorRef!active: Boolean – null/weglaten = alle; true = alleen actueel; false = alleen afgesloten.first: Intpage: Int
imnIncidentTypes
IMN incident types (Ongeval/Pech/Onbeheerd) voor accident-monitors.
Return: [MonitorReferenceItem!]!. Auth: public.
knmiColorCodes
KNMI waarschuwingsniveaus (code geel/oranje/rood) voor knmi_weather-monitors.
Return: [MonitorReferenceItem!]!. Auth: public.
knmiGeneral
Landelijke KNMI-waarschuwingen (general). Voor 112Hub homepage. Null als nog geen data.
Return: KnmiRegionDetail. Auth: public.
knmiLatestObservation
Laatste weersobservatie (10-min EDR, standaard De Bilt). Null als nog geen data (voer knmi:sync-observations uit).
Return: KnmiObservation. Auth: public.
Argumenten:
stationId: String – EDR location id. Null = standaardstation (De Bilt).
knmiObservationHistory
Historie weersobservaties voor een station (voor grafieken/stats).
Return: [KnmiObservation]!. Auth: public.
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: public.
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: public.
knmiRegions
Lijst van alle KNMI-regio’s (12 provincies) met actuele status.
Return: [KnmiRegion]!. Auth: public.
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: public.
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: public.
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: public.
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: public.
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: public.
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: public.
Argumenten:
first: Int – Max aantal (1–100).page: Intsince: 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: public.
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: public.
nsRoutes
NS-trajecten voor ns_disruptions-monitors.
Return: [MonitorReferenceItem!]!. Auth: public.
p2000Capcode
Haalt één P2000-capcode op.
Return: P2000Capcode. Auth: public.
Argumenten:
uuid: String!
p2000Capcodes
Capcode-index: alleen filter + paginatie (zelfde opzet als p2000Messages).
Return: [P2000Capcode]. Auth: public.
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: public.
Argumenten:
filter: P2000CapcodeFilterInput – Zelfde filters als p2000Capcodes.
p2000Categories
Alle P2000-incidentcategorieën (Neo4j P2000Category-nodes), inclusief of ze als uitruk meetellen.
Return: [P2000Category!]!. Auth: public.
p2000Discipline
Haalt één P2000-discipline op.
Return: P2000Discipline. Auth: public.
Argumenten:
uuid: String!
p2000Disciplines
Discipline-index: filter + paginatie (zelfde opzet als p2000Capcodes).
Return: [P2000Discipline]. Auth: public.
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: public.
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: public.
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: public.
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: public.
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.searchop naam (regio: ook op nummer).
p2000Message
Haalt één P2000 Bericht op.
Return: P2000Message. Auth: public.
Argumenten:
uuid: String!
p2000Messages
Message-index: alleen filter + paginatie (o.a. monitor / dossier als geneste refs).
Return: [P2000Message]. Auth: public.
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: public.
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: public.
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: public.
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.searchop naam (regio: ook op nummer).
p2000Region
Eén veiligheidsregio via slug, naam, nummer of uuid.
Return: P2000Region. Auth: public.
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: public.
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.searchop 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: public.
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: public.
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.searchop 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: public.
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: public.
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: public.
Argumenten:
road: RoadRef! – Weg-selectie, bijv. { uuid } of { name }.
roads
Lijst wegen (bijv. A12, N201) met optionele marker-telling; filter + paginatie.
Return: [Road]. Auth: public.
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: public.
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: public.
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: public.
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: public.
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: public.
token: String! – HMAC-signed token from the notification link.status: String! – going or cancelled.