From 79c6f88c6f11f762806ade0c0b97e4b98f9db3e3 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Mon, 24 Aug 2026 14:54:02 +0000
Subject: [PATCH 01/10] Updated mintlify pages
- Updated stream/premium-encoding.mdx
Mintlify-Source: dashboard-editor
---
stream/premium-encoding.mdx | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/stream/premium-encoding.mdx b/stream/premium-encoding.mdx
index 858b46c8..2d00cb5a 100644
--- a/stream/premium-encoding.mdx
+++ b/stream/premium-encoding.mdx
@@ -14,7 +14,7 @@ In most cases, videos become playable within **10–15 seconds**, regardless of
JIT automatically adapts to different resolutions, bitrates, devices, and network conditions. This ensures a smooth playback experience across a wide range of environments, helping improve viewer engagement and retention. When content is instantly accessible and optimized for each viewer, users are more likely to stay, interact, and return.
- Just-in-Time (JIT) encoding is only supported by the Bunny player. We cannot guarantee it will work with 3rd party or custom video players.
+ Just-in-Time (JIT) encoding is only supported by the Bunny player. We cannot guarantee it will work with 3rd party or custom video players.
#### Performance Considerations
@@ -61,6 +61,28 @@ If using FFmpeg to encode your video, enable fast-start MP4 output with:
ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4
```
+#### Resumable (TUS) upload FAQ
+
+Common questions about how authorization and resumability behave when uploading files (for example, large sources on slow connections) that will be processed by JIT encoding.
+
+
+
+ `AuthorizationExpire` is validated at the start of **every** `POST`, `HEAD`, and `PATCH` request — not only at upload creation. It is **not** rechecked during an active `PATCH`, so a chunk that is already streaming will not be interrupted mid-request if the signature expires while data is in flight.
+
+
+
+ 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, however, that a fresh 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.
+
+
+
+ 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`).
+
+
+
## Multiple output codec support
By leveraging modern codecs like VP9, x265 (HEVC), and AV1, Bunny Stream offers higher compression efficiency compared to older codecs like H.264 (x264). This means you can achieve excellent video quality at lower bandwidth usage, allowing for smoother streaming experiences even on slower internet connections. The reduced bitrate requirements not only enhance the viewing experience but also help in reducing streaming costs by lowering bandwidth consumption.
From ba2c17d3152c1f2bea98c8b04ea899eb0131e549 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Mon, 24 Aug 2026 14:54:49 +0000
Subject: [PATCH 02/10] Updated mintlify pages
- Updated stream/premium-encoding.mdx
Mintlify-Source: dashboard-editor
---
stream/premium-encoding.mdx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/stream/premium-encoding.mdx b/stream/premium-encoding.mdx
index 2d00cb5a..3ecd9e5e 100644
--- a/stream/premium-encoding.mdx
+++ b/stream/premium-encoding.mdx
@@ -67,17 +67,17 @@ Common questions about how authorization and resumability behave when uploading
- `AuthorizationExpire` is validated at the start of **every** `POST`, `HEAD`, and `PATCH` request — not only at upload creation. It is **not** rechecked during an active `PATCH`, so a chunk that is already streaming will not be interrupted mid-request if the signature expires while data is in flight.
+ `AuthorizationExpire` is validated at the start of **every** `POST`, `HEAD`, and `PATCH` request - not only at upload creation. It is **not** rechecked during an active `PATCH`, so a chunk that is already streaming will not be interrupted mid-request if the signature expires while data is in flight.
- 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.
+ 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, however, that a fresh 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.
- 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.
+ 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`).
From fadacfc48ce390bab35b90e5f7aa36d3b278cf05 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Mon, 24 Aug 2026 14:55:35 +0000
Subject: [PATCH 03/10] Updated mintlify pages
- Updated stream/premium-encoding.mdx
Mintlify-Source: dashboard-editor
---
stream/premium-encoding.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/stream/premium-encoding.mdx b/stream/premium-encoding.mdx
index 3ecd9e5e..8ad7ed17 100644
--- a/stream/premium-encoding.mdx
+++ b/stream/premium-encoding.mdx
@@ -79,7 +79,7 @@ Common questions about how authorization and resumability behave when uploading
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`).
+ Once it expires, requesting the upload returns `404 Not Found `(not `410`).
From 6164bb27a265ffaf331bc73f41cdf8f1160d20c9 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Mon, 24 Aug 2026 14:57:23 +0000
Subject: [PATCH 04/10] Updated mintlify pages
- Updated stream/premium-encoding.mdx
Mintlify-Source: dashboard-editor
---
stream/premium-encoding.mdx | 22 ----------------------
1 file changed, 22 deletions(-)
diff --git a/stream/premium-encoding.mdx b/stream/premium-encoding.mdx
index 8ad7ed17..02a8ac5c 100644
--- a/stream/premium-encoding.mdx
+++ b/stream/premium-encoding.mdx
@@ -61,28 +61,6 @@ If using FFmpeg to encode your video, enable fast-start MP4 output with:
ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4
```
-#### Resumable (TUS) upload FAQ
-
-Common questions about how authorization and resumability behave when uploading files (for example, large sources on slow connections) that will be processed by JIT encoding.
-
-
-
- `AuthorizationExpire` is validated at the start of **every** `POST`, `HEAD`, and `PATCH` request - not only at upload creation. It is **not** rechecked during an active `PATCH`, so a chunk that is already streaming will not be interrupted mid-request if the signature expires while data is in flight.
-
-
-
- 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, however, that a fresh 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.
-
-
-
- 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`).
-
-
-
## Multiple output codec support
By leveraging modern codecs like VP9, x265 (HEVC), and AV1, Bunny Stream offers higher compression efficiency compared to older codecs like H.264 (x264). This means you can achieve excellent video quality at lower bandwidth usage, allowing for smoother streaming experiences even on slower internet connections. The reduced bitrate requirements not only enhance the viewing experience but also help in reducing streaming costs by lowering bandwidth consumption.
From 259fc211e81dcce535563a83b4020cc8fd6f3f21 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Mon, 24 Aug 2026 14:57:59 +0000
Subject: [PATCH 05/10] Updated mintlify pages
- Updated stream/tus-resumable-uploads.mdx
Mintlify-Source: dashboard-editor
---
stream/tus-resumable-uploads.mdx | 49 ++++++++++++++++++++++----------
1 file changed, 34 insertions(+), 15 deletions(-)
diff --git a/stream/tus-resumable-uploads.mdx b/stream/tus-resumable-uploads.mdx
index 9a66d40a..04d7c0ac 100644
--- a/stream/tus-resumable-uploads.mdx
+++ b/stream/tus-resumable-uploads.mdx
@@ -25,23 +25,23 @@ This approach allows secure direct uploads from end-users without exposing your
To authenticate a TUS upload request, the following headers must be included:
-| Header | Description |
-| ------------------------ | --------------------------------------------------- |
-| `AuthorizationSignature` | SHA256 signature for request validation |
-| `AuthorizationExpire` | UNIX timestamp (in seconds) when the upload expires |
-| `LibraryId` | The ID of the video library |
-| `VideoId` | The GUID of the previously created video object |
+| Header | Description |
+| --- | --- |
+| `AuthorizationSignature` | SHA256 signature for request validation |
+| `AuthorizationExpire` | UNIX timestamp (in seconds) when the upload expires |
+| `LibraryId` | The ID of the video library |
+| `VideoId` | The GUID of the previously created video object |
## Video metadata parameters
The following metadata can be passed with the TUS upload:
-| Parameter | Required | Description |
-| --------------- | -------- | -------------------------------------------------------- |
-| `filetype` | Yes | The MIME type of the uploaded video (e.g., `video/mp4`) |
-| `title` | Yes | The title of the video |
-| `collection` | No | The GUID of the collection to upload to |
-| `thumbnailTime` | No | Time in milliseconds to extract the main video thumbnail |
+| Parameter | Required | Description |
+| --- | --- | --- |
+| `filetype` | Yes | The MIME type of the uploaded video (e.g., `video/mp4`) |
+| `title` | Yes | The title of the video |
+| `collection` | No | The GUID of the collection to upload to |
+| `thumbnailTime` | No | Time in milliseconds to extract the main video thumbnail |
## Generating the signature
@@ -76,7 +76,6 @@ const signature = crypto
.digest("hex");
```
-
```php PHP
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 TUS.
+
+
+
+ `AuthorizationExpire` is validated at the start of **every** `POST`, `HEAD`, and `PATCH` request - not only at upload creation. It is **not** rechecked during an active `PATCH`, so a chunk that is already streaming will not be interrupted mid-request if the signature expires while data is in flight.
+
+
+
+ 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, however, that a fresh 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.
+
+
+
+ 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`).
+
+
\ No newline at end of file
From 64a755373c635fb39154860377cba13ff31534b8 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Mon, 24 Aug 2026 14:58:39 +0000
Subject: [PATCH 06/10] Updated mintlify pages
- Updated stream/tus-resumable-uploads.mdx
Mintlify-Source: dashboard-editor
---
stream/tus-resumable-uploads.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/stream/tus-resumable-uploads.mdx b/stream/tus-resumable-uploads.mdx
index 04d7c0ac..64f1f9fe 100644
--- a/stream/tus-resumable-uploads.mdx
+++ b/stream/tus-resumable-uploads.mdx
@@ -455,7 +455,7 @@ Common questions about how authorization and resumability behave when uploading
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, however, that a fresh 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.
+ 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.
From 57a00a516bb2ce404bd069a803a026bf96972814 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Mon, 24 Aug 2026 15:00:29 +0000
Subject: [PATCH 07/10] Updated mintlify pages
- Updated stream/tus-resumable-uploads.mdx
Mintlify-Source: dashboard-editor
---
stream/tus-resumable-uploads.mdx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/stream/tus-resumable-uploads.mdx b/stream/tus-resumable-uploads.mdx
index 64f1f9fe..9380bfba 100644
--- a/stream/tus-resumable-uploads.mdx
+++ b/stream/tus-resumable-uploads.mdx
@@ -5,7 +5,7 @@ description: "Upload videos to Bunny Stream using the TUS protocol for resumable
The TUS resumable upload endpoint allows resumable and presigned uploads of video files. This enables end-users to upload directly to Bunny Stream and greatly improves reliability on poor networks and mobile connections.
-The endpoint uses the open [tus protocol](https://tus.io/) for resumable file uploads. Before a video can be uploaded through the TUS endpoint, a video object must be created through the [Create Video](/api-reference/stream) API call to obtain the video ID.
+The endpoint uses the open [TUS Protocol](https://tus.io/) for resumable file uploads. Before a video can be uploaded through the TUS endpoint, a video object must be created through the [Create Video](/api-reference/stream) API call to obtain the video ID.
## TUS endpoint
@@ -445,7 +445,7 @@ const upload = new tus.Upload(file, {
#### Resumable (TUS) upload FAQ
-Common questions about how authorization and resumability behave when uploading video with TUS.
+Common questions about how authorization and resumability behave when uploading video with the TUS resumable protocol.
@@ -455,7 +455,7 @@ Common questions about how authorization and resumability behave when uploading
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.
+ Note that a new 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.
From d333e56e4bd0e75649e57ccb0f112bebd1b25771 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Mon, 24 Aug 2026 15:01:36 +0000
Subject: [PATCH 08/10] Updated mintlify pages
- Updated stream/tus-resumable-uploads.mdx
Mintlify-Source: dashboard-editor
---
stream/tus-resumable-uploads.mdx | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/stream/tus-resumable-uploads.mdx b/stream/tus-resumable-uploads.mdx
index 9380bfba..cfeed851 100644
--- a/stream/tus-resumable-uploads.mdx
+++ b/stream/tus-resumable-uploads.mdx
@@ -5,9 +5,9 @@ description: "Upload videos to Bunny Stream using the TUS protocol for resumable
The TUS resumable upload endpoint allows resumable and presigned uploads of video files. This enables end-users to upload directly to Bunny Stream and greatly improves reliability on poor networks and mobile connections.
-The endpoint uses the open [TUS Protocol](https://tus.io/) for resumable file uploads. Before a video can be uploaded through the TUS endpoint, a video object must be created through the [Create Video](/api-reference/stream) API call to obtain the video ID.
+The endpoint uses the open [TUS Protocol](https://tus.io/) for resumable file uploads. Before a video can be uploaded through the TUS endpoint, a video object must be created through the [Create Video API](/api-reference/stream) call to obtain the video ID.
-## TUS endpoint
+## TUS upload API endpoint
```text
https://video.bunnycdn.com/tusupload
@@ -15,9 +15,9 @@ https://video.bunnycdn.com/tusupload
## How it works
-1. **Create a video object** using the [Create Video](/api-reference/stream) API to get a `videoId`.
-2. **Generate a presigned signature** on your server using SHA256.
-3. **Upload the file** from the client using a TUS client library with the presigned credentials.
+1. **Create a video object** using the [Create Video API](/api-reference/stream) to get a `videoId`.
+2. **Generate a pre-signed signature** on your server using SHA256.
+3. **Upload the file** from the client using a TUS client library with the pre-signed credentials.
This approach allows secure direct uploads from end-users without exposing your API key.
From 79ff7338258a4ad00f64e27de0d0e5a52c9147cd Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Mon, 24 Aug 2026 15:02:28 +0000
Subject: [PATCH 09/10] Updated mintlify pages
- Updated stream/tus-resumable-uploads.mdx
Mintlify-Source: dashboard-editor
---
stream/tus-resumable-uploads.mdx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/stream/tus-resumable-uploads.mdx b/stream/tus-resumable-uploads.mdx
index cfeed851..28202f2f 100644
--- a/stream/tus-resumable-uploads.mdx
+++ b/stream/tus-resumable-uploads.mdx
@@ -16,8 +16,8 @@ https://video.bunnycdn.com/tusupload
## How it works
1. **Create a video object** using the [Create Video API](/api-reference/stream) to get a `videoId`.
-2. **Generate a pre-signed signature** on your server using SHA256.
-3. **Upload the file** from the client using a TUS client library with the pre-signed credentials.
+2. **Generate a presigned signature** on your server using SHA256.
+3. **Upload the file** from the client using a TUS client library with the presigned credentials.
This approach allows secure direct uploads from end-users without exposing your API key.
From 9a6fd65445e28c390f96e126275d97e0888690f4 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Mon, 24 Aug 2026 15:03:40 +0000
Subject: [PATCH 10/10] Updated mintlify pages
- Updated stream/tus-resumable-uploads.mdx
Mintlify-Source: dashboard-editor
---
stream/tus-resumable-uploads.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/stream/tus-resumable-uploads.mdx b/stream/tus-resumable-uploads.mdx
index 28202f2f..fb2d61f2 100644
--- a/stream/tus-resumable-uploads.mdx
+++ b/stream/tus-resumable-uploads.mdx
@@ -455,7 +455,7 @@ Common questions about how authorization and resumability behave when uploading
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 new 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.
+ 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.