JouloDocs

Connect a virtual charger

Sandbox only: send it to https://api-staging.joulo.nl (pick the Sandbox server). Connects a charger that delivers generated sessions through the real session pipeline, then collects them.

POST
/sandbox/v1/customers/{id}/chargers
AuthorizationBearer <token>

Partner API key, sent as Authorization: Bearer <key>. Production keys start with jpk_live_ and work only on https://api.joulo.nl. Sandbox keys start with jpk_test_ and work only on https://api-staging.joulo.nl. Sandbox keys minted before September 2026 also start with jpk_live_. A key used on the wrong host returns 401 with a detail. A key is bound to one partner and reaches only the Partner API routes. Any other route returns 404 when it does not exist. A route that needs a scope the key lacks, such as GET /sessions, returns 403 with error: Insufficient scope and a required_scope. Every other route returns 403 with error: partner_api_key_scope. Mint and revoke keys in the partner portal. A partner has one active key at a time.

In: header

Path Parameters

idstring

A customer_ref from GET /partner/customers, or an account id from the CPO API or the claim helper.

mid?boolean

false connects a charger without a MID meter. Its sessions never count toward ERE.

Defaulttrue
kwh_per_session?number

Average energy per session, in kWh.

Default12
sessions_per_week?number

Average sessions per week.

Default4
power_kw?number

Charging power in kW. Sets how long a session lasts.

Default11
since?string

First day with sessions.

Default"2026-01-01"
Formatdate

Response Body

curl -X POST "https://api.joulo.nl/functions/v1/api/sandbox/v1/customers/string/chargers" \
  -H "Content-Type: application/json" \
  -d '{}'
{
  "ok": true,
  "charger_id": "faa5efff-159a-49fd-8a8f-d55377568a59",
  "integration_id": "55d7337e-1d0a-49fc-9826-925ba40df035",
  "catalog_charger_id": "45aeec55-e46d-42b6-a990-2b5f65ab05a6",
  "brand": "string",
  "model": "string",
  "mid": true,
  "sync": {
    "ok": true,
    "sessions_created": 0,
    "error": "string"
  }
}
{
  "error": "string",
  "detail": "string",
  "step": "string",
  "reason": "string",
  "draft_status": "string"
}
{
  "error": "Missing or invalid API token"
}
{
  "error": "string",
  "detail": "string",
  "step": "string",
  "reason": "string",
  "draft_status": "string"
}
{
  "error": "string",
  "detail": "string",
  "step": "string",
  "reason": "string",
  "draft_status": "string"
}
{
  "error": "string",
  "detail": "string",
  "step": "string",
  "reason": "string",
  "draft_status": "string"
}