Introduction
Iomza turns a video into everything you need to publish it: adaptive streaming (HLS and DASH), MP4 files, an MP3, posters and storyboards for the seek bar. You send the video, or tell us where it is; we hand back URLs.
The API is JSON over HTTPS, with snake_case fields:
https://api.iomza.com/v1Authentication
Section titled “Authentication”Every request carries an API key in the Authorization header:
Authorization: Bearer iz_live_...Create keys in the dashboard (API keys). A key acts on behalf of its organization: it sees that organization’s uploads and jobs, and nothing else. Keep it on your server; anyone holding it can create jobs billed to you. Revoking it in the dashboard stops it at once.
Your first job
Section titled “Your first job”1. Upload the video. Ask for an upload, then PUT the file to the URL you get back (files over 100 MB go in parts: see Upload a video).
curl https://api.iomza.com/v1/uploads \ -H "Authorization: Bearer $IOMZA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "file_name": "video.mp4", "content_type": "video/mp4", "size": 48213775 }'# → { "id": "0199a0e0-…", "mode": "single", "url": "https://…", "headers": { … }, … }
curl -X PUT "$UPLOAD_URL" -H "Content-Type: video/mp4" --data-binary @video.mp4
curl -X POST https://api.iomza.com/v1/uploads/$UPLOAD_ID/complete \ -H "Authorization: Bearer $IOMZA_API_KEY"You can also skip the upload and give the video’s URL when you create the job.
2. Create the job, saying what you want out of it:
curl https://api.iomza.com/v1/jobs \ -H "Authorization: Bearer $IOMZA_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "input": { "upload_id": "'$UPLOAD_ID'" }, "outputs": { "streaming": { "variants": ["1080p", "720p", "480p"] }, "posters": [{ "at": 5 }] } }'3. Wait for it to finish: poll GET /v1/jobs/{id}, or better, receive the job.succeeded webhook. The finished job lists every output’s URL:
{ "id": "0199a0e1-…", "status": "succeeded", "outputs": { "streaming": { "hls_url": "https://…/master.m3u8", "dash_url": "https://…/manifest.mpd", … }, "posters": [{ "url": "https://…/poster-0.jpg", "size_bytes": 84512 }] }}Conventions
Section titled “Conventions”- Ids are opaque strings. Store them as text; don’t parse them.
- Times are ISO 8601 in UTC (
2026-10-30T18:04:11.000Z); durations are seconds; sizes are bytes; bitrates are bits per second. - Lists come as
{ "object": "list", "data": [...] }; long ones are paginated with acursor. - Unknown fields are rejected, so a misspelled option fails loudly instead of being ignored.
- Errors always have the same shape, with a stable
codeto branch on: see Errors.
The API reference lists every route, field, limit and default. It is generated from the API’s own code, so it is always exact.