TUS upload API endpoint
How it works
- Create a video object using the Create Video API to get a
videoId. - Generate a presigned signature on your server using SHA256.
- Upload the file from the client using a TUS client library with the presigned credentials.
Authentication
To authenticate a TUS upload request, the following headers must be included:Video metadata parameters
The following metadata can be passed with the TUS upload:Generating the signature
The authorization signature is generated by hashing the concatenation of several values using SHA256:A 401 Unauthorized from the TUS endpoint usually means one of: the
AuthorizationExpire timestamp has passed before the upload finished, the AuthorizationSignature was generated with a different value than the request actually sends (mismatched library ID, API key, expiration, or video ID), or one of the LibraryId / VideoId headers is missing. The values used to generate the signature on your server must match the headers sent on the client byte-for-byte.Examples
Once you have the presigned credentials from your server, use a TUS client library to upload the file. The official tus-js-client is recommended for browser uploads. Install the TUS client:Basic client-side upload
Next.js App Router
This example shows a complete implementation using Next.js with the App Router.React with Express backend
Express server (server.js):
Resuming uploads
One of the key benefits of TUS is the ability to resume interrupted uploads. Thetus-js-client library handles this automatically:
Error handling
Implement proper error handling to provide a good user experience:Ensure any
AuthorizationExpire timestamp is at least 1 hour (3600 seconds) or longer to make sure uploads are completed before authorization expires.Resumable (TUS) upload FAQ
Common questions about how authorization and resumability behave when uploading video with the TUS resumable protocol.Can I re-sign an existing video GUID to resume an in-progress upload instead of creating a new video object?
Can I re-sign an existing video GUID to resume an in-progress upload instead of creating a new video object?
Yes. The same video GUID can be re-signed and used to resume through the existing TUS upload URL - there is no need to create a new video object.Note that a newly generated signature does not extend the upload resource’s original expiry. Re-signing lets you continue an existing upload; it does not reset the clock on how long that upload remains available.
How long does an incomplete TUS upload stay resumable, and what's returned once it expires?
How long does an incomplete TUS upload stay resumable, and what's returned once it expires?
An incomplete upload remains resumable until the
AuthorizationExpire value that was used when it was created, or after roughly 48 hours of inactivity - whichever comes first.Once it expires, requesting the upload returns 404 Not Found (not 410).