Upload an asset (single-call multipart)
Single-call multipart/form-data upload. The platform streams the
bytes through its trusted byte-path, dedups by the server-computed
hash, and mints the asset record.
The blake3 hash is always computed server-side from the received
bytes — a client-declared expected_hash is verified, never trusted.
The uploaded asset is referenceable immediately; any content scanning
runs in the background and does not block the response.
~100 MB single-request expectation for v1; chunked/resumable large uploads are a deliberate open question.
인증
Authorization: Bearer <api-key> — account-scoped API keys on Cloud and serverless. Self-hosted accepts unauthenticated requests by default and can be configured with a static bearer token.
헤더
Client-generated UUID (recommended). Single-use: the first request to present a key is processed; any later request with the same key is rejected 422 idempotency_key_reuse (reject-on-duplicate, no response replay). Keys expire after 24h.
본문
The raw bytes.
"image/png"
Placement path / filename (global-namespace-root form, e.g. photo.png or models/checkpoints/x.safetensors).
"photo.png"
Optional client-computed blake3 (blake3:<hex>). Verified against the server-computed hash; mismatch is rejected with 409 hash_mismatch and no asset is minted.
"blake3:9f8a1c0d..."
Category tags (e.g. input).
응답
Bytes deduped to an existing blob; asset minted over it.
A user-owned record identified by a server-assigned UUID, backing an immutable blob whose content carries a server-computed blake3 hash. hash may be computed lazily: an asset record (and its retrievable bytes) can exist before its hash is filled in.
"asset_01JZV8Q3M7K2W9X0Y1Z2A3B4C5"
blake3:<hex>; null while lazily computed.
"blake3:9f8a1c0d..."
4816293
"image/png"
Short-lived content URL (signed, or proxy-served).
"photo.png"
On create responses: distinguishes a brand-new blob (true) from a dedup hit against bytes the platform already had (false).