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.
| Method | Endpoint | Description | |
|---|---|---|---|
GET | /api/v1/chargers | All chargers with live status | |
GET | /api/v1/chargers/{id} | One charger | |
GET | /api/v1/sessions?active=1&limit=50 | Charging sessions | |
GET | /api/v1/stats | Network KPIs | |
GET | /api/v1/tariff | Current tariff | |
GET | /api/v1/events | Server-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.
| Event | When |
|---|---|
session.started | A charging session starts (OCPP 1.6J StartTransaction or 2.0.1 TransactionEvent Started) |
session.stopped | A session ends, with kWh, cost and reason |
charger.status | A charger changes status (Available, Charging, Faulted …) |
lead.created | Someone 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;