Snapshot a tariff before charging
post/v1/tenants/{tenant_id}/bills
Requires an API key
Provider-independent bill. Authorize payment, then use the bill start endpoint. Keep its charging_token on the application server. Simulation is explicit and never accepts physical transactions.
Path parameters
- tenant_idintegerRequired
Headers
- idempotency-keystringRequired
Request body
- station_idintegerRequiredGreater than 0
- connector_idintegerRequiredGreater than 0
- tariff_idintegerRequiredTenant-owned tariff, snapshotted before chargingGreater than 0
- sourceenumOne of
csms,simulated· Default"csms"
Returns · 201
- idstringRequired
- tenant_idintegerRequired
- station_idintegerRequired
- connector_idintegerRequired
- sourceenumRequiredOne of
csms,simulated - tariff_idintegerRequired
- rate_minorstringRequired
- hold_minorintegerRequired
- currencystringRequired
- charging_tokenstringRequired
- statusenumRequiredOne of
open,final - energy_kwhstring | nullRequired
- energy_whinteger | nullInteger Wh of the finalized usage.
- total_minorinteger | nullRequired
- transaction_idinteger | nullRequired
- created_atstringRequired
- finalized_atstring | nullRequired
- settlement_ownerenumOne of
managed,external· Default"managed" - billing_versionstringDefault
"energy-v1" - usageobject | nullSingle bill reads only: live matched usage after start, a final snapshot once final.
Child attributes
- transaction_idinteger | nullRequiredPhysical transaction resource ID; null for simulated bills.
- activebooleanRequired
- energy_kwhstring | nullRequiredDecimal kWh string for display.
- energy_whinteger | nullRequiredInteger Wh for arithmetic.
- estimated_minorinteger | nullRequiredInteger minor units. On final bills this equals total_minor.
- started_atstring | nullRequired
- ended_atstring | nullRequired
- power_winteger | nullLatest reported charging power in watts; 0 once the transaction ended; null when the charger reports none.
- soc_percentinteger | nullLatest reported vehicle state of charge, when the charger reports it.
- metered_atstring | nullTimestamp of the meter sample behind power_w/soc_percent.
- start_operationobject | nullSingle bill reads only: the journaled start dispatch, if any.
Child attributes
- idstringRequired
- tenant_idintegerRequired
- statusenumRequiredOne of
dispatching,succeeded,rejected,unknown - resultobject | nullRequired
- created_atstringRequired
- updated_atstringRequired
POST /v1/tenants/{tenant_id}/bills
curl --fail-with-body -X POST "https://api.ivoracharge.com/v1/tenants/1042/bills" \
-H "Authorization: Bearer $IVORA_API_KEY" \
-H "Idempotency-Key: order-2026-09-30-0001" \
-H "Content-Type: application/json" \
-d '{
"station_id": 1,
"connector_id": 1,
"tariff_id": 42
}'Response · 201
{
"id": "id_0123456789abcdef",
"tenant_id": 1042,
"station_id": 1,
"connector_id": 1,
"source": "csms",
"tariff_id": 42,
"rate_minor": "string",
"hold_minor": 1250,
"currency": "USD",
"charging_token": "string",
"status": "open",
"energy_kwh": "string",
"energy_wh": 7500,
"total_minor": 1250,
"transaction_id": 1,
"created_at": "2026-09-30T17:00:00Z",
"finalized_at": "2026-09-30T17:00:00Z",
"settlement_owner": "managed",
"billing_version": "energy-v1",
"usage": {
"transaction_id": 1,
"active": false,
"energy_kwh": "string",
"energy_wh": 7500,
"estimated_minor": 1250,
"started_at": "2026-09-30T17:00:00Z",
"ended_at": "2026-09-30T17:00:00Z",
"power_w": 1,
"soc_percent": 1,
"metered_at": "2026-09-30T17:00:00Z"
},
"start_operation": {
"id": "id_0123456789abcdef",
"tenant_id": 1042,
"status": "dispatching",
"result": {},
"created_at": "2026-09-30T17:00:00Z",
"updated_at": "2026-09-30T17:00:00Z"
}
}Try it is not available here yetRequests from this page are off until the production API at
https://api.ivoracharge.com is public. Use the code samples from your application server; Ivora grants production access. Keys are created in Developer tools.