Skip to content

Roll back a device to its previous application version

POST
/api/v1/devices/{id}/rollback-version
curl --request POST \
--url http://localhost:3000/api/v1/devices/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/rollback-version \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <X-API-Key>' \
--data '{ "reason": "v2.4.1 crash-looping on the line-3 gateways", "applicationPackageId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }'

Re-deploys, in place, the revision (version and parameters) this device ran before its current one, producing a new manifest version (never reusing or decrementing). The deployment id and the Margo deployment id stay the same: no deployment is created and no instance is deleted (the returned deploymentId is the existing one; since FM-1446 it is no longer a new “Rollback to X” deployment). A device that shares its deployment with other devices is split off first; the others stay on their revision, and deploymentId is then the fork. Returns 409 (code ROLLBACK_NO_PREVIOUS_REVISION) when no earlier revision differs, and 409 (code ROLLBACK_NO_REVISION_TARGET) when the device has only history written before revisions existed. This does not abort an in-flight rollout.

id
required
string format: uuid

Device UUID

x-organization-id
string format: uuid

UUID of the organization (tenant) the request acts in. It selects the tenant and grants nothing: the server checks membership or an open tenant switch. Not needed for global operations. A malformed value returns 400. API keys are fixed to their own organization; another organization returns 403. The x-organization-source header grants nothing.

Media typeapplication/json
object
reason

Operator-supplied reason, recorded on the audit entry

string
<= 500 characters
Example
v2.4.1 crash-looping on the line-3 gateways
applicationPackageId

Which application to roll back. Rollback is scoped to one application package; on a device running several, omitting this picks the most recently sealed rollbackable one.

string format: uuid

Device rolled back to its previous version

Forbidden — caller lacks required permission

Device not found

No earlier revision to roll back to (ROLLBACK_NO_PREVIOUS_REVISION), or only history without revisions (ROLLBACK_NO_REVISION_TARGET)