Log inTalk to us

List a migration's chargers (the state board)

get/v1/migrations/{migration_id}/chargers
Requires an API key

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_idstringRequired
    Pattern ^mig_[0-9a-f]{32}$

Query parameters

  • cursorstring | null
    next_cursor of the previous page.
    Pattern ^(?:[A-Za-z0-9._-]{1,64}/)?[A-Za-z0-9._:*@+=-]{1,64}$
  • limitinteger
    Default 100 · Minimum 1 · Maximum 500
  • location_idinteger | null
    Greater than 0
  • statearray of enum | null
    Keep the chargers in this state; repeat for more.
  • job_idstring | null
    Keep the chargers of this job.
    Pattern ^job_[0-9a-f]{32}$
  • batch_idstring | null
    Keep the chargers of this batch.
    Pattern ^bat_[0-9a-f]{32}$

Returns · 200

  • dataarray of ChargerRequired
    Child attributes
    • charger_keystringRequired
    • station_idintegerRequired
    • namestringRequired
      The station's OCPP connection name.
    • location_idinteger | nullRequired
    • stateenumRequired
      imported: 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 | nullRequired
      When the charger entered its state.
    • routeenum | stringRequired
      Where the proxy routes it, from its latest report.
    • route_desiredenum | nullRequired
      The 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 | nullRequired
      One of ivora, previous_platform, both, none
    • reported_bystring | nullRequired
      The proxy that reported it last.
    • reported_atstring | nullRequired
    • proxy_stalebooleanRequired
      The latest report is more than five minutes old.
    • open_requestobject | nullRequired
      Child attributes
      • idstringRequired
      • kindenumRequired
        One of rollback, move
      • desiredenumRequired
        One of ivora, previous_platform
      • revisioninteger | nullRequired
        Its position in the runner's queue; null while paced (not handed out yet).
      • not_beforestringRequired
      • requested_atstringRequired
    • last_rollbackobject | nullRequired
      Child attributes
      • idstringRequired
        Ivora's identifier of this rollback (mrb_...).
      • tenant_idintegerRequired
      • station_idintegerRequired
      • namestringRequired
        The station's OCPP connection name.
      • statusenumRequired
        pending: 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 | nullRequired
        Whether 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_bystringRequired
        Who asked for it: user:<id>, key:<id> or app:<id>.
      • team_idstring | nullRequired
        The project's team.
      • sourceenumRequired
        tenant: the project's own administrators; ivora: Ivora staff.
        One of tenant, ivora
      • requested_atstringRequired
      • rolled_back_atstring | nullRequired
        When the proxy switched the route (its own clock), once applied.
      • settled_atstring | nullRequired
        When Ivora recorded the current status (the proxy's result, the socket closing, the supersession or the expiry).
      • detailstring | nullRequired
        The proxy's note on the result, such as why it failed.
      • event_idstring | nullRequired
        The migration.charger_rolled_back event, once applied.
      • migration_idstring | null
        The migration workspace of the station (/v1/migrations/{migration_id}), when it is in one.
    • added_atstringRequired
    • batchobject | nullRequired
      The latest batch the charger is in; null when it never was in one.
      Child attributes
      • idstringRequired
        bat_...
      • statusenumRequired
        One of draft, submitted, approved, running, paused, completed, cancelled, rolled_back
      • stepenumRequired
        The charger's step in that batch.
        One of pending, moving, moved, blocked, failed, superseded, skipped
    • parityobject | nullRequired
      Its latest parity report: whether it passed, and when; null when it was never checked.
      Child attributes
      • report_idstringRequired
        mpr_...: GET /v1/migrations/{migration_id}/parity/reports/{report_id}.
      • statusenumRequired
        One of passed, failed, incomplete
      • checked_atstringRequired
  • next_cursorstring | nullRequired
    Pass as cursor (a charger_key) for the next page; null on the last one.
GET /v1/migrations/{migration_id}/chargers
curl --fail-with-body "https://api.ivoracharge.com/v1/migrations/mig_0123456789abcdef0123456789abcdef/chargers" \
  -H "Authorization: Bearer $IVORA_API_KEY"
Response · 200JSON
{
  "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"
}
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.