Skip to content

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/v1

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.

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).

Terminal window
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:

Terminal window
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 }]
}
}
  • 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 a cursor.
  • Unknown fields are rejected, so a misspelled option fails loudly instead of being ignored.
  • Errors always have the same shape, with a stable code to 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.