Rename, configure, pause, complete or archive a migration
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_idstringRequiredPattern
^mig_[0-9a-f]{32}$
Request body
- namestring | nullA new label.1–120 characters
- settingsobject | nullThe settings to change; the others keep their value.
Child attributes
- rollback_window_daysinteger | nullDays after a charger moved during which it can still be rolled back to the previous platform.Minimum 1 · Maximum 90
- drain_per_secondinteger | nullSocket closes per second when a rollback covers more than 50 chargers.Minimum 1 · Maximum 1000
- rollback_slaboolean | nullAn Ivora rollback commitment is in force. Ivora support stays on the migration either way.
- statusenum | nullpaused: 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 | nullWhy, kept in the audit log (surrounding spaces removed). Required to reopen a completed migration.Up to 500 characters
Returns · 200
- idstringRequiredmig_...
- tenant_idintegerRequiredThe client's project.
- project_namestring | nullRequiredThe project's name; null when the charging core cannot be read.
- team_idstring | nullRequiredThe client: the team whose project the migration belongs to.
- team_namestring | nullRequiredThe client team's name.
- namestringRequired
- source_platformstringRequired
- statusenumRequiredactive; 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_slabooleanRequiredAn Ivora rollback commitment is in force (rollback by Ivora within 4 business hours). Ivora support stays on the migration either way.
- completed_atstring | nullRequiredWhen the migration was completed; null while it is active or paused.
- roleenum | nullRequiredThe 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 | nullRequiredThe caller's narrowing to some sites, or null for every site.
Child attributes
- location_idsarray of integerRequiredThe sites the team sees and acts on: the migration's chargers at these locations only.
- permissionsarray of enumRequiredWhat the caller may do here.
- participantsarray of Participant | nullRequiredActive and invited participants; null in a list's summary view.
Child attributes
- idstringRequiredmpt_...
- kindenumRequiredclient: 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 | nullRequiredThe team; null for Ivora support and for an email invite nobody accepted yet.
- team_namestring | nullRequired
- statusenumRequiredremoved only in the answer that removed, revoked or declined it.One of
invited,active,removed - invite_emailstring | nullRequiredThe address an email invite went to; shown to the client only, null otherwise.
- scopeobject | nullRequiredNarrowing to some sites; null for every site of the migration.
Child attributes
- location_idsarray of integerRequiredThe sites the team sees and acts on: the migration's chargers at these locations only.
- removablebooleanRequiredtrue for an invited team (partner or observer); false for the client and Ivora support, which always stay.
- invited_byenum | nullRequiredWho 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 | nullRequiredAn invite not accepted by then lapses (14 days).
- accepted_atstring | nullRequired
- countsobjectRequiredChargers per state, and total (of the caller's sites when narrowed).
- runnersarray of Runner | nullRequiredRunner credentials, revoked ones included. Empty for observers; null in a list's summary view.
Child attributes
- idstringRequired
- labelstringRequiredThe charger proxy's name, also on its route reports.
- prefixstringRequiredThe credential's first characters, to recognise it; never the secret.
- scopesarray of stringRequired
- created_bystringRequired
- created_atstringRequired
- last_seen_atstring | nullRequiredIts last heartbeat, route poll or report.
- healthybooleanRequiredSeen within the last 60 seconds and not revoked.
- last_revisioninteger | nullRequiredThe last route revision it pulled.
- heartbeatobject | nullRequiredIts last heartbeat body: nodes, upstreams, routed and connected counts.
- revoked_atstring | nullRequired
- runner_healthybooleanRequiredA runner was seen within the last 60 seconds.
- route_revisionintegerRequiredThe last route revision handed to the runners.
- created_bystringRequired
- created_atstringRequired
- updated_atstringRequired
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 '{}'{
"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"
}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.



