Log inTalk to us

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_idintegerRequired
    Greater than 0
  • migration_idstringRequired
    Pattern ^mig_[0-9a-f]{32}$

Returns · 200

  • 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
  • historyarray of TransitionRequired
    Its state changes, newest first (the last 100).
    Child attributes
    • fromenum | nullRequired
      The state before; null for the charger's first state.
      One of imported, proxied, shadow, parity_checked, moved, rolling_back, rolled_back
    • toenumRequired
      One of imported, proxied, shadow, parity_checked, moved, rolling_back, rolled_back
    • causeenumRequired
      What 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
    • detailobjectRequired
      What 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.