Log inTalk to us

Rename, configure, pause, complete or archive a migration

patch/v1/migrations/{migration_id}
Requires an API key

Any of name, settings (only the fields sent change) and status, in one change. The lifecycle: active and paused switch both ways; paused stops imports and batches (its running batches pause with it, migration.batch.paused reason migration_paused; resume them once it is active again) while rollbacks still go through the charger proxy and its runner. completed (from active or paused) makes the migration a read-only record of the move: imports, batches, chargers, invites and new runner credentials are refused; reopen it with status active and a reason. archived (from paused or completed; an active migration is paused or completed first) closes it for good and releases its chargers, which another migration can then add; its records stay readable by its participants. Rollbacks are never refused because of the status: Ivora can always roll back, through the migration's runner. Completing or archiving waits until no batch is approved, running or paused and no route request (a rollback on its way to the charger proxy) is open. Sending the current status or values changes nothing. Each change is audited (migration.settings.changed, migration.paused, migration.resumed, migration.completed, migration.reopened, migration.archived) in the same transaction; nothing changes when its entry cannot be stored. Needs the client role (its owners and admins; a key needs stations:admin) or Ivora support, which acts on the client's behalf and is audited as support. Errors: 404 migration_not_found, 409 migration_batches_open, 409 migration_closed, 409 migration_routes_open, 409 migration_status_invalid, 503 migration_audit_unavailable. See Errors and statuses.

Path parameters

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

Request body

  • namestring | null
    A new label.
    1–120 characters
  • settingsobject | null
    The settings to change; the others keep their value.
    Child attributes
    • rollback_window_daysinteger | null
      Days after a charger moved during which it can still be rolled back to the previous platform.
      Minimum 1 · Maximum 90
    • drain_per_secondinteger | null
      Socket closes per second when a rollback covers more than 50 chargers.
      Minimum 1 · Maximum 1000
    • rollback_slaboolean | null
      An Ivora rollback commitment is in force. Ivora support stays on the migration either way.
  • statusenum | null
    paused: imports and batches stop (running batches pause); rollbacks still go through the charger proxy. active: resume a paused migration, or reopen a completed one. completed: the move is done; the migration becomes a read-only record. archived (from paused or completed): closed for good and its chargers released, still readable by its participants. Ivora can roll back in every status.
    One of active, paused, completed, archived
  • reasonstring | null
    Why, kept in the audit log (surrounding spaces removed). Required to reopen a completed migration.
    Up to 500 characters

Returns · 200

  • idstringRequired
    mig_...
  • tenant_idintegerRequired
    The client's project.
  • project_namestring | nullRequired
    The project's name; null when the charging core cannot be read.
  • team_idstring | nullRequired
    The client: the team whose project the migration belongs to.
  • team_namestring | nullRequired
    The client team's name.
  • namestringRequired
  • source_platformstringRequired
  • statusenumRequired
    active; paused (imports and new work stop, rollbacks still go through); completed (a read-only record of the move); archived (closed for good, still readable).
    One of active, paused, completed, archived
  • settingsSettingsRequired
    Child attributes
    • rollback_window_daysintegerRequired
    • drain_per_secondintegerRequired
    • rollback_slabooleanRequired
      An Ivora rollback commitment is in force (rollback by Ivora within 4 business hours). Ivora support stays on the migration either way.
  • completed_atstring | nullRequired
    When the migration was completed; null while it is active or paused.
  • roleenum | nullRequired
    The caller's effective role: client (the project team's owners and admins), support (Ivora staff), partner (an invited partner team's owners, admins, developers and operators), observer (read only: the other members of those teams except billing, invited observer teams, Ivora platform support).
    One of client, support, partner, observer
  • scopeobject | nullRequired
    The caller's narrowing to some sites, or null for every site.
    Child attributes
    • location_idsarray of integerRequired
      The sites the team sees and acts on: the migration's chargers at these locations only.
  • permissionsarray of enumRequired
    What the caller may do here.
  • participantsarray of Participant | nullRequired
    Active and invited participants; null in a list's summary view.
    Child attributes
    • idstringRequired
      mpt_...
    • kindenumRequired
      client: the project's own team. support: Ivora support (team_id null). partner: an invited migration partner or installer. observer: an invited team that only reads.
      One of client, support, partner, observer
    • team_idstring | nullRequired
      The team; null for Ivora support and for an email invite nobody accepted yet.
    • team_namestring | nullRequired
    • statusenumRequired
      removed only in the answer that removed, revoked or declined it.
      One of invited, active, removed
    • invite_emailstring | nullRequired
      The address an email invite went to; shown to the client only, null otherwise.
    • scopeobject | nullRequired
      Narrowing to some sites; null for every site of the migration.
      Child attributes
      • location_idsarray of integerRequired
        The sites the team sees and acts on: the migration's chargers at these locations only.
    • removablebooleanRequired
      true for an invited team (partner or observer); false for the client and Ivora support, which always stay.
    • invited_byenum | nullRequired
      Who invited a partner or observer: the client, or Ivora support on the client's behalf. null for the client and Ivora support.
      One of client, support
    • invited_atstringRequired
    • expires_atstring | nullRequired
      An invite not accepted by then lapses (14 days).
    • accepted_atstring | nullRequired
  • countsobjectRequired
    Chargers per state, and total (of the caller's sites when narrowed).
  • runnersarray of Runner | nullRequired
    Runner credentials, revoked ones included. Empty for observers; null in a list's summary view.
    Child attributes
    • idstringRequired
    • labelstringRequired
      The charger proxy's name, also on its route reports.
    • prefixstringRequired
      The credential's first characters, to recognise it; never the secret.
    • scopesarray of stringRequired
    • created_bystringRequired
    • created_atstringRequired
    • last_seen_atstring | nullRequired
      Its last heartbeat, route poll or report.
    • healthybooleanRequired
      Seen within the last 60 seconds and not revoked.
    • last_revisioninteger | nullRequired
      The last route revision it pulled.
    • heartbeatobject | nullRequired
      Its last heartbeat body: nodes, upstreams, routed and connected counts.
    • revoked_atstring | nullRequired
  • runner_healthybooleanRequired
    A runner was seen within the last 60 seconds.
  • route_revisionintegerRequired
    The last route revision handed to the runners.
  • created_bystringRequired
  • created_atstringRequired
  • updated_atstringRequired
PATCH /v1/migrations/{migration_id}
curl --fail-with-body -X PATCH "https://api.ivoracharge.com/v1/migrations/mig_0123456789abcdef0123456789abcdef" \
  -H "Authorization: Bearer $IVORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Response · 200JSON
{
  "id": "id_0123456789abcdef",
  "tenant_id": 1042,
  "project_name": "string",
  "team_id": "team_0123456789abcdef",
  "team_name": "string",
  "name": "bay-01",
  "source_platform": "string",
  "status": "active",
  "settings": {
    "rollback_window_days": 1,
    "drain_per_second": 1,
    "rollback_sla": false
  },
  "completed_at": "2026-09-30T17:00:00Z",
  "role": "client",
  "scope": {
    "location_ids": [
      7
    ]
  },
  "permissions": [
    "migration:read"
  ],
  "participants": [
    {
      "id": "id_0123456789abcdef",
      "kind": "client",
      "team_id": "team_0123456789abcdef",
      "team_name": "string",
      "status": "invited",
      "invite_email": "string",
      "scope": {
        "location_ids": [
          7
        ]
      },
      "removable": false,
      "invited_by": "client",
      "invited_at": "2026-09-30T17:00:00Z",
      "expires_at": "2026-09-30T17:00:00Z",
      "accepted_at": "2026-09-30T17:00:00Z"
    }
  ],
  "counts": {},
  "runners": [
    {
      "id": "id_0123456789abcdef",
      "label": "string",
      "prefix": "string",
      "scopes": [
        "migration:routes"
      ],
      "created_by": "string",
      "created_at": "2026-09-30T17:00:00Z",
      "last_seen_at": "2026-09-30T17:00:00Z",
      "healthy": false,
      "last_revision": 1,
      "heartbeat": {},
      "revoked_at": "2026-09-30T17:00:00Z"
    }
  ],
  "runner_healthy": false,
  "route_revision": 1,
  "created_by": "string",
  "created_at": "2026-09-30T17:00:00Z",
  "updated_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.

PATCH is a write: you confirm the method, path and project before it is sent, with a generated Idempotency-Key.