Sessions
Understand charging session data in Joulo
A session represents a single charging event • from the moment your car starts drawing power until it stops. Every session records how much energy was delivered and, when applicable, how many ERE-credits were earned.
Session object
{
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"charger_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"charger_nickname": "Garage",
"started_at": "2026-04-08T18:30:00Z",
"ended_at": "2026-04-09T06:45:00Z",
"kwh": 42.37,
"status": "completed",
"counts_for_ere": true,
"ere_credits": 14.10,
"estimated_euro": 5.09
}Fields
| Field | Type | Description |
|---|---|---|
id | string (UUID) | Unique identifier for the session. |
charger_id | string (UUID) | ID of the charger this session belongs to. |
charger_nickname | string | User-defined name of the charger. |
started_at | string (ISO 8601) | When the session started. |
ended_at | string (ISO 8601) | When the session ended. null for active sessions. |
kwh | number | Total energy delivered, in kilowatt-hours. |
status | string | active, charging, or completed. |
counts_for_ere | boolean | Whether this session counts toward ERE: true when the charger is MID-eligible (real MID meter or admin-granted exception). |
ere_credits | number | ERE-credits earned by this session (count, not euros). Derived from kwh via the NEa formula (see below). null when the charger is not MID-eligible or no energy was delivered. |
estimated_euro | number | Indicative net value of those ERE, in euros. A forecast, not a payout (see below). null whenever ere_credits is null. |
Session statuses
| Status | Description |
|---|---|
active | The charger is connected and a session is in progress. |
charging | The charger is actively delivering power. |
completed | The session has ended and final energy values are recorded. |
Energy calculation
Joulo calculates kwh from the best available data source for each session:
- Direct kWh value from the charger (if reported)
- Energy in watt-hours, converted to kWh
- Difference between meter start and stop readings
- Live meter reading minus meter start (for active sessions)
This ensures accurate energy values regardless of which charger brand you use.
ERE-credits
ERE stands for Emissiereductie-eenheden (Emission Reduction Units), the official unit under the Dutch RED III implementation. The ere_credits field is the count of ERE generated by this session, derived deterministically from kwh:
ere_credits = kwh × 0.505 × 0.65880.505• Dutch grid renewable fraction for 2026 (CBS).0.6588• RED III fossil reference (183 g CO₂eq/MJ × 3.6 MJ/kWh).
Only sessions on a MID-eligible charger can be inboeked at the NEa. The API applies that filter for you: counts_for_ere tells you whether a session qualifies, and ere_credits is null for sessions on non-eligible chargers. That is the same filter the Joulo dashboard uses for its top-line numbers.
From ERE to euros
estimated_euro carries the value of the session in euros, so you never have to do the arithmetic yourself:
estimated_euro = ere_credits × price_per_ere × (1 − effective_fee_pct/100)Both inputs come back once per response in estimate_basis, so you can explain or audit the amount without a second call:
{
"sessions": [ /* ... */ ],
"limit": 20,
"offset": 0,
"estimate_basis": {
"price_per_ere": 0.451,
"effective_fee_pct": 20
}
}estimated_euro is a forecast, not a payout. Never present it as money owed.
Three things move between a charging session and a payment:
- The price is per trade, not per session. Joulo sells ERE forward in batches. Your ERE is allocated to a trade per production quarter, and the sale price locks at that moment.
price_per_ereis the current indicative mid-market price, so it is what an unsold ERE is worth on paper today. - The fee locks at settlement.
effective_fee_pctis the account's percentage today, after referral and loyalty discounts. The fee actually charged is the lower of the one at reservation and the one at settlement. - Unsold ERE is held, not paid. Joulo never pays out against a model price.
For what was really sold, and at which price, call GET /ere-position. It returns realised amounts per compliance year and quarter, split into paid, payable and reserved, with the weighted price per quarter.
Filtering sessions
The GET /sessions endpoint supports several query parameters:
charger_id• Show sessions for a specific charger onlyfrom/to• Filter by date range (ISO 8601 timestamps)limit/offset• Paginate through results
See the API reference for full details.