Log inTalk to us

Record an OCPP 1.6 shadow session's transaction IDs (charger proxy)

put/v1/tenants/{tenant_id}/stations/{station_id}/shadow/transactions/{control_transaction_id}
Requires an API key

The project's charger proxy key (migration:proxy, made by Ivora administrators, bound to this project) or Ivora platform administrators; team roles and other keys are refused. The same record as the staff route PUT /v1/admin/stations/{station_id}/shadow/transactions/{control_transaction_id}: for one session on an OCPP 1.6 station of the project in shadow mode, the transactionId the controlling platform assigned (control_transaction_id) and the one Ivora's core assigned on the copy link, with the charger's meterStart, then again at StopTransaction with meterStop (registers in Wh, as the charger sent them). Idempotent by its key and copy ID; conflicts answer 409 shadow_mapping_conflict. Another project's station reads as unknown. A new or completed record is audit-logged (shadow.transaction_recorded). Errors: 403 restricted_key_refused, 404 station_not_found, 409 shadow_mapping_conflict, 409 shadow_mapping_not_needed, 409 station_not_shadow, 422. See Errors and statuses.

Path parameters

  • tenant_idintegerRequired
    Greater than 0
  • station_idintegerRequired
    Greater than 0
  • control_transaction_idstringRequired
    Pattern ^-?[0-9]{1,10}$

Request body

  • copy_transaction_idstringRequired
    The transactionId Ivora's core answered StartTransaction with on the copy link.
    Pattern ^-?[0-9]{1,10}$
  • connector_idintegerRequired
    The OCPP 1.6 connectorId of the StartTransaction.
    Minimum 0 · Maximum 1000
  • started_atstringRequired
    The StartTransaction timestamp (the charger's), ISO 8601.
    Up to 40 characters
  • meter_start_whinteger | null
    StartTransaction meterStart: the charger's energy register in Wh, as sent.
    Minimum 0
  • control_statusstring | null
    idTagInfo.status the controlling platform answered the StartTransaction with.
    Up to 40 characters
  • copy_statusstring | null
    idTagInfo.status Ivora's core answered it with on the copy link.
    Up to 40 characters
  • stopped_atstring | null
    The StopTransaction timestamp, once the session stopped.
    Up to 40 characters
  • meter_stop_whinteger | null
    StopTransaction meterStop: the charger's energy register in Wh, as sent.
    Minimum 0
  • stop_reasonstring | null
    StopTransaction reason (Local when absent, per OCPP 1.6).
    Up to 40 characters

Returns · 200

  • station_idintegerRequired
  • tenant_idintegerRequired
  • control_transaction_idstringRequired
    The transactionId the controlling platform assigned; the charger uses it in MeterValues and StopTransaction.
  • copy_transaction_idstringRequired
    The transactionId Ivora's core assigned on the copy link: the proxy rewrites the charger's control ID to it on that link.
  • connector_idintegerRequired
  • started_atstringRequired
  • meter_start_whinteger | nullRequired
  • control_statusstring | nullRequired
  • copy_statusstring | nullRequired
  • stopped_atstring | nullRequired
  • meter_stop_whinteger | nullRequired
  • stop_reasonstring | nullRequired
  • energy_whinteger | nullRequired
    meter_stop_wh - meter_start_wh: the charger's registers, Wh; null until both are known.
  • recorded_bystringRequired
  • created_atstringRequired
  • updated_atstringRequired
PUT /v1/tenants/{tenant_id}/stations/{station_id}/shadow/transactions/{control_transaction_id}
curl --fail-with-body -X PUT "https://api.ivoracharge.com/v1/tenants/1042/stations/1/shadow/transactions/control_transaction_0123456789abcdef" \
  -H "Authorization: Bearer $IVORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "copy_transaction_id": "copy_transaction_0123456789abcdef",
  "connector_id": 1,
  "started_at": "2026-09-30T17:00:00Z"
}'
Response · 200JSON
{
  "station_id": 1,
  "tenant_id": 1042,
  "control_transaction_id": "control_transaction_0123456789abcdef",
  "copy_transaction_id": "copy_transaction_0123456789abcdef",
  "connector_id": 1,
  "started_at": "2026-09-30T17:00:00Z",
  "meter_start_wh": 7500,
  "control_status": "string",
  "copy_status": "string",
  "stopped_at": "2026-09-30T17:00:00Z",
  "meter_stop_wh": 7500,
  "stop_reason": "string",
  "energy_wh": 7500,
  "recorded_by": "string",
  "created_at": "2026-09-30T17:00:00Z",
  "updated_at": "2026-09-30T17:00:00Z"
}
Requires an approved production API keyProduction access starts with a request, a short meeting with Ivora and a card on file, after which Ivora staff grant your account access. How to request access
Try itproduction · api.ivoracharge.com

Paste a production api key (iv_live_…). Create keys in Developer tools. The key stays in this page's memory, is sent only to https://api.ivoracharge.com and clears when you reload. Test keys are refused.

PUT is a write: you confirm the method, path and project before it is sent, with a generated Idempotency-Key.