Read a migration charger and its state history
get/v1/migrations/{migration_id}/chargers/{station_id}
Requires an API key
The board's row for one charger, with its state changes newest first: from, to, the cause (added, proxy, shadow, site_flip, rollback, reconciled), the actor and when. Any participant; a narrowed team reads the chargers at its sites only. Errors: 404 migration_charger_not_in_migration, 404 migration_not_found. See Errors and statuses.
Path parameters
- station_idintegerRequiredGreater than 0
- migration_idstringRequiredPattern
^mig_[0-9a-f]{32}$
Returns · 200
- charger_keystringRequired
- station_idintegerRequired
- namestringRequiredThe station's OCPP connection name.
- location_idinteger | nullRequired
- stateenumRequiredimported: in the migration, neither the proxy nor a site flip recorded its route yet. proxied: routed to the previous platform through the proxy. shadow: routed to the previous platform, with shadow mode on (Ivora observes a copy of its traffic). parity_checked: routed to the previous platform, its latest parity report passed and it was not on Ivora since. moved: routed to Ivora. rolling_back: a rollback is asked and not finished. rolled_back: routed back to the previous platform after it was on Ivora.One of
imported,proxied,shadow,parity_checked,moved,rolling_back,rolled_back - state_sincestring | nullRequiredWhen the charger entered its state.
- routeenum | stringRequiredWhere the proxy routes it, from its latest report.
- route_desiredenum | nullRequiredThe route last asked for through the API; a batch's move shows here only once the proxy reported it applied.One of
ivora,previous_platform - connectedenum | nullRequiredOne of
ivora,previous_platform,both,none - reported_bystring | nullRequiredThe proxy that reported it last.
- reported_atstring | nullRequired
- proxy_stalebooleanRequiredThe latest report is more than five minutes old.
- open_requestobject | nullRequired
Child attributes
- idstringRequired
- kindenumRequiredOne of
rollback,move - desiredenumRequiredOne of
ivora,previous_platform - revisioninteger | nullRequiredIts position in the runner's queue; null while paced (not handed out yet).
- not_beforestringRequired
- requested_atstringRequired
- last_rollbackobject | nullRequired
Child attributes
- idstringRequiredIvora's identifier of this rollback (mrb_...).
- tenant_idintegerRequired
- station_idintegerRequired
- namestringRequiredThe station's OCPP connection name.
- statusenumRequiredpending: recorded, waiting for the charger proxy to switch the route. applied_socket_open: the proxy routes the charger to the previous platform, but a connection to Ivora is still open; the proxy closes it and the rollback becomes applied (only then is the event emitted). applied: the proxy routes the charger to the previous platform and no connection to Ivora is open. failed: the proxy could not switch it (detail); ask again, or Ivora on-call rolls it back by hand. superseded: Ivora staff moved the charger to Ivora again after it was asked, so it was not applied. expired: the proxy did not apply it within 24 hours (it was unreachable); Ivora on-call rolls it back by hand.One of
pending,applied_socket_open,applied,failed,superseded,expired - reconnectenum | nullRequiredWhether the charger reconnected to the previous platform through the proxy, from the proxy's latest report: waiting_for_switch (pending), reconnecting (within two minutes of the switch), reconnected (a connection to the previous platform is up), not_connected (no connection two minutes after the switch), still_on_ivora (a connection to Ivora is still open, also while applied_socket_open), superseded (the charger was moved to Ivora again since), unknown (no proxy report since the switch). Null when failed, superseded or expired.One of
waiting_for_switch,reconnecting,reconnected,not_connected,still_on_ivora,superseded,unknown - reasonstringRequired
- requested_bystringRequiredWho asked for it: user:<id>, key:<id> or app:<id>.
- team_idstring | nullRequiredThe project's team.
- sourceenumRequiredtenant: the project's own administrators; ivora: Ivora staff.One of
tenant,ivora - requested_atstringRequired
- rolled_back_atstring | nullRequiredWhen the proxy switched the route (its own clock), once applied.
- settled_atstring | nullRequiredWhen Ivora recorded the current status (the proxy's result, the socket closing, the supersession or the expiry).
- detailstring | nullRequiredThe proxy's note on the result, such as why it failed.
- event_idstring | nullRequiredThe migration.charger_rolled_back event, once applied.
- migration_idstring | nullThe migration workspace of the station (/v1/migrations/{migration_id}), when it is in one.
- added_atstringRequired
- batchobject | nullRequiredThe latest batch the charger is in; null when it never was in one.
Child attributes
- idstringRequiredbat_...
- statusenumRequiredOne of
draft,submitted,approved,running,paused,completed,cancelled,rolled_back - stepenumRequiredThe charger's step in that batch.One of
pending,moving,moved,blocked,failed,superseded,skipped
- parityobject | nullRequiredIts latest parity report: whether it passed, and when; null when it was never checked.
Child attributes
- report_idstringRequiredmpr_...: GET /v1/migrations/{migration_id}/parity/reports/{report_id}.
- statusenumRequiredOne of
passed,failed,incomplete - checked_atstringRequired
- historyarray of TransitionRequiredIts state changes, newest first (the last 100).
Child attributes
- fromenum | nullRequiredThe state before; null for the charger's first state.One of
imported,proxied,shadow,parity_checked,moved,rolling_back,rolled_back - toenumRequiredOne of
imported,proxied,shadow,parity_checked,moved,rolling_back,rolled_back - causeenumRequiredWhat moved it: added (it joined the migration), proxy (the charger proxy's report), shadow (shadow mode turned on or off), site_flip (a recorded site flip), rollback (a rollback asked, applied, failed, superseded or expired), parity (a parity report) or reconciled (found on a read, when its event's record was missed).One of
added,proxy,shadow,site_flip,rollback,parity,reconciled - actorstringRequired
- atstringRequired
- detailobjectRequiredWhat the state was derived from: route, rollback_id, rollback_status, shadow, parity_passed.
GET /v1/migrations/{migration_id}/chargers/{station_id}
curl --fail-with-body "https://api.ivoracharge.com/v1/migrations/mig_0123456789abcdef0123456789abcdef/chargers/1" \
-H "Authorization: Bearer $IVORA_API_KEY"Response · 200JSON
{
"charger_key": "string",
"station_id": 1,
"name": "bay-01",
"location_id": 7,
"state": "imported",
"state_since": "string",
"route": "ivora",
"route_desired": "ivora",
"connected": "ivora",
"reported_by": "string",
"reported_at": "2026-09-30T17:00:00Z",
"proxy_stale": false,
"open_request": {
"id": "id_0123456789abcdef",
"kind": "rollback",
"desired": "ivora",
"revision": 1,
"not_before": "string",
"requested_at": "2026-09-30T17:00:00Z"
},
"last_rollback": {
"id": "id_0123456789abcdef",
"tenant_id": 1042,
"station_id": 1,
"name": "bay-01",
"status": "pending",
"reconnect": "waiting_for_switch",
"reason": "string",
"requested_by": "string",
"team_id": "team_0123456789abcdef",
"source": "tenant",
"requested_at": "2026-09-30T17:00:00Z",
"rolled_back_at": "2026-09-30T17:00:00Z",
"settled_at": "2026-09-30T17:00:00Z",
"detail": "string",
"event_id": "event_0123456789abcdef",
"migration_id": "migration_0123456789abcdef"
},
"added_at": "2026-09-30T17:00:00Z",
"batch": {
"id": "id_0123456789abcdef",
"status": "draft",
"step": "pending"
},
"parity": {
"report_id": "report_0123456789abcdef",
"status": "passed",
"checked_at": "2026-09-30T17:00:00Z"
},
"history": [
{
"from": "imported",
"to": "imported",
"cause": "added",
"actor": "string",
"at": "string",
"detail": {}
}
]
}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.



