The shape of a job
Every job is atype plus the inputs and params that type expects:
type picks the operation, inputs maps names to source URLs, and params carries the options for that type. POST it to /jobs and you get back an id and a waiting status. Each job type documents its own inputs and params.
The lifecycle
A job moves through six statuses. Three are terminal.| Status | What it means |
|---|---|
waiting | Saved and queued. The submit gate passed: auth, plan and rate limits, a balance check, and schema validation. |
dispatched | Sent to a runner with presigned URLs for download and upload. |
running | The runner is downloading inputs, running the work, and uploading the result. |
complete | Finished. The output is ready. |
failed | Errored. Read error.code and error.message. |
cancelled | Stopped before it finished. |
error.code from the error catalogue. A job that runs past its type’s time limit fails with RUNNER_TIMEOUT and is not charged.
The output
Acomplete job carries one output. The shape is the same for every type, so you never branch on the job type to find the result.
The computed answer for jobs that return one, such as a probe result or a transcript.
null for jobs that only write files.The headline result you play or download: a single file, or a stream manifest (
.m3u8 / .mpd). null for data-only jobs and pure file sets. Always one of files.Every file the job produced. One entry for a single output, the manifest plus segments for a stream, every member for a set.
[] for data-only jobs.Unix ms when the URLs expire. Re-fetch the job with
GET /jobs/{id} to mint fresh ones.The File type
Each entry infile and files is the same shape:
url is a signed link that expires at output.expiresAt. path is the filename the job wrote. type is an open enum (video, image, audio, captions, playlist, data, other), so tolerate values you do not recognize. size is bytes, and meta carries probed format, width, height, and durationMs when known.
Four patterns, one shape
Which fields are populated depends on what the job produced.- Single file
- Stream
- Set
- Data only
The common case for transform jobs.
file is the output, files lists it, data is null.Reading it
The read path is the same every time. No job-type discriminator.output.file is always one of output.files (or null), expiresAt is set whenever files is non-empty, and a complete job always has output.data or output.files. It never returns nothing.
Polling or webhooks
PollGET /jobs/{id} every second or two until the status is terminal, or skip polling entirely: register a webhook and Rendobar pushes job.completed to your server the moment the job lands.
See also
- Webhooks: push status changes instead of polling
- Credits and billing: how the terminal debit works
- Error codes: every
error.codea failed job returns - FFmpeg: a job type end to end