List the project's migrating chargers and where each is routed
get/v1/tenants/{tenant_id}/migration/chargers
Requires an API key
The chargers the migration's charger proxy reports for this project, and those a site flip recorded: each one's route (ivora or previous_platform), the side its connection is open on, shadow mode, the recorded route QR scans follow, and its latest rollback with the reconnect status. Ordered by station ID; after is the last station ID of the previous page. Requires stations:read.
Path parameters
- tenant_idintegerRequired
Query parameters
- afterintegerDefault
0· Minimum 0 - limitintegerDefault
100· Minimum 1 · Maximum 500
Returns · 200
- dataarray of MigrationChargerRequired
Child attributes
- station_idintegerRequired
- namestring | nullRequiredThe station's OCPP connection name; null when the station no longer exists on Ivora.
- stateenumRequiredon_ivora: the charger is routed to Ivora. on_previous_platform: routed to the previous platform (never moved, or rolled back). rollback_pending: a rollback is recorded and not finished (pending, or applied_socket_open).One of
on_ivora,on_previous_platform,rollback_pending - routeenumRequiredWhere the charger is routed: the proxy's latest report, else the recorded route.One of
ivora,previous_platform - proxiedbooleanRequiredtrue when the charger proxy reports this charger, so it can be rolled back here; false for a charger only a site flip or a route report recorded.
- connectedenum | nullRequiredWhich side the charger has a connection open on through the proxy, at its latest report; null when not proxied.One of
ivora,previous_platform,both,none - proxy_reported_atstring | nullRequiredWhen Ivora last received the proxy's report of this charger.
- proxy_stalebooleanRequiredtrue when that report is more than five minutes old: the proxy may be down, and a rollback waits.
- shadowbooleanRequiredThe station is in shadow mode: the previous platform controls it and Ivora only observes.
- recorded_routeobject | nullRequiredThe route Ivora recorded from site flips and route reports, which QR sticker scans follow; null when none is recorded.
Child attributes
- currentenumRequiredThe side QR sticker scans follow.One of
ivora,previous_platform - flipped_atstringRequired
- sourcestringRequiredsite_flip (a site flip record) or charger_route (a charger's own route report or rollback).
- referencestring | nullRequired
- rollback_availablebooleanRequiredWhether POST .../rollback would be accepted now: proxied, routed to or connected on Ivora, and no rollback pending or applied_socket_open.
- 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.
- next_cursorinteger | nullRequiredPass as after for the next page; null on the last one.
GET /v1/tenants/{tenant_id}/migration/chargers
curl --fail-with-body "https://api.ivoracharge.com/v1/tenants/1042/migration/chargers" \
-H "Authorization: Bearer $IVORA_API_KEY"Response · 200JSON
{
"data": [
{
"station_id": 1,
"name": "bay-01",
"state": "on_ivora",
"route": "ivora",
"proxied": false,
"connected": "ivora",
"proxy_reported_at": "2026-09-30T17:00:00Z",
"proxy_stale": false,
"shadow": false,
"recorded_route": {
"current": "ivora",
"flipped_at": "2026-09-30T17:00:00Z",
"source": "string",
"reference": "string"
},
"rollback_available": false,
"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"
}
}
],
"next_cursor": 1
}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.



