Append an asset version
Uploads a fully rendered image — with all edits already applied to its pixels — above the original version. An append is accepted only while the original is current; replace the current derived version through its replacement endpoint instead. Exact duplicates store nothing. Metadata is copied from the original, so retained bytes may differ from uploaded bytes.
Authorizations
Gumnut API key (apikey_...) sent as a Bearer token in the Authorization header. Create and manage keys in the Gumnut app, or with the API key endpoints while signed in to it.
Path Parameters
Asset ID (with asset_ prefix) to add the version to.
Query Parameters
Optional response expansion. The single accepted value is variants: without it each row's version_urls carries only its lean thumbnail rung; with it, every rung plus the signed exact-byte original. Accepts multiple include= query params or a single comma-delimited value. Unknown values return 422.
Body
JPEG or PNG bytes with all edits and orientation already applied to the pixels, at most 100 MiB. The metadata-finalized file must also remain within that limit. The part's Content-Type declares the expected format; the format detected from the bytes is authoritative, and a concrete declared type that disagrees with it returns 422.
What produced this rendering: edit for an edit rendered by the client, or external:<service> for an external producer. original is reserved for the uploaded position-0 version.
64JSON object describing how the rendering was produced (e.g. an edit recipe), serialized as a string. Opaque to the server; the schema is defined by whichever producer sets kind. Malformed JSON, a non-object, or an over-large object returns 422.
16384Response
The upload duplicates the current version (same kind, params, and bytes); that version is returned and nothing new is stored.
One rendering in an asset's retained version chain.
Unique version identifier with 'asset_version_' prefix
Zero-based index in the chain: 0 is the uploaded original, the highest is the current rendering.
What produced this rendering: original (the upload), edit (an edit rendered by the client), or external:<service>. The namespace is open — treat an unrecognized kind as opaque rather than failing.
MIME type of this rendering's bytes (e.g., 'image/jpeg')
Width of this rendering in pixels
Height of this rendering in pixels
Byte size of this rendering's stored bytes.
Base64-encoded SHA-256 hash of this rendering's stored bytes, for comparing a locally computed hash against the chain (e.g. when reconciling an ambiguous create failure). Not unique: identical bytes may legitimately appear at different positions or on other assets. Transitionally null for roots written during the column's rollout window, until a follow-up backfill lands.
How this rendering was produced (e.g. an edit recipe). Opaque to the server; the schema is defined by whichever producer sets kind. null only for the original.
URLs for this rendering, shaped like an asset's asset_urls: the lean thumbnail/thumbnail_image rung by default; include=variants adds the remaining rungs and original, this rendering's exact stored bytes.