Chargeview API

Read-only JSON, no authentication, CORS open. Machine-readable spec: openapi.yaml. Back to the map.

Data comes from the NDW open data OCPI feeds (locations and tariffs), polled every 10 minutes. Every change of a tariff is stored as a new version, so prices can be shown for any period since it was first seen; every EVSE status change is logged as well. Locations and tariffs are identified by OCPI country_code/party_id/id; URL-encode the id.

GET /api/v1/map?bbox=minLon,minLat,maxLon,maxLat&zoom=Z

Points when at most 1500 locations match (or zoom ≥ 16), otherwise grid clusters. Filters (also on /search):

min_powerminimum max power in kW
standardcomma-separated OCPI connector standards, e.g. IEC_62196_T2_COMBO
available=trueonly locations with an available charging point
operatoroperator name contains
curl 'https://chargeview.nathanwouda.nl/api/v1/map?bbox=4.85,52.35,4.95,52.39&zoom=15&min_power=50'

GET /api/v1/search?q=…

Name, address, city, postal code or id contains q; at most 50 results.

GET /api/v1/locations/{cc}/{party}/{id}

Location details, every EVSE with its live status and connectors, the tariffs it uses with the price right now, and the raw OCPI object.

GET /api/v1/locations/{cc}/{party}/{id}/prices?from=…&to=…

Price history for each tariff of the location. from/to are RFC 3339 (default: the last 24 hours, at most 400 days). Each series is a step function: a point holds until the next one. Prices are evaluated for a session starting at that moment, with time-of-day, weekday and date restrictions applied in the location's time zone. ENERGY is per kWh, TIME and PARKING_TIME per hour, FLAT per session; as published by the operator (excl. VAT unless vat is set).

{"from": "2026-10-13T00:00:00Z", "to": "2026-10-14T00:00:00Z", "time_zone": "Europe/Amsterdam",
 "tariffs": [{"id": "p-ac-65a5…", "currency": "EUR", "connectors": ["6352…/1"],
   "series": [{"t": "2026-10-13T00:00:00Z", "prices": {"ENERGY": {"price": 0.5417}, "TIME": {"price": 0.41}}},
              {"t": "2026-10-13T14:00:00Z", "prices": {"ENERGY": {"price": 0.5717}, "TIME": {"price": 0.41}}}],
   "versions": [{"version_id": 60298, "valid_from": "2026-09-21T13:17:09Z", "valid_to": null}]}]}

GET /api/v1/locations/{cc}/{party}/{id}/availability?from=…&to=…

Status history per charging point (EVSE) as intervals, the share of time per status, and any_available_share: how much of the time at least one point was free. Recorded from the feed every 10 minutes using the operator's change times, so very short sessions between two checks can be missed. Same from/to rules as prices.

{"recorded_since": "2026-10-13T08:23:45Z", "any_available_share": 0.82,
 "evses": [{"uid": "tnlp013302-2", "evse_id": "NL*PCB*ETNLP013302*2", "share": {"AVAILABLE": 0.6, "CHARGING": 0.4},
   "intervals": [{"from": "2026-10-13T15:51:54Z", "to": "2026-10-13T21:10:02Z", "status": "CHARGING"}, …]}]}

GET /api/v1/tariffs/{cc}/{party}/{id}

All stored versions of one tariff with the raw OCPI tariff objects (optionally limited by from/to).

GET /api/v1/status

Row counts and the most recent feed checks and imports.