Job structure
A Job is the unit of work you submit to AVFlow.
Request body
Section titled “Request body”{ "name": "room-recording-001", "metadata": { "customerId": "acme-42" }, "sources": [], "nodes": [], "sinks": [], "policies": { "maxDurationSec": 7200, "idleTimeoutSec": 60 }}Fields
Section titled “Fields”| Field | Type | Required | Description |
|---|---|---|---|
name | string | No | Human-readable name, max 128 characters. Used in API paths (/v1/jobs/:name). |
metadata | map | No | Opaque key/value pairs for your own bookkeeping (not interpreted by AVFlow). |
sources | array | Yes | 1–5 sources. |
nodes | array | No | Processing nodes (mixers, ASR, etc.). May be empty. |
sinks | array | Yes | 1–3 sinks. |
policies | object | No | Runtime limits. See Policies. |
Response fields
Section titled “Response fields”The server adds read-only fields:
| Field | Description |
|---|---|
id | Server-generated job ID (job_…) |
status | pending, starting, running, stopping, completed, or failed |
createdAt / updatedAt | RFC 3339 timestamps |
error | Job-level error, if any |
componentStatus | Per-component status and error |
usage | Present on running jobs only — cumulative per-component metrics (see Manage jobs) |
Component shape
Section titled “Component shape”Sources, nodes, and sinks share:
{ "name": "my_src", "type": "livekit", "config": { } }Nodes and sinks also require inputs — an array of upstream component names. See Wiring & DAG.
Limits
Section titled “Limits”| Resource | Limit |
|---|---|
| Sources per job | 5 |
| Sinks per job | 3 |
video_mixer inputs | 16 |