assets

Mint an asset over existing bytes (dedup fast-path)

Zero-byte fast-path: mints a new asset UUID over a blob the platform already has, identified by its blake3 hash.

Trust boundary: resolves only against blobs the platform itself ingested and hashed, and only those the calling account is authorized to use — the client hash is a lookup key, never an authority to register new content. A miss and "exists but not yours" are deliberately indistinguishable (404 blob_not_found).

post/api/v2/assets/from-hash

Request

  • Base URL: http://127.0.0.1:8189
  • URL: http://127.0.0.1:8189/api/v2/assets/from-hash
  • Auth: one of:
    • HTTP bearer
    • none

Request body

hashstring required
file_pathstring
tagsstring[]
expires_ininteger

Optional retention override in seconds (60s–7d): the asset's expires_at becomes now + expires_in, replacing the platform's default retention. Implementations without configurable retention ignore it. The bounds apply to this override only — the platform default is operator-configured and may lie outside them.

Example request

{
  "hash": "blake3:9f8a1c0d...",
  "file_path": "photo.png",
  "expires_in": 86400
}

Response

An identical reference already existed; returned as-is.

idstring required
hashstring nullable required

blake3:<hex>; null while lazily computed.

size_bytesinteger required
content_typestring required
file_pathstring nullable
created_newboolean

On create responses: distinguishes a brand-new blob (true) from a dedup hit against bytes the platform already had (false).

created_atstring date-time required
urlstring uri required

Short-lived content URL (signed, or proxy-served).

url_expires_atstring date-time required
expires_atstring date-time nullable

Retention deadline for the asset itself (distinct from url_expires_at, the signed URL's validity). Null or absent means the asset is non-expiring. On a dedup-hit create response the deadline may be later than now + the requested/default retention: re-referencing content extends its retention, never shortens it.

job_idstring nullable

ID of the job that produced this asset. Absent for uploaded assets, which have no producing job.

Example response

{
  "id": "9f8a1c0d-2b3e-4f56-8a7b-1c2d3e4f5a6b",
  "hash": "blake3:9f8a1c0d...",
  "size_bytes": 4816293,
  "content_type": "image/png",
  "file_path": "photo.png"
}

Changes