Quickstart
Create a video, upload the file, wait for processing, and play it back — the whole control-plane loop in a few calls. Grab an API key from the dashboard under API Keys first.
1. Set your key
Every call carries a bearer credential. Export it once:
export OLLANODE_API_KEY="vbk_..." 2. Create a video
Register the video first — this returns a vid_… id (and a one-time upload_token for resumable uploads). playback_policy defaults to signed; pass "public" for a shareable, token-free video.
curl -X POST https://api.ollanode.com/v1/videos \
-H "Authorization: Bearer $OLLANODE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"My first video","playback_policy":"signed"}'
# -> { "id": "vid_7Qk3...", "status": "created", "upload_token": "..." } 3. Upload the file
Mint a presigned PUT URL and upload the bytes directly to object storage (they never pass through the API). For large files use multipart or resumable TUS instead.
# 1) mint a presigned PUT URL
curl -X POST https://api.ollanode.com/v1/videos/vid_7Qk3.../upload-url \
-H "Authorization: Bearer $OLLANODE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content_type":"video/mp4"}'
# -> { "url": "https://...presigned...", "source_key": "...", "expires_in": 3600 }
# 2) upload the file straight to that URL
curl -X PUT --upload-file ./movie.mp4 -H "Content-Type: video/mp4" "<url from above>" 4. Finalize the upload
Commit the source and kick off the pipeline. (Multipart uploads start the pipeline on complete, so they skip this step.)
curl -X POST https://api.ollanode.com/v1/videos/vid_7Qk3.../upload-complete \
-H "Authorization: Bearer $OLLANODE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"size_bytes": 52428800}'
# -> { "id": "vid_7Qk3...", "status": "uploaded" } 5. Poll until ready
Processing runs asynchronously through the VOD pipeline (validate → transcode → HLS → thumbnails → transcript → …). Poll the cheap status endpoint for live progress.
curl https://api.ollanode.com/v1/videos/vid_7Qk3.../status \
-H "Authorization: Bearer $OLLANODE_API_KEY"
# -> { "id": "vid_7Qk3...", "status": "processing", "progress": 63 }
# poll until status == "ready" 6. Get a playback URL
Once ready, ask for a playback URL. For a signed video this mints a short-lived HMAC token and appends it to the private-origin HLS manifest.
curl https://api.ollanode.com/v1/videos/vid_7Qk3.../playback \
-H "Authorization: Bearer $OLLANODE_API_KEY"
# -> { "master_url": ".../manifest?token=...", "token": "...", "policy": "signed",
# "expires_at": "...", "poster_url": "...", "subtitles": [] } 7. Embed the player
Drop the hosted Vidstack player into any page — quality selector, storyboard scrubbing, chapters and captions are pre-wired.
<iframe
src="https://<playback-host>/embed/vid_7Qk3...?token=<token>"
allow="autoplay; fullscreen"
style="border:0;width:100%;aspect-ratio:16/9"></iframe> Shortcut: pull-from-URL
Already have the file on a public URL? Skip steps 3–4 entirely — pass source_url on create and the platform fetches and processes it for you.
curl -X POST https://api.ollanode.com/v1/videos \
-H "Authorization: Bearer $OLLANODE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Imported","source_url":"https://cdn.example.com/master.mp4"}'