New: OCPP 2.0.1, spot-price tariffs and load management with 1/3-phase switching Try the live console →

Platform

We handle the foundation. You build the edge.

Our REST API and webhooks are documented, and you can call the API live on this page.

MethodEndpointDescription
GET/api/v1/chargersAll chargers with live status
GET/api/v1/chargers/{id}One charger
GET/api/v1/sessions?active=1&limit=50Charging sessions
GET/api/v1/statsNetwork KPIs
GET/api/v1/tariffCurrent tariff
GET/api/v1/eventsServer-sent event stream of OCPP traffic
// Click "Try it" to call the live API

OCPP endpoint

wss://voltvik.askendal.com/ocpp/<chargePointId>   (subprotocol ocpp1.6 or ocpp2.0.1, Basic Auth)

Webhooks

An admin adds endpoints under Admin → Webhooks. Each event is POSTed as JSON and retried after 10 s, 1 min and 5 min if your endpoint does not answer 2xx.

EventWhen
session.startedA charging session starts (OCPP 1.6J StartTransaction or 2.0.1 TransactionEvent Started)
session.stoppedA session ends, with kWh, cost and reason
charger.statusA charger changes status (Available, Charging, Faulted …)
lead.createdSomeone submits a form on the website
POST your-url
X-Voltvik-Event: session.stopped
X-Voltvik-Signature: t=1793600000,v1=<hex HMAC-SHA256 of "t.body" with your signing secret>

{ "id": "…", "event": "session.stopped", "created_at": "…",
  "data": { "session_id": 1281, "charger_id": "CP-03", "kwh": 41.2, "cost": 229.07, "currency": "SEK", "reason": "EVDisconnected", … } }

// Verify in Node.js
const [t, v1] = sig.split(',').map(x => x.split('=')[1]);
const ok = crypto.createHmac('sha256', secret).update(t + '.' + rawBody).digest('hex') === v1;