When work becomes a job
A tool call answers within the time a client waits for a call, about 30 seconds. Work that cannot finish in that window is dispatched and reported as a job with its id, its place in the queue, and an estimate where past runs of the same shape agree.inspect_media on a file that has not been read yet answers within the window and reports that the read is preparing. import_media by URL answers in about 20 seconds and finishes each remaining download as its own job.
Following a job
get_jobswith ids long-polls those jobs for up towait_seconds, at most 25, inside the 30 seconds some clients allow a call. A cut call loses the answer, not the job.get_jobswith no ids lists every job still running in the workspace, whoever started it, with its prompt, model, the item it will become and who started it.- A finished generation or render carries the item’s id, its URL and a link a conversation can render. A finished language change carries
timeline_id. A job id also resolves as a ref for the item it made. - A workspace can register a webhook.
job.succeeded,job.failedandjob.cancelledare posted as they happen, for generation, render, dub and transcription jobs.
Cost
cost_credits on a job is what it has cost so far. A generation the model fails to produce is refunded. cancel_jobs returns the charge for work still waiting, keeps it for what a running job finished, and refunds a job at a model provider where nothing was used. Each id reports its outcome and whether it was refunded.

