Skip to main content
POST
Replace the current derived asset version

Authorizations

Authorization
string
header
required

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
string
required

Asset ID (with asset_ prefix) whose version to replace.

version_id
string
required

Version ID (with asset_version_ prefix) to replace. It must be the asset's current non-original version.

Query Parameters

include
string[] | null

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

multipart/form-data
file
file
required

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.

kind
string
required

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.

Maximum string length: 64
params
string
required

JSON 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.

Maximum string length: 16384

Response

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.

id
string
required

Unique version identifier with 'asset_version_' prefix

position
integer
required

Zero-based index in the chain: 0 is the uploaded original, the highest is the current rendering.

kind
string
required

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
string
required

MIME type of this rendering's bytes (e.g., 'image/jpeg')

width
integer
required

Width of this rendering in pixels

height
integer
required

Height of this rendering in pixels

file_size_bytes
integer
required

Byte size of this rendering's stored bytes.

checksum
string | null
required

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.

params
Params · object | null

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.

version_urls
Version Urls · object | null

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.