Download a tus upload
Downloads bytes from a resumable upload, including supported range responses.
{UPLOAD_URL}Use the upload capability URL from the Location header of the successful create-upload response. It does not use ambient API2 host credentials.
This endpoint downloads the bytes received so far, even while an upload is unfinished.
A successful HTTP 200 or 206 response does not mean the upload is complete.
An upload with no received bytes can return HTTP 200 with an empty body.
For a range response, the size in Content-Range is the current stored size, not the
declared final upload length.
Before downloading a complete upload, retrieve its offset.
Check that Upload-Length is present and Upload-Offset equals Upload-Length.
Upload-Defer-Length: 1 means the total length is still unknown, so the transfer is not complete.
Assembly processing and export success are separate from completing this tus transfer. Check the terminal Assembly Status and its results before publishing a processed asset.
Request example
Set UPLOAD_URL to the complete Location URL returned when creating the tus upload. Keep this URL secret.
curl --fail-with-body -sS --request GET \
--url "${UPLOAD_URL:?Set UPLOAD_URL}" \
--output './download.bin'
Request headers
Complete JSON Schema
Normalized lowercase headers for the tusd download extension.
Fields beyond those listed for this object are accepted.
| Field | Type and description |
|---|---|
if-match | string (minimum length: 1, maximum length: 8192)An entity tag or wildcard that the upload must match. |
if-modified-since | string (minimum length: 1, maximum length: 8192)An HTTP date after which a modified upload is returned. |
if-none-match | string (minimum length: 1, maximum length: 8192)An entity tag or wildcard that the upload must not match. |
if-range | string (minimum length: 1, maximum length: 8192)An entity tag or HTTP date that makes a byte range conditional. |
if-unmodified-since | string (minimum length: 1, maximum length: 8192)An HTTP date after which a modified upload fails the precondition. |
range | string (maximum length: 8192)One or more canonical byte ranges. Validation pattern (regular expression)^bytes=(?:[0-9]+-[0-9]*|-[0-9]+)(?:,(?:[0-9]+-[0-9]*|-[0-9]+))*$ |
tus-resumable | string (always: "1.0.0")The negotiated tus version when the client supplies it. |
Response
HTTP 200
Binary response body. */*
Response headers
Complete JSON Schema
Fields beyond those listed for this object are accepted.
| Field | Type and description |
|---|---|
accept-rangesrequired | string (always: "bytes") |
content-dispositionrequired | string (minimum length: 1) |
content-lengthrequired | stringA canonical unsigned base-10 byte count in the signed 64-bit range, without zero padding or a plus sign. Validation pattern (regular expression)^(?:0|[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-6]|9223372036854775807)$ |
content-typerequired | stringValidation pattern (regular expression)^[a-z]+\/[a-z0-9+.-]+$ |
last-modifiedrequired | string (minimum length: 1) |
tus-resumablerequired | string (always: "1.0.0") |
x-content-type-optionsrequired | string (always: "nosniff") |
HTTP 206
Binary response body. */*
Response headers
Complete JSON Schema
| Field | Type and description |
|---|---|
accept-rangesrequired | string (always: "bytes") |
content-dispositionrequired | string (minimum length: 1) |
content-lengthrequired | stringA canonical unsigned base-10 byte count in the signed 64-bit range, without zero padding or a plus sign. Validation pattern (regular expression)^(?:0|[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-6]|9223372036854775807)$ |
last-modifiedrequired | string (minimum length: 1) |
tus-resumablerequired | string (always: "1.0.0") |
x-content-type-optionsrequired | string (always: "nosniff") |
Any of the following schemas may apply:
required properties: content-range, content-type
Fields beyond those listed for this object are accepted.
| Field | Type and description |
|---|---|
content-rangerequired | stringThe inclusive returned byte range and current stored size, not the declared final upload length. Validation pattern (regular expression)^bytes [0-9]+-[0-9]+\/[0-9]+$ |
content-typerequired | stringValidation pattern (regular expression)^[a-z]+\/[a-z0-9+.-]+$ |
required properties: content-type
Fields beyond those listed for this object are accepted.
| Field | Type and description |
|---|---|
content-range | neverThis value is prohibited. |
content-typerequired | stringValidation pattern (regular expression)^multipart\/byteranges; boundary=[0-9a-f]{60}$ |
HTTP 304
No response body.
Response headers
Complete JSON Schema
Fields beyond those listed for this object are accepted.
| Field | Type and description |
|---|---|
content-dispositionrequired | string (minimum length: 1) |
last-modifiedrequired | string (minimum length: 1) |
tus-resumablerequired | string (always: "1.0.0") |
x-content-type-optionsrequired | string (always: "nosniff") |
HTTP 412
No response body.
Response headers
Complete JSON Schema
Fields beyond those listed for this object are accepted.
| Field | Type and description |
|---|---|
content-dispositionrequired | string (minimum length: 1) |
content-typerequired | stringValidation pattern (regular expression)^[a-z]+\/[a-z0-9+.-]+$ |
last-modifiedrequired | string (minimum length: 1) |
tus-resumablerequired | string (always: "1.0.0") |
x-content-type-optionsrequired | string (always: "nosniff") |
HTTP 416
Text response body. text/plain; charset=utf-8
Response body schema
Complete JSON Schema
"invalid range: failed to overlap\n" | "invalid range\n"Response headers
Complete JSON Schema
| Field | Type and description |
|---|---|
content-dispositionrequired | string (minimum length: 1) |
content-typerequired | string (always: "text/plain; charset=utf-8") |
tus-resumablerequired | string (always: "1.0.0") |
x-content-type-optionsrequired | string (always: "nosniff") |
Any of the following schemas may apply:
required properties: content-range
Fields beyond those listed for this object are accepted.
| Field | Type and description |
|---|---|
content-rangerequired | stringThe current stored size for an unsatisfied byte range, not the declared final upload length. Validation pattern (regular expression)^bytes [*]\/[0-9]+$ |
Variant 2
Fields beyond those listed for this object are accepted.
| Field | Type and description |
|---|---|
content-range | neverThis value is prohibited. |
Error response
Text response body. text/plain; charset=utf-8
Response body schema
Complete JSON Schema
stringAny of the following schemas may apply:
Variant 1: string
stringValidation pattern (regular expression)
^ERR_[A-Z0-9_]+: [^\r\n]*\n$Variant 2: string
stringRaw text/plain hook error framing with a verbatim payload; JSON-shaped but not necessarily valid JSON.
Validation pattern (regular expression)
^\{"error":"(?:[\x09-\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]|[^\x09-\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000\ufeff])*"\}$Response headers
Complete JSON Schema
Fields beyond those listed for this object are accepted.
| Field | Type and description |
|---|---|
content-typerequired | string (always: "text/plain; charset=utf-8") |
tus-resumablerequired | string (always: "1.0.0") |
x-content-type-optionsrequired | string (always: "nosniff") |