Revisions
Each replacement creates a new immutable revision while the asset keeps one stable identity and delivery URL.
GET/api/assets/{asset_id}/versions
200 OKList all retained revisions, newest first.
Required scopeassets:read
{
"id": "revision_uuid",
"versionNumber": 42,
"byteSize": 2841024,
"width": 2400,
"height": 1600,
"mime": "image/webp",
"hash": "sha256...",
"label": "Launch approved",
"note": "Final color correction",
"isCurrent": true,
"scanStatus": "clean",
"metadataStatus": "complete",
"createdAt": "2026-08-17T18:31:00"
}
PATCH/api/assets/{asset_id}/versions/{version}
200 OKAdd or clear a revision label and note.
Required scopeassets:write
{
"label": "Launch approved",
"note": "Final color correction"
}
POST/api/assets/{asset_id}/versions/{version}/promote
200 OKMake an older clean revision current without creating another revision.
Required scopeassets:write
When scanning is enabled, only revisions with scanStatus: clean can be promoted.
DELETE/api/assets/{asset_id}/versions/{version}
200 OKDelete one retained revision and its cached transforms. Deleting the current revision requires force=true.
Required scopeassets:write
With force=true, the highest remaining revision becomes current. If no revisions remain, the file identity and bucket links are deleted.