Log inTalk to us

Read a migration job and its per-charger progress

get/v1/migrations/{migration_id}/jobs/{job_id}
Requires an API key

A rollback job, or a batch's moves. Each charger: its route request (revision, not_before), the proxy's outcome, the rollback's status and the reconnect status. Any participant; a narrowed team sees the chargers at its sites. Errors: 404 migration_job_not_found, 404 migration_not_found. See Errors and statuses.

Path parameters

  • job_idstringRequired
    Pattern ^job_[0-9a-f]{32}$
  • migration_idstringRequired
    Pattern ^mig_[0-9a-f]{32}$

Returns · 200

  • idstringRequired
    job_...
  • migration_idstringRequired
  • kindenumRequired
    rollback: a rollback job. move: a batch's moves (each attempt is one request).
    One of rollback, move
  • batch_idstring | nullRequired
    The batch of a move job, or of a rollback of a batch; null otherwise.
  • statusenumRequired
    running while a charger is still open; then failed if any failed or expired (a rollback refused as busy too; a batch retries a busy move instead), else succeeded.
    One of running, succeeded, failed
  • reasonstringRequired
  • requested_bystringRequired
  • requested_atstringRequired
  • pacedbooleanRequired
    A rollback of more than 50 chargers: socket closes are spread at drain_per_second.
  • countsobjectRequired
    Chargers per outcome (open for those still running).
  • chargersarray of JobChargerRequired
    Child attributes
    • station_idintegerRequired
    • charger_keystringRequired
    • request_idstringRequired
    • revisioninteger | nullRequired
    • not_beforestringRequired
      When the runner may apply it: now, or later for a paced mass rollback.
    • outcomeenum | nullRequired
      null while open. applied, failed, superseded or expired: the proxy's result (or the rollback's expiry). skipped: not rolled back by this job (detail).
      One of applied, refused_busy, refused_parity, failed, superseded, expired, skipped
    • detailstring | nullRequired
      Why it was skipped: already_rolled_back, rollback_pending or not_proxied.
    • rollback_idstring | nullRequired
    • rollback_statusstring | nullRequired
    • reconnectstring | nullRequired
    • reported_atstring | nullRequired
GET /v1/migrations/{migration_id}/jobs/{job_id}
curl --fail-with-body "https://api.ivoracharge.com/v1/migrations/mig_0123456789abcdef0123456789abcdef/jobs/job_0123456789abcdef0123456789abcdef" \
  -H "Authorization: Bearer $IVORA_API_KEY"
Response · 200JSON
{
  "id": "id_0123456789abcdef",
  "migration_id": "migration_0123456789abcdef",
  "kind": "rollback",
  "batch_id": "batch_0123456789abcdef",
  "status": "running",
  "reason": "string",
  "requested_by": "string",
  "requested_at": "2026-09-30T17:00:00Z",
  "paced": false,
  "counts": {},
  "chargers": [
    {
      "station_id": 1,
      "charger_key": "string",
      "request_id": "request_0123456789abcdef",
      "revision": 1,
      "not_before": "string",
      "outcome": "applied",
      "detail": "string",
      "rollback_id": "rollback_0123456789abcdef",
      "rollback_status": "string",
      "reconnect": "string",
      "reported_at": "2026-09-30T17:00:00Z"
    }
  ]
}
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.