Start a resumable upload of arbitrary media content. Returns a TUS upload URL and a short-lived bearer token used to authenticate subsequent chunk requests (no DPoP required on chunks). The DID of the authenticated user is recorded against the upload; on completion a VOD processing task is enqueued.
Input
application/jsondraftUri
string
Optional
Optional ats:// URI of a draft VOD created via place.stream.vod.createDraft. When supplied, the upload's processing fills that draft (rather than creating a new one), so the user can edit metadata while the upload runs and re-upload if it fails. The draft's origin_upload_id is set to this upload.
filename
string
Optional
Optional filename hint to attach as upload metadata.
mimeType
string
Required
MIME type of the content being uploaded (e.g. video/mp4).
size
integer
Required
Total size of the upload in bytes.
Output
application/jsonexpiresAt
stringdatetime
Required
When the upload token expires.
uploadId
string
Required
Server-side identifier for this upload.
uploadToken
string
Required
Short-lived bearer token bound to this upload. Send as 'Authorization: Bearer <token>' on TUS requests.
uploadUrl
stringuri
Required
Absolute URL to PATCH/HEAD per the TUS protocol.
Errors
UploadTooLarge
The requested upload exceeds the server's maximum allowed size. UnsupportedMimeType
The server does not accept this MIME type for upload. Try It
Requests are sent directly from your browser. Some servers may block requests due to CORS.
View raw schema
{
"description": "Start a resumable upload of arbitrary media content. Returns a TUS upload URL and a short-lived bearer token used to authenticate subsequent chunk requests (no DPoP required on chunks). The DID of the authenticated user is recorded against the upload; on completion a VOD processing task is enqueued.",
"errors": [
{
"description": "The requested upload exceeds the server's maximum allowed size.",
"name": "UploadTooLarge"
},
{
"description": "The server does not accept this MIME type for upload.",
"name": "UnsupportedMimeType"
}
],
"input": {
"encoding": "application/json",
"schema": {
"properties": {
"draftUri": {
"description": "Optional ats:// URI of a draft VOD created via place.stream.vod.createDraft. When supplied, the upload's processing fills that draft (rather than creating a new one), so the user can edit metadata while the upload runs and re-upload if it fails. The draft's origin_upload_id is set to this upload.",
"type": "string"
},
"filename": {
"description": "Optional filename hint to attach as upload metadata.",
"type": "string"
},
"mimeType": {
"description": "MIME type of the content being uploaded (e.g. video/mp4).",
"type": "string"
},
"size": {
"description": "Total size of the upload in bytes.",
"type": "integer"
}
},
"required": [
"size",
"mimeType"
],
"type": "object"
}
},
"output": {
"encoding": "application/json",
"schema": {
"properties": {
"expiresAt": {
"description": "When the upload token expires.",
"format": "datetime",
"type": "string"
},
"uploadId": {
"description": "Server-side identifier for this upload.",
"type": "string"
},
"uploadToken": {
"description": "Short-lived bearer token bound to this upload. Send as 'Authorization: Bearer <token>' on TUS requests.",
"type": "string"
},
"uploadUrl": {
"description": "Absolute URL to PATCH/HEAD per the TUS protocol.",
"format": "uri",
"type": "string"
}
},
"required": [
"uploadUrl",
"uploadToken",
"expiresAt",
"uploadId"
],
"type": "object"
}
},
"parameters": null,
"type": "procedure"
}