New to Videas? This page explains, from scratch, how you get a file (usually a video) into the platform — and how to do it reliably even for large files. Once you understand the model, pick your path: the SDK (recommended) or the REST API.
What “uploading” means here
You upload a file into a workspace. Videas stores it and creates an asset (a video, audio, image or document) that you can then play, embed and manage through the API. Every upload is tied to your organization via your API key.
The same asset shows up in the Mediasbox media library, inside the folder you named: what your integration drops off, your client finds and files without writing a line of code.
Uploads are resumable and chunked
Videos are big, and networks are unreliable — so Videas doesn’t take the whole file in one shot. It uses the resumable TUS protocol, which works in two moves:
- Create an upload session — you announce the file (its name and total size). Videas replies with a URL to send the bytes to.
- Send the bytes in chunks — you transfer the file in pieces, one after another. If a chunk fails, you retry just that chunk instead of restarting.
You don’t send the whole file in a single request: each chunk must stay under the per-chunk limit (see below). Splitting a large file into chunks is the core idea that makes big uploads work.
Good news: the official SDKs do all of this for you — session creation, chunking, offsets, retries. You call one function. Only reach for the raw protocol if you can’t use an SDK.
Limits you should know
| Limit | Value | What it means |
|---|---|---|
| Per-chunk size | 50 MiB | The maximum size of a single transfer request. Larger files must be split into several chunks (the SDK uses 32 MiB by default). |
| Total file size | 10 GiB | The maximum size of one uploaded file. |
| Session lifetime | 24 hours | An upload session expires if not completed in time; start a fresh one after that. |
Exceeding the per-chunk limit returns an error like
Chunk too large: … exceeds maximum 52428800 bytes — that’s the signal to send
smaller chunks (the SDK never hits this).
After the upload: processing
As soon as the session is created you get an asset_uid — the id of the
asset being created — even before the bytes finish transferring. Videos are then
processed asynchronously (transcoding, thumbnails…), so the asset isn’t
immediately playable. Transcoding produces an adaptive-bitrate HLS stream served
over a CDN — that is what Video hosting covers,
and what you get back at playback time.
Poll the asset until it’s ready:
GET /api/external/v1/assets/{asset_uid}/ → { "status": "ready", … }
Statuses move from processing to ready (or error). Don’t try to play or
embed an asset until it reports ready.
Handling large files well
- Prefer the SDK. It streams the file in chunks so you never hold the whole thing in memory, tracks progress, and surfaces clear errors.
- Show progress. For multi-hundred-MB or multi-GB files, give users a progress bar (the SDKs expose a progress callback).
- Don’t buffer huge files in memory if you can avoid it — read/stream from disk. (The raw API lets you send any chunk slice; the SDK handles this.)
- Expect to resume, not restart. With chunks, a dropped connection only costs the current chunk, not the whole file.
Choose your path
- Upload with the SDK — one function call, chunking and progress built in. Start here.
- Upload with the REST API — drive the TUS protocol yourself over plain HTTP, in any language.