Skip to content
Nerava

Build charging-linked experiences with Nerava.

The Partner API lets a charging network, app or platform send charging sessions to Nerava, find out whether they qualify for a program, and receive signed results. Access is granted to approved partners.

Request API accessPartner API access is by approval.

Authentication

Send your API key in the X-Partner-Key header. Keys are scoped (for example, sessions:write), stored only as SHA-256 hashes, and can be revoked or rotated without changing your partner account.

Submit a session

Send sessions as they start, update or complete. Required fields are partner_session_id, partner_driver_id, status (candidate, charging or completed) and session_start. Optional fields include charger, network, connector, power, energy, location and battery levels.

candidate sessions are soft signals and skip program evaluation. How much a session is trusted depends on the evidence it carries and your partner trust tier, so not every submitted session is treated as verified.

Signed webhooks

Nerava can notify you when results are ready, for example grant.created or partner.session.resolved. Each request carries X-Nerava-Event and X-Nerava-Signature: sha256=<hex>, an HMAC-SHA256 of the raw request body using your webhook secret. Failed deliveries are retried up to three times.

Submit a completed session
curl -X POST https://api.nerava.network/v1/partners/sessions \
  -H "X-Partner-Key: $NERAVA_PARTNER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "partner_session_id": "sess_8412",
    "partner_driver_id": "drv_2207",
    "status": "completed",
    "session_start": "2026-10-01T17:05:00Z",
    "session_end": "2026-10-01T17:41:00Z",
    "charger_id": "site-14-stall-3",
    "charger_network": "your-network",
    "kwh_delivered": 31.0
  }'
202 Accepted (first submission)
{
  "session_event_id": "6f1c…",
  "partner_session_id": "sess_8412",
  "status": "completed",
  "verified": true,
  "quality_score": 72,
  "session_start": "2026-10-01T17:05:00+00:00",
  "session_end": "2026-10-01T17:41:00+00:00",
  "duration_minutes": 36,
  "kwh_delivered": 31.0,
  "charger_id": "site-14-stall-3",
  "grant": null
}
Verify a webhook (Node.js)
import crypto from 'node:crypto'

// rawBody: the exact bytes Nerava sent. secret: your webhook secret.
export function isFromNerava(rawBody, signatureHeader, secret) {
  const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex')
  const a = Buffer.from(expected)
  const b = Buffer.from(signatureHeader || '')
  return a.length === b.length && crypto.timingSafeEqual(a, b)
}

Endpoints

POST /v1/partners/sessionsSubmit a charging session. Idempotent on partner_session_id: re-sending returns the existing session.
PATCH /v1/partners/sessions/{partner_session_id}Update telemetry or mark a session completed.
GET /v1/partners/sessionsList your sessions.
GET /v1/partners/sessions/{partner_session_id}One session with its program result, if any.
GET /v1/partners/grantsProgram results (grants) for your sessions.
GET /v1/partners/campaigns/availablePrograms your sessions can qualify for.
GET /v1/partners/meYour partner profile and usage.

Example values above are illustrative. Field names and response shapes match the current API. There is no public SDK package; approved partners receive keys and integration help directly.