Create Asset Upload
Step 1 of 3. Reserves an asset record and mints a signed upload URL.
The client must then PUT the exact bytes to upload_url (step 2) and
call POST /v1/assets/{id}/complete (step 3) to hand off to
the ingest pipeline.
When the request includes the file’s hex-encoded md5 and content
with that digest already exists in the project, the server skips the
upload: it returns 200 with already_exists: true, the existing
asset_id, and its current status, and omits the upload fields.
A first upload (or a prior upload that failed ingest) returns 201
with the signed-URL fields.
Authorizations
Personal Access Token, sent verbatim as pat_<32 chars>. PATs are
minted from the Chief settings UI.
Headers
Project identifier scoping the request. Required on every
project-scoped public endpoint. Missing or malformed values respond
with HTTP 400 and code publicapi.tenancy.project.missing.
^project_[a-z0-9]{20}$Body
Original filename. Used for display and ingest hints.
RFC 6838 media type of the upload.
Hex-encoded md5 of the file. Optional. When supplied and content with this digest already exists in the project, the server returns the existing asset instead of a new upload URL.
Response
Content dedup hit. An asset with this md5 already exists in the
project; no upload is needed.
Two shapes share this schema. A new upload (201) carries the
signed-URL fields the client uses to PUT the bytes. A content-dedup hit
(200) sets already_exists to true, reports the existing asset's
status, and omits the upload fields.
^asset_[a-z0-9]{20}$True when an asset with the request's md5 already existed; the
upload fields are then absent.
Asset lifecycle. Progresses uploaded -> ingesting -> ready, or terminates at failed on any extraction error.
uploaded, ingesting, ready, failed HTTP method to use for the upload. PUT today; resumable
multi-part uploads may add new values without breaking the
existing PUT flow.
"PUT"
Headers the client MUST apply verbatim to the upload request.
Includes Content-Type.