Bronvermelding is verplicht in elk pakketAttribution is required on every plan
Dat geldt voor de proefperiode, de betaalde pakketten en Enterprise: elke app, website of elk product dat gegevens uit deze API toont, laat duidelijk “Data: Verkeer Nu” zien, met een link naar verkeernu.nl. Om te kopiëren:The same applies on the trial, the paid plans and Enterprise: every app, website or product that shows data from this API displays “Data: Verkeer Nu” clearly, with a link to verkeernu.nl. Ready to copy:
Data: <a href="https://verkeernu.nl">Verkeer Nu</a>
Daarnaast blijft de bronvermelding van de oorspronkelijke bronnen in het antwoord staan (meta.sources en het veld source van elke melding). Voor het NDW is dat “Bron: NDW (Nationaal Dataportaal Wegverkeer)”.The original source credits in the response must also be kept (meta.sources and the source field of each report). For NDW that is “Bron: NDW (Nationaal Dataportaal Wegverkeer)”.
Aan de slagGetting started
Maak hieronder een testsleutel en voeg hem toe aan het verzoek. Open dit in een browser, met je sleutel aan het eind, en je krijgt meteen gegevens:Create a trial key below and add it to the request. Opened in a browser with your key at the end, this returns data straight away:
https://verkeernu.nl/api/v1/incidents?road=a2&type=werkzaamheden&key=vn_…
Het antwoord is JSON. Voor een kaart voeg je &format=geojson toe. In code stuur je de sleutel liever in een header:The response is JSON. For a map, add &format=geojson. In code, the key is better sent in a header:
curl -H "X-API-Key: vn_…" "https://verkeernu.nl/api/v1/incidents?county=noord-holland&type=afsluiting"
De sleutelThe key
Elk verzoek heeft een sleutel nodig. De sleutel die je hier maakt is een testsleutel: hij is geldig 5 dagen vanaf het eerste verzoek, met 120 verzoeken per uur, zodat je kunt kijken of de API bij je project past. Daarna heb je een van de pakketten hieronder nodig.Every request needs a key. The key you create here is a trial key: it is valid for 5 days from the first request, at 120 requests an hour, so you can check whether the API suits your project. After that you need one of the plans below.
We vragen om een naam, een e-mailadres en een doel, om drie redenen: om je te waarschuwen als een officiële bron uitvalt; om te begrijpen wat de API nog mist; en omdat een sleutel die we kunnen intrekken iedereen beschermt tegen een op hol geslagen loop.We ask for a name, email and purpose for three reasons: to warn you when an official source goes down; to understand what the API is still missing; and because a key that can be revoked protects everyone from a runaway loop.
PakkettenPlans
Je betaalt voor de toegang tot de dienst: de verzoeken, de limieten en de ondersteuning. De gegevens zelf zijn van de overheden die ze publiceren en blijven onder hun voorwaarden; hun bronvermelding moet blijven staan.What you pay for is access to the service: the queries, the limits and the support. The data itself belongs to the authorities that publish it and stays under their licences; their credits must be kept.
ProefTrial
Voor iedereen, om te kijken of de API pastFor anyone, to check whether the API fits
GratisFree
5 dagen5 days
- 5 dagen vanaf het eerste verzoek5 days from the first request
- 120 verzoeken per uur120 requests an hour
- Bronvermelding verplichtAttribution required
PersoonlijkPersonal
Privé- of kleine projecten zonder noemenswaardige inkomstenPrivate or small projects without significant revenue
€ 15€15
per maand, incl. btwper month, incl. VAT
- Ongeveer 10.000 verzoeken per dagAbout 10,000 requests a day
- NederlandThe Netherlands
- Bronvermelding verplichtAttribution required
ProfessioneelProfessional
Commerciële apps, websites met advertenties, gebruik binnen een bedrijfCommercial apps, ad-funded websites, use within a company
€ 79€79
per maand, incl. btwper month, incl. VAT
- Ongeveer 100.000 verzoeken per dagAbout 100,000 requests a day
- Mail als een bron uitvaltEmail alert when a source goes down
- Bronvermelding verplichtAttribution required
EnterpriseEnterprise
Wagenparken, verzekeraars, media, meerdere landen, SLAFleets, insurers, media, several countries, SLA
Op aanvraagOn request
Offerte op basis van volumeQuote based on volume
- Afgesproken limieten en SLAAgreed limits and SLA
- Meerdere landen via RoadscoreSeveral countries through Roadscore
- ContractContract
ViaThrough Roadscore ofor [email protected].
Zo krijg je een pakket: mail naar [email protected] met de naam van je project en waarvoor je de gegevens gebruikt. We antwoorden met het passende pakket en een factuur en zetten je sleutel over; hij blijft hetzelfde. De pakketten Persoonlijk en Professioneel worden per maand gefactureerd.How to get a plan: write to [email protected] with the name of your project and how you plan to use it. We reply with the right plan and an invoice, and switch your key over; it stays the same. The Personal and Professional plans are billed monthly.
Endpoint en parametersEndpoint and parameters
GET /api/v1/incidents geeft de meldingen die de kaart en de pagina's van Verkeer Nu tonen, uit dezelfde bron op hetzelfde moment. Alle parameters zijn optioneel en te combineren; scheid meerdere waarden met een komma. Een onbekende waarde geeft een fout 400 met de toegestane waarden, nooit stilletjes een lege lijst.GET /api/v1/incidents returns the reports that the map and the pages of Verkeer Nu show, from the same source at the same moment. All parameters are optional and can be combined; separate multiple values with commas. An unknown value returns a 400 error listing the allowed values, never a silently empty list.
| ParameterParameter | WaardenValues | WaarvoorPurpose |
|---|---|---|
road | a2, a12, n201, s100 | De weg, zoals in /files/a2. Ook weg=.The road, as in /files/a2. Also weg=. |
county | provincie-groningen, friesland, drenthe … | Provincie als slug, zoals in /verkeer/noord-holland. Ook provincie=. Alle 12 slugs:Province, as a slug as in /verkeer/noord-holland. Also provincie=. The 12 slugs: provincie-groningen, friesland, drenthe, overijssel, flevoland, gelderland, provincie-utrecht, noord-holland, zuid-holland, zeeland, noord-brabant, limburg. |
city | amsterdam, rotterdam, den-haag … | Een van de steden met een eigen pagina, zoals in /verkeer/utrecht, met de snelwegen eromheen. Ook stad=.One of the cities with its own page, as in /verkeer/utrecht, with the motorways around it. Also stad=. |
gemeente | Utrecht, Den Haag, Westland | Elk van de gemeenten, met de naam zoals het CBS die schrijft (hoofdletters maken niet uit). Alleen meldingen binnen de gemeentegrens.Any municipality, by its name as CBS writes it (case ignored). Only reports within the municipal boundary. |
type | file, ongeluk, hinder, werkzaamheden, brug, afsluiting, afgesloten | Het soort melding. Engels werkt ook: queue, accident, incident, roadworks, bridge, closure. afsluiting omvat elke melding met een dichte rijstrook, rijbaan of weg; afgesloten alleen helemaal afgesloten wegen.Type of report. English works too: queue, accident, incident, roadworks, bridge, closure. afsluiting covers every report with a closed lane, carriageway or road; afgesloten only fully closed roads. |
closure | full, lanes, slip, layby, any | Wat er dicht is: full is een afgesloten weg of rijbaan, lanes een dichte rijstrook.What is closed: full is a closed road or carriageway, lanes a closed lane. |
status | active, scheduled | Nu van kracht of gepland.In force now or planned. |
severity | info, low, medium, high, critical | Ernst, zoals op de kaart.Severity, as on the map. |
source | ndw, ndw-bruggen | Alleen meldingen uit één bron.Only reports from one source. |
bbox | 4.8,52.3,5.0,52.4 | Gebied: minLon,minLat,maxLon,maxLat in WGS84.Area: minLon,minLat,maxLon,maxLat in WGS84. |
limit | 1 tot 10000 (1000)1 to 10000 (1000) | Hoogstens zoveel meldingen: eerst wat nu geldt, het laatst bijgewerkt eerst, daarna het geplande, het eerstvolgende eerst.At most this many reports: those in force first, most recently updated first, then planned ones, soonest first. |
format | json (standaard), geojsonjson (default), geojson | JSON voor lijsten, GeoJSON voor kaarten.JSON for lists, GeoJSON for maps. |
key | vn_… | Je sleutel, als je hem niet meestuurt in de header X-API-Key of Authorization: Bearer.Your key, if not sent in the X-API-Key or Authorization: Bearer header. |
VoorbeeldExample
Hoe een antwoord van de API eruitziet, ingekort:The shape of an API response, shortened:
GET https://verkeernu.nl/api/v1/incidents?road=a2&type=werkzaamheden&status=active&limit=1
{
"attribution": {
"text": "Data: Verkeer Nu",
"url": "https://verkeernu.nl"
},
"meta": {
"count": 1,
"total": 10,
"generatedAt": "2026-10-23T15:58:19.015Z",
"licence": "Gegevens: Verkeer Nu (verkeernu.nl), via Roadscore, uit de officiële bronnen in het veld sources. Bronvermelding is verplicht in elk pakket, voor Verkeer Nu en voor elke oorspronkelijke bron.",
"sources": [
{
"id": "ndw",
"credit": "Bron: NDW (Nationaal Dataportaal Wegverkeer), actueel beeld",
"licence": "NDW open data (vrij herbruikbaar)",
"licenceUrl": "https://opendata.ndw.nu/"
}
]
},
"incidents": [
{
"id": "ndw-RWS01_M1184491_CLOSED_LANES_D2_WWA",
"type": "roadworks",
"severity": "medium",
"status": "active",
"lat": 51.960064,
"lon": 5.119019,
"title": "Rijstrook afgesloten · A2, Vijfheerenlanden",
"description": "Rijstrook afgesloten op de A2 bij Everdingen (Vijfheerenlanden).\nOorzaak: werkzaamheden.\nGemeld door Rijkswaterstaat.",
"source": "ndw",
"road": "A2",
"roadClass": "A",
"location": "bij Everdingen",
"closure": "lanes",
"land": "provincie-utrecht",
"gemeente": "Vijfheerenlanden",
"authority": "Rijkswaterstaat",
"startedAt": "2026-09-30T19:46:37.000Z",
"endsAt": "2027-03-30T21:59:00.000Z",
"updatedAt": "2026-09-30T19:46:39.000Z"
}
]
}Velden in het antwoordResponse fields
attribution: de tekst en link die je moet tonen. Dezelfde inhoud staat in de headerX-Attribution.the text and link you must display. The same content comes in theX-Attributionheader.meta.countenandmeta.total: meldingen in het antwoord en treffers voor delimit.reports in the response and matches before thelimit.meta.generatedAt: wanneer de gegevens zijn opgehaald.when the data was fetched.meta.sources: elke bron in het antwoord, met bronvermelding en voorwaarden. Die moeten blijven staan.every source in the response with its credit and licence. You must keep these.id,type,severity,status,lat,lon: id, soort (queue, accident, incident, roadworks, bridge), ernst, nu of gepland, positie.ID, type (queue, accident, incident, roadworks, bridge), severity, whether in force or planned, position.titleenanddescription: korte titel en de beschrijving in het Nederlands;descriptionEndezelfde in het Engels.short title and the description in Dutch;descriptionEnthe same in English.road,roadClass,street,location: weg, wegklasse (A snelweg, N N-weg, S stadsroute), straat of brug zonder wegnummer, plek op de weg.road, road class (A motorway, N N-road, S city route), street or bridge without a road number, place on the road.closure,overnight,windows,hours: wat er dicht is en wanneer, zoals de bron de tijdvakken publiceert.what is closed and when, as the source publishes the time windows.land,city,gemeente: provincie en stad als slug, gemeente bij naam (uit de grenzen van het CBS).province and city as slugs, municipality by name (from the CBS boundaries).authority,bridge: wie het meldde (Rijkswaterstaat, een gemeente of provincie); bij een brug de naam en de volgende geplande openingen.who reported it (Rijkswaterstaat, a municipality or province); for a bridge, its name and the next planned openings.startedAt,endsAt,updatedAt: begin, eind, laatste wijziging (ISO 8601, UTC).start, end, last change (ISO 8601, UTC).source,sourceUrl: de officiële bron en zijn website.the official source and its website.
Velden zonder waarde worden weggelaten in plaats van null te zijn.Fields without a value are left out rather than set to null.
FoutenErrors
400: een parameter met een onbekende waarde;detailnoemt de toegestane waarden.a parameter with an unknown value;detaillists the allowed ones.401: geen sleutel.no key.402: de proefperiode is voorbij. Voor een pakket mail je naar [email protected].the trial period has ended. For a plan, write to [email protected].403: de sleutel is ingetrokken;detailgeeft de reden.the key has been revoked;detailgives the reason.429: de limiet is bereikt; de headerretry-aftergeeft de wachttijd in seconden.limit reached; theretry-afterheader gives the wait in seconds.
Tijdens de proefperiode geeft de header X-API-Trial-Ends aan wanneer die afloopt.During the trial, the X-API-Trial-Ends header gives the end of the trial period.
LimietenLimits
Proef: 120 verzoeken per uur. Persoonlijk: ongeveer 10.000 per dag. Professioneel: ongeveer 100.000 per dag. Enterprise: in overleg. Limieten tellen per sleutel, niet per IP-adres, dus een app met veel gebruikers wordt niet door één van hen afgeremd. De headers X-RateLimit-Limit, X-RateLimit-Remaining en X-RateLimit-Reset laten zien waar je staat.Trial: 120 requests an hour. Personal: about 10,000 a day. Professional: about 100,000 a day. Enterprise: by agreement. Limits are counted per key, not per IP, so an app with many users is not held back by any one of them. The X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers show where you stand.
De gegevens worden ongeveer eens per minuut ververst: vaker dan elke 30 seconden vragen levert geen nieuwe meldingen op. CORS staat open, dus je kunt de API rechtstreeks vanuit de browser aanroepen.The data is refreshed about once a minute: asking more often than every 30 seconds brings no new reports. CORS is open, so you can call the API straight from the browser.
Gebruiksvoorwaarden en bronvermeldingTerms of use and attribution
Met een testsleutel of een betaald pakket: een product op deze API draaien zonder geldige sleutel of zonder bronvermelding is geen toegestaan gebruik.On a trial key or a paid plan: running a product built on this API without a valid key or without attribution is not permitted use.
Bronvermelding is verplicht in elk pakketAttribution is required on every plan
Dat geldt voor de proefperiode, de betaalde pakketten en Enterprise: elke app, website of elk product dat gegevens uit deze API toont, laat duidelijk “Data: Verkeer Nu” zien, met een link naar verkeernu.nl. Om te kopiëren:The same applies on the trial, the paid plans and Enterprise: every app, website or product that shows data from this API displays “Data: Verkeer Nu” clearly, with a link to verkeernu.nl. Ready to copy:
Data: <a href="https://verkeernu.nl">Verkeer Nu</a>
Daarnaast blijft de bronvermelding van de oorspronkelijke bronnen in het antwoord staan (meta.sources en het veld source van elke melding). Voor het NDW is dat “Bron: NDW (Nationaal Dataportaal Wegverkeer)”.The original source credits in the response must also be kept (meta.sources and the source field of each report). For NDW that is “Bron: NDW (Nationaal Dataportaal Wegverkeer)”.
De gegevens komen van het NDW en bereiken ons via Roadscore. De bronvermeldingen, zoals de leveranciers ze vragen:The data comes from NDW and reaches us through Roadscore. The credits, as the providers require them:
- Bron: NDW (Nationaal Dataportaal Wegverkeer), actueel beeld (NDW open data (vrij herbruikbaar))
- Bron: NDW (planningsfeed brugopeningen); brugnamen van Rijkswaterstaat FIS (vaarweginformatie.nl) (NDW open data (vrij herbruikbaar))
Eerlijk over de dekkingHonest about coverage
De API geeft wat de officiële bronnen hebben gepubliceerd, niet wat er op dit moment op de weg gebeurt. Een weg zonder melding is geen vrije weg, alleen een weg waarover niemand iets heeft gepubliceerd. De meldingen komen van het NDW en gaan over het hele land: snelwegen van Rijkswaterstaat, provinciale wegen en, waar de gemeente ze doorgeeft, stadsstraten.The API returns what the official sources have published, not what is happening on the road right now. A road with no report is not a clear road, just one nobody has published anything about. The reports come from NDW and cover the whole country: Rijkswaterstaat's motorways, provincial roads and, where the municipality reports them, city streets.
Bouw je er meldingen op, vertel dat dan aan je gebruikers. En gebruik de API niet voor beslissingen in een noodsituatie: bel in nood 112.If you build alerts on it, tell your users so. And do not use the API for emergency decisions: in an emergency, call 112.
ContactContact
Vragen, een pakket, een kwijtgeraakte sleutel of een ontbrekende bron: [email protected]. De pagina's afsluitingen en wegwerkzaamheden tonen dezelfde gegevens die de API teruggeeft.Questions, a plan, a lost key or a missing source: [email protected]. The closures and roadworks pages show the same data the API returns.