# Pause, resume, and track large file transfers

> See the speed and time left for each Workspace Drive upload, pause and resume it in place, and resume interrupted downloads instead of starting over.

canonical: https://agentsky.dev/help/pause-and-resume-drive-uploads
source: https://agentsky.dev/help/pause-and-resume-drive-uploads.md
updated: 2026-10-22

---

**While a file uploads to Workspace Drive, its row shows progress and, when available, the speed and time left. Click Pause to stop it and the Play button to continue from where it stopped.**

## Watch an upload

Each sending file shows its percent and bytes sent so far. When an estimate is available, it also shows the speed and time left. For example: `6% · 25.8 MB of 400.0 MB · 22.4 MB/s · less than a minute left`.

The speed is smoothed so it doesn't jump around. After about five seconds without progress, the estimate resets to zero. The row hides the speed and time left until it can estimate them again.

## Pause and resume an upload

1. Open Library › Workspace Drive and start an upload.
2. Click **Pause** on the file's row. The row shows where it stopped, for example `Paused at 2% · 11.2 MB of 400.0 MB`.
3. Click the **Play** (Resume) button on the same row to continue.

On the same page, the upload continues from the bytes storage has already received. You don't need to pick the file again unless you reload the page.

## Good to know

- You can't pause a file once it is being saved at the end of the upload.
- If you reload the page, an upload that was in progress asks you to pick its file again before it can continue.
- **Cancel all** also removes files you paused on this page. Uploads restored after a reload stay paused if you have not picked their files again; you can cancel those rows individually.
- If saving fails at the end, the row shows the error and a **Retry** button.

## Resume a download (API)

`GET /api/v1/files/{file_id}/content` supports byte ranges, so an interrupted download can continue instead of starting from byte 0. For files streamed directly by the app, successful file responses include `Accept-Ranges: bytes` and an `ETag` with the file's SHA-256. These rules apply to those directly streamed files:

- Send one `Range: bytes=…` header to get `206 Partial Content` with only that part of the file. For example, `curl -C -` resumes a partial download.
- A range past the end of the file answers `416` with `Content-Range: bytes */<size>`.
- Several ranges in one request answer the whole file.
- Send `If-Range` with the ETag you started with. If the file has changed, you get the whole new file instead of a mix of two versions.

Files over 32 MiB redirect to a signed storage download URL instead. The storage URL supports ranges; use the headers returned by storage when resuming that download, rather than assuming the app's SHA-256 ETag or If-Range rules apply there.

For directly streamed files, the download link on agentsky.dev (`/api/files/{id}/content`) passes ranges through the same way, so seeking in a video reads only the part you jump to.

Related: [Store files in Workspace Drive](https://agentsky.dev/help/workspace-drive), [Use the AgentSky API](https://agentsky.dev/help/api-overview), [What is the Library?](https://agentsky.dev/help/library-overview).
