Upload bytes for one reserved studio asset
Requires studio_assets:write and an upload_required reconciliation entry. Content-Type and Content-Length must exactly match the reservation and the streamed bytes must match its SHA-256. The API marks the asset uploading through Convex, uses only the server-derived R2 object key, computes MD5/SHA-256 while streaming to R2, then marks uploaded and finalizes. It never fetches, crops, renders, or accepts caller-selected storage paths.
Authorizations
Batch Relay scoped API key or an anonymous Test Mode session. Scope names document required capabilities. Anonymous sessions are sandbox-only and do not authorize studio, event, billing, or Live Mode operations.
Headers
image/jpeg, image/png, image/tiff 1 <= x <= 99614720Untrusted optional analytics hint naming the calling client surface. It never affects authorization, routing, pricing, or behavior.
1 - 100Untrusted optional analytics hint naming the calling client version. It never affects authorization, routing, pricing, or behavior.
1 - 100Untrusted optional analytics hint naming the invocation mode. It never affects authorization, routing, pricing, or behavior.
1 - 100Path Parameters
11Body
The body is of type file.
Response
Finalized asset lifecycle projection
x >= 1image/jpeg, image/png, image/tiff Opaque session-bound image asset ID; it is not a credential.
reserved, uploading, uploaded, ready, failed, deleted, cleanup_leased