assets

Append an asset version

Changed on

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.

post/api/assets/{asset_id}/versions

Request

  • Base URL: https://api.gumnut.ai
  • URL: https://api.gumnut.ai/api/assets/{asset_id}/versions
  • Auth: one of:
    • HTTP bearer
    • HTTP bearer

Path parameters

asset_idstring required

Asset ID (with asset_ prefix) to add the version to.

Query parameters

includestring[] nullable

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.

Request body multipart/form-data

filestring binary 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.

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

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

Response

The upload duplicates the current version (same kind, params, and bytes); that version is returned and nothing new is stored.

idstring required

Unique version identifier with 'asset_version_' prefix

positioninteger required

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

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

paramsobject nullable

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.

mime_typestring required

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

widthinteger required

Width of this rendering in pixels

heightinteger required

Height of this rendering in pixels

file_size_bytesinteger required

Byte size of this rendering's stored bytes.

checksumstring nullable 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.

version_urlsobject nullable

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.

Changes