List a migration's chargers (the state board)
Each charger with its state (imported, proxied, shadow, moved, rolling_back, rolled_back) and since when, the route the proxy reports and the one asked for, the side it is connected on, its open route request and its latest rollback with the reconnect status, and its latest batch with its step there. Ordered by charger_key. Filters: state (repeat for more), location_id (one site), job_id (the chargers of a job) and batch_id (a batch's). Any participant; a narrowed team sees its sites only. Errors: 404 migration_not_found. See Errors and statuses.
Path parameters
- migration_idstringRequiredPattern
^mig_[0-9a-f]{32}$
Query parameters
- cursorstring | nullnext_cursor of the previous page.Pattern
^(?:[A-Za-z0-9._-]{1,64}/)?[A-Za-z0-9._:*@+=-]{1,64}$ - limitintegerDefault
100· Minimum 1 · Maximum 500 - location_idinteger | nullGreater than 0
- statearray of enum | nullKeep the chargers in this state; repeat for more.
- job_idstring | nullKeep the chargers of this job.Pattern
^job_[0-9a-f]{32}$ - batch_idstring | nullKeep the chargers of this batch.Pattern
^bat_[0-9a-f]{32}$
Returns · 200
- dataarray of ChargerRequired
Child attributes
- 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
- next_cursorstring | nullRequiredPass as cursor (a charger_key) for the next page; null on the last one.
curl --fail-with-body "https://api.ivoracharge.com/v1/migrations/mig_0123456789abcdef0123456789abcdef/chargers" \
-H "Authorization: Bearer $IVORA_API_KEY"{
"data": [
{
"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"
}
}
],
"next_cursor": "string"
}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.



