API

De API van Verkeer NuThe Verkeer Nu API

Files, afsluitingen, wegwerkzaamheden, ongelukken en brugopeningen op de Nederlandse wegen, zoals deze site ze toont, in JSON of GeoJSON. 5 dagen gratis met een testsleutel, daarna met een pakket.Traffic jams, closures, roadworks, accidents and bridge openings on the Dutch roads, as this website shows them, in JSON or GeoJSON. Free for 5 days with a trial key, then on a paid plan.

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.

Direct, zonder goedkeuring. Geldig 5 dagen vanaf het eerste verzoek.Instant, no approval needed. Valid for 5 days from the first request.

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.

ParameterParameterWaardenValuesWaarvoorPurpose
roada2, a12, n201, s100De weg, zoals in /files/a2. Ook weg=.The road, as in /files/a2. Also weg=.
countyprovincie-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.
cityamsterdam, 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=.
gemeenteUtrecht, Den Haag, WestlandElk 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.
typefile, ongeluk, hinder, werkzaamheden, brug, afsluiting, afgeslotenHet 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.
closurefull, lanes, slip, layby, anyWat 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.
statusactive, scheduledNu van kracht of gepland.In force now or planned.
severityinfo, low, medium, high, criticalErnst, zoals op de kaart.Severity, as on the map.
sourcendw, ndw-bruggenAlleen meldingen uit één bron.Only reports from one source.
bbox4.8,52.3,5.0,52.4Gebied: minLon,minLat,maxLon,maxLat in WGS84.Area: minLon,minLat,maxLon,maxLat in WGS84.
limit1 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.
formatjson (standaard), geojsonjson (default), geojsonJSON voor lijsten, GeoJSON voor kaarten.JSON for lists, GeoJSON for maps.
keyvn_…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 header X-Attribution.the text and link you must display. The same content comes in the X-Attribution header.
  • meta.count enand meta.total: meldingen in het antwoord en treffers voor de limit.reports in the response and matches before the limit.
  • 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.
  • title enand description: korte titel en de beschrijving in het Nederlands; descriptionEn dezelfde in het Engels.short title and the description in Dutch; descriptionEn the 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; detail noemt de toegestane waarden.a parameter with an unknown value; detail lists 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; detail geeft de reden.the key has been revoked; detail gives the reason.
  • 429: de limiet is bereikt; de header retry-after geeft de wachttijd in seconden.limit reached; the retry-after header 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:

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.