Reserve a managed media upload
Returns a presigned PUT URL, valid for 10 minutes. PUT the bytes, then call PATCH to complete. If already_uploaded is true, skip the PUT and reuse asset_id. Requires the media:write scope.
POST
/api/cli/media/uploadsAuthorization
AuthorizationBearer token (ba_sk_...) · headerrequiredAPI key from /dashboard/api-keys. Keys expire after 365 days.
Request body
requiredapplication/jsonasset_idstring<uuid>Optional, for idempotent retries
content_typestringrequiredAllowed:
image/jpegimage/pngimage/webpvideo/mp4content_lengthintegerrequiredImages up to 15 MiB, MP4 up to 200 MiB
min 1
content_sha256stringrequiredmatches ^[a-f0-9]{64}$
content_md5stringrequiredmatches ^[a-f0-9]{32}$
Responses
201
Reserved
asset_idstring<uuid>already_uploadedbooleanupload_urlstring<uri>upload_methodstringupload_headersobjectexpires_atstring<date-time>mediaobjectExisting asset when already_uploaded is true
nextstring401
Missing, invalid, expired, or revoked API key
errorstringrequiredcodestring409
MEDIA_UPLOAD_CONFLICT
errorstringrequiredcodestring429
MEDIA_STORAGE_QUOTA_EXCEEDED: over 10 pending uploads, 2,000 objects, or 20 GiB
errorstringrequiredcodestring