Record a site flip of the project's migration
The project's charger proxy key (migration:proxy, made by Ivora administrators, bound to this project) or Ivora platform administrators; team roles and other keys are refused (tenants learn of flips through site.flipped, they do not declare them). The same flip as the staff route: the migration's charger proxy calls it after it moved a site's chargers. Emits site.flipped (direction to_ivora) or site.flip_rolled_back (to_previous_platform) to the project's webhooks with the location, its stations and their EVSEs, and records each moved station's route for QR sticker scans. It routes no charger. station_ids, when given, must all be at the location; otherwise every station there moved. Another project's location answers 404. Synchronous; replays with the same Idempotency-Key return the original result and emit nothing. Audit-logged (migration.site_flipped). Errors: 403 restricted_key_refused, 404 location_not_found, 409 station_in_shadow. See Errors and statuses.
Path parameters
- tenant_idintegerRequiredGreater than 0
Headers
- idempotency-keystringRequired
Request body
- location_idintegerRequiredThe location (site) whose chargers moved.Greater than 0
- directionenumRequiredto_ivora: the site's chargers now connect to Ivora (site.flipped). to_previous_platform: they went back to the previous platform (site.flip_rolled_back).One of
to_ivora,to_previous_platform - station_idsarray of integer | nullThe stations that moved, all at this location. Omit for every station at the location.
- flipped_atstring | nullWhen the routing changed (ISO 8601 with offset); defaults to now.Up to 40 characters
- flip_referencestring | nullThe migration tool's own identifier for this flip, repeated in the event.1–120 characters · Pattern
^[\x21-\x7e]+$ - reasonstring | nullWhy, for the event and the audit trail.Up to 300 characters
Returns · 201
- flip_idstringRequiredIvora's identifier of this flip; replays of the request return the same one.
- event_idstringRequiredThe site.flipped or site.flip_rolled_back event recorded for it.
- event_typeenumRequiredOne of
site.flipped,site.flip_rolled_back - tenant_idintegerRequired
- directionenumRequiredOne of
to_ivora,to_previous_platform - previousenumRequiredWhere the chargers connected before.One of
ivora,previous_platform - currentenumRequiredWhere they connect now.One of
ivora,previous_platform - flipped_atstringRequired
- locationSiteFlipLocationRequired
Child attributes
- idintegerRequired
- namestringRequired
- external_referencestring | nullRequired
- stationsarray of SiteFlipStationRequired
Child attributes
- idintegerRequired
- namestringRequired
- charger_idstring | nullRequired
- external_referencestring | nullRequired
- evsesarray of SiteFlipEvseRequired
Child attributes
- evse_numberintegerRequired
- evse_idstring | nullRequiredThe EVSE ID imported from the previous platform (eMI3, such as USABCE123*1), else null.
- physical_referencestring | null
- connector_idsarray of integerRequiredConnector resource IDs on this EVSE; charging sessions take them.
- all_stationsbooleanRequiredtrue when every station at the location moved.
- flip_referencestring | nullRequired
- reasonstring | nullRequired
- actorstringRequired
curl --fail-with-body -X POST "https://api.ivoracharge.com/v1/tenants/1042/migration/site-flips" \
-H "Authorization: Bearer $IVORA_API_KEY" \
-H "Idempotency-Key: order-2026-09-30-0001" \
-H "Content-Type: application/json" \
-d '{
"location_id": 7,
"direction": "to_ivora"
}'{
"flip_id": "flip_0123456789abcdef",
"event_id": "event_0123456789abcdef",
"event_type": "site.flipped",
"tenant_id": 1042,
"direction": "to_ivora",
"previous": "ivora",
"current": "ivora",
"flipped_at": "2026-09-30T17:00:00Z",
"location": {
"id": 1,
"name": "bay-01",
"external_reference": "property:1001"
},
"stations": [
{
"id": 1,
"name": "bay-01",
"charger_id": "charger_0123456789abcdef",
"external_reference": "property:1001",
"evses": [
{
"evse_number": 1,
"evse_id": "evse_0123456789abcdef",
"physical_reference": "string",
"connector_ids": [
null
]
}
]
}
],
"all_stations": false,
"flip_reference": "string",
"reason": "string",
"actor": "string"
}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.



