303,525 datasets indexed1,419 publishers
Open Data IndexThe index of open data about the Netherlands
Sources›Traffic and transport

Traffic signs and accessibility map (NDW)

The National Road Traffic Data Portal keeps a national file of traffic signs: per sign the RVV code (A1 for a speed limit, C22a for a low-emission zone …), additional panels, side of the road, the NWB road section, municipality, traffic order and since when the sign has been seen. Amsterdam alone had 97,175 signs on 16 October 2026. The traffic sign API v4 returns the current state (updated daily) and all changes; the whole file can also be downloaded. Plus an accessibility map that computes per municipality which roads are open to a vehicle of given dimensions, still in beta.

Traffic and transportOpenAPIDownloadNetherlands · traffic sign
Up to date · updated 5 hours ago · checked 17:23
docs.ndw.nu
Screenshot of docs.ndw.nu

C22a traffic signs (low-emission zone) per municipality: most Amsterdam (91 signs), then Rotterdam and Arnhem

C22a traffic signs (low-emission zone) per municipality, October 2026, in signs. Total: 615; the largest 12 of 64 categories are shown. Amsterdam is 15% of the total. All signs with RVV code C22a in the current state (status placed). This counts signs, not zones: a zone has a sign at every entrance. Municipality names as NDW gives them ('s-Gravenhage = The Hague).

Source: NDW, verkeersborden-API v4 (actueel beeld) · opgehaald 25 oktober 2026Open the table Single block

What you can build with it1

What can you do with it?4 ideas

Getting started

Where does the low-emission zone start?

There are 615 C22a signs (low-emission zone) in 64 municipalities; Amsterdam has 91, Rotterdam and Arnhem 73 each. Map them and you see the edge of every zone.

Getting started

How many signs are in your municipality?

Request the current state with countyCode (e.g. GM0599 for Rotterdam) and count per RVV code.

Advanced

From sign to traffic order

Some signs have a trafficOrderUrl such as gmb-2024-403036: the traffic order in the municipal gazette. That lets you check whether every sign has a decision behind it.

Advanced

What changes on the street?

The events service returns every published change with a timestamp, including signs that were removed (status REMOVED). Use it to follow a municipality switching to 30 km per hour.

How to process it4 steps

  1. Always filter

    current-state without a filter returns the whole country. rvvCode=A1 alone is 97 MB, Amsterdam 56 MB. Filter on rvvCode, countyCode, roadAuthorityType (R, P, G, W, T), status or bbox. An unknown parameter is silently ignored.

    https://wegkenmerken.ndw.nu/api/rest/static-road-data/traffic-signs/v4/current-state?rvvCode=C22a&countyCode=GM0363
  2. Keep track of changes

    events returns at most 100 changes at a time, oldest first. offset is a timestamp: pass the time of the last change you received to continue.

    https://wegkenmerken.ndw.nu/api/rest/static-road-data/traffic-signs/v4/events?limit=100&countyCode=GM0363
  3. The whole file

    The current state as CSV (246 MB zipped) or GeoJSON in RD and in degrees, on opendata.ndw.nu.

    https://opendata.ndw.nu/verkeersborden_actueel_beeld.csv.gz
  4. Accessibility map (beta)

    GET municipalities returns the 342 municipalities with their bounds; POST accessibility.geojson with vehicle characteristics and a municipality returns the accessible and inaccessible road sections. According to the description, intended for road authorities only.

    https://data.ndw.nu/api/rest/static-road-data/accessibility-map/v2/municipalities

Interesting combinations

Similar sources

  • OpenStreetMap

    OSM has speed limits and access rules as road attributes, entered by volunteers; NDW has the signs themselves, with photo and traffic order.

  • National Road Database (NWB) and road data

    The road network itself; WEGGEG only has speed limits for national roads. The traffic signs cover all roads.

  • NDW live traffic data

    Live speeds and volumes from the same portal; this is the static side of the road.

What to watch out for

  • Beta and without rights

    The accessibility map is, by its own description, in beta, intended only for road authorities, and no rights can be derived from it. The situation on the road always takes precedence.

  • Not validated

    All 615 low-emission zone signs had validated = n. The signs come from surveys and reports; a sign can be missing or already gone.

  • Old addresses no longer work

    The old addresses data.ndw.nu/api/rest/static-road-data/traffic-signs/v1/… return 404. Use v4 on wegkenmerken.ndw.nu.

  • Large responses

    There is no paging in current-state: a municipality or a common code returns tens of MB. For the whole country the download file is better.

APIREST (GeoJSON, JSON, CSV) · read 16 Oct 2026

StandardREST (GeoJSON, JSON, CSV)docs
Access no key

No key or account; all calls worked anonymously. tested

Size615

low-emission zone signs C22a in the current state, in 62 municipalities (16 Oct 2026); the whole file is 235 MB zipped tested

Formats

geojsonjsoncsv

Base URL

https://wegkenmerken.ndw.nu/api/rest/static-road-data/traffic-signs/v4

Endpoints 5

  • GET/current-stateThe current state: every sign as a GeoJSON feature (or CSV), updated daily. With a filter it is filtered live, including today's changes. Without a status filter only placed signs (PLACED).
  • GET/eventsAll published changes, oldest first, at most 100 at a time; read on with offset (timestamp).
  • GET/collectionsThe supported coordinate reference systems (CRS84 and RD, EPSG 28992).
  • GEThttps://wegkenmerken.ndw.nu/api/images/{id}Photo of the sign (JPEG, ~14 kB); the address is in imageUrl.
  • GEThttps://opendata.ndw.nu/verkeersborden_actueel_beeld.csv.gzThe whole current state as a file: CSV (235 MB zipped) or GeoJSON in RD (_rd.geojson.gz, 228 MB) and in degrees (_wgs84.geojson.gz, 236 MB). Once a day around 12:05.

The APIs of this source 1 · from the provider's documentation from the description

Bereikbaarheidskaart API (v2, bèta)

Computes per municipality or bounding box which road sections are accessible for a vehicle of given dimensions, weight, fuel and emission class, based on the NWB and the traffic signs. No key. By its own description only for road authorities and in beta. We made no calls: robots.txt of data.ndw.nu says Disallow: /.

https://data.ndw.nu/api/rest/static-road-data/accessibility-map/v2
  • POST/accessibility.geojsonBereikbare en niet-bereikbare wegvakken als GeoJSON. Body: area (type municipality met id GM0344, of boundingBox), vehicle (type bus/car/light_commercial_vehicle/motorcycle/tractor/truck, width, height, weight, length, axleLoad, hasTrailer, emissionClass, fuelTypes), optioneel destination, exclusions en effectivelyAccessible
  • GET/municipalitiesAlle gemeenten met hun begrenzing
  • GET/road-operatorsAlle wegbeheerders

Filtering from the description

Each condition is its own query parameter; combinations act as AND. Exact match, no wildcards.

=komma = OF binnen rvvCode en roadSectionId

Parameters 11

countyCodeMunicipality code, e.g. GM0363 (Amsterdam). Other format (GM363) returns 400 with the rule ^GM\d{4}$. Also on /events.tested
rvvCodeRVV code of the sign (A1, C22a …); several separated by commas (C22a,C22c).tested
roadSectionIdNWB road section ids; no limit on the number.from the description
statusStatus of the sign. Without this parameter you got only PLACED; status=REMOVED returned 407 removed low-emission zone signs.tested
roadAuthorityTypeType of road authority as a letter from the specification (which does not explain the letters). With G, 72 of the 73 C22a signs in Rotterdam remained.tested
roadAuthorityCodeCode of a single road authority.from the description
bboxBounding box; 4.88,52.36,4.92,52.38 with rvvCode=C22a returned 2 signs.tested
bbox-crs / crsCRS of the bbox and of the response: http://www.opengis.net/def/crs/OGC/1.3/CRS84 (default) or http://www.opengis.net/def/crs/EPSG/9.9.1/28992 (RD).tested
contentTypecontentType=csv (or the Accept header text/csv) returns a flat CSV with 36 columns.tested
offsetOnly /events: publication time to read from (yyyy-MM-ddTHH:mm:ss.SSSZ); default 1970.from the description
limitOnly /events: block size, default and maximum 100 (101 returns 400).tested

Fields per sign (current-state, GeoJSON properties) 15

NameTypeMeaning
iduuidVaste id van het bord
rvvCodetekstBordcode volgens het RVV 1990 (A1, C22a …)
blackCodetekstDe waarde op het bord, bv. 50 bij een A1
zoneCodetekstZB, ZH, ZE, ZO of leeg (zonebord)
statustekstPLANNED, PLACED of REMOVED
validatedj/nGecontroleerd; alle 615 C22a-borden hadden n
textSignslijstOnderborden met type (VRIJ, EMIS, KEN, RICH, UIT, VOOR, TIJD), tekst en bij TIJD openingHours in OSM-notatie
placement / side / bearingtekst / gradenPlaatsing (L, B), kant (L, R, N, NO …) en kijkrichting 0–359
fractiongetalPositie op het wegvak, 0 tot 1
drivingDirectiontekstH of T: met of tegen de digitaliseerrichting van het NWB-wegvak
roadName / roadNumber / roadSectionId / nwbVersiontekst / getal / datumWeg en NWB-wegvak waar het bord bij hoort, met de NWB-versie
countyCode / countyName / townNametekstGemeente (GM-code) en woonplaats
Show all 15
NameTypeMeaning
imageUrlurlFoto van het bord
firstSeenOn / lastSeenOn / placedOn / removedOndatumWanneer het bord voor het eerst en laatst gezien, geplaatst of weggehaald is
trafficOrderUrltekstKenmerk van het verkeersbesluit, bv. gmb-2024-272098

Limits and pitfalls

  • current-state has no paging: without a filter you get the whole country. rvvCode=A1 alone is 97 MB, Amsterdam 56 MB. Always filter, or use the download file. experience
  • events: at most 100 per call (limit=101 returns 400). tested
  • No key and no documented rate limit; filtered requests answered within 0.1 seconds. tested
  • The documentation still mentions data.ndw.nu and the parameter names rvv-code and road-section-ids. The OpenAPI specification and the working API use wegkenmerken.ndw.nu/api with rvvCode and roadSectionId. The old v1 addresses on data.ndw.nu return 404. tested
  • An unknown parameter is silently ignored (foo=bar simply returned 73 signs). A typo in a filter name therefore quietly returns the unfiltered, much larger response. tested
  • events has no publication timestamp in the response, even though offset works on it. Keep the time of your last call yourself and read on from there; an event may then arrive twice. tested
  • In events the structure differs from current-state: location.wgs84.latitude, location.road.roadSectionId, location.county.code, details.imageUrl. current-state is flat. tested
  • Join roadSectionId to the NWB (wvk_id), but mind nwbVersion: road sections change between NWB versions. experience
  • wegkenmerken.ndw.nu has no robots.txt (the web app returns its start page for every path); data.ndw.nu redirects robots.txt to a page with Disallow: /. That is why we did not call the accessibility map. tested

Try it HTTP 200 · 386 ms · 16 Oct

https://wegkenmerken.ndw.nu/api/rest/static-road-data/traffic-signs/v4/current-state?rvvCode=C22a&countyCode=GM0363
{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "id": "061dc8bb-f323-48d7-bc5b-a03e6fa9187c",
      "geometry": {
        "type": "Point",
        "coordinates": "…"
      },
      "properties": {
        "validated": "n",
        "rvvCode": "C22a",
        "zoneCode": "ZB",
        "status": "PLACED",
        "textSigns": [
          {
            "type": "EMIS",
            "text": "[[c22a3]]"
          },
          {
            "type": "EMIS",
            "text": "[[c22a9]]"
          }
        ],
        "placement": "L",
        "side": "W",
        "bearing": 274,
        "fraction": 0.9918174,
        "drivingDirection": "T",
        "roadName": "Jan Vroegopsingel",
        "roadSectionId": 600980960,
        "nwbVersion": "2026-05-01",
        "countyName": "Amsterdam"
      }
    },
    {
      "type": "Feature",
      "id": "087aa8eb-2990-498e-af72-e185d1dfd664",
      "geometry": {

Shortened response, saved at harvest time. Click the URL for the real, current response.

Read from NDW Docs: Traffic signs download API 4.0, with all fields, parameters and examples · OpenAPI 3 specification (version 4.0, server wegkenmerken.ndw.nu/api) · NDW Docs: Accessibility map API (beta) · Source code of the accessibility map, with a copy of the OpenAPI specification v2. Labels: from the description stated in what the api itself publishes. tested from our own small call. platform applies to every api on this platform, per its documentation. experience learned while building open data index.

How to fetch it

curl "https://wegkenmerken.ndw.nu/api/rest/static-road-data/traffic-signs/v4/current-state?rvvCode=C22a"

More from NDW in our index

4 datasets in data.overheid.nl, Nationaal Georegister. These changed most recently.

All about NDW

More in this topic

See how this page is built
bron: ndw-wegkenmerken
blokken: []
secties:
  - ideeen
  - verwerken
  - koppelingen
  - vergelijkbaar
  - beperkingen
  - code
cache:
  tag: bron:ndw-wegkenmerken
  ververs: na statuscheck, als de bron nieuwer is
statuscheck:
  methode: Last-Modified van het downloadbestand verkeersborden_actueel_beeld.csv.gz
  verwacht: dagelijks

Source: content/bronnen/ndw-wegkenmerken.yaml · Markdown