Log inTalk to us

Invite a team to a migration

post/v1/migrations/{migration_id}/participants
Requires an API key

Invite a partner (or installer), which imports, plans and executes batches, rolls back the chargers its own team moved inside the rollback window and reads their OCPP log, or an observer, which reads. By team_id, when the team exists (one of its owners or admins accepts), or by invite_email (that person accepts with a confirmed email, for a team they own or administer or a new one). scope.location_ids narrows the team to those sites. The invite lapses after 14 days. Invited teams see this migration and nothing else of the project. 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. A retry with the same Idempotency-Key returns the same invite; nothing is invited unless its audit entry is stored. Errors: 403 self_serve_review_required, 404 migration_not_found, 404 migration_team_not_found, 409 migration_closed, 409 migration_participant_exists, 503 migration_audit_unavailable. See Errors and statuses.

Path parameters

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

Headers

  • idempotency-keystringRequired

Request body

  • team_idstring | null
    Invite this team (its owners and admins accept).
    Pattern ^team_[0-9a-f]{32}$
  • invite_emailstring | null
    Or invite by email: the person with this confirmed email accepts, for a team they own or administer or a new one.
    3–254 characters · Pattern ^[^@\s]+@[^@\s]+\.[^@\s]+$
  • kindenumRequired
    partner: imports, plans and executes, rolls back the chargers its team moved and reads their OCPP log. observer: reads.
    One of partner, observer
  • scopeobject | null
    Optional narrowing to some sites, for example an installer's.
    Child attributes
    • location_idsarray of integerRequired
      The sites the team sees and acts on: the migration's chargers at these locations only.

Returns · 201

  • 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
POST /v1/migrations/{migration_id}/participants
curl --fail-with-body -X POST "https://api.ivoracharge.com/v1/migrations/mig_0123456789abcdef0123456789abcdef/participants" \
  -H "Authorization: Bearer $IVORA_API_KEY" \
  -H "Idempotency-Key: order-2026-09-30-0001" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "partner"
}'
Response · 201JSON
{
  "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"
}
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.

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