Skip to main content
Every job that completes in the v3 API returns an outputs[] array. Each item carries an asset_id you can pass straight into a later submit’s media inputs, so you can chain generations — for example, generate an image, then animate it into a video — without downloading and re-uploading the file in between.

Reference an output in the next submit

  1. Submit the first job and poll GET /v3/jobs/{job_id} until its status is COMPLETED. outputs[] is empty until then.
  2. Read outputs[0].asset_id (or whichever output you want to chain from) — it looks like asset_<uuid>.
  3. Pass it in the next submit as an asset reference. This excerpt shows the media field; the full Veo 3 request below includes its other required inputs:
asset_id is the only supported way to name a previous job’s output. If you pass a job_<uuid> in an asset field the API returns a 400 pointing you back at outputs[].asset_id.
Earlier drafts of the API described a workaround where you replaced the job_ prefix of a job id with asset_ to obtain the asset id. That derivation is no longer supported — read outputs[].asset_id instead.

Example: image, then video

Use the quickstart to submit an image job and wait for COMPLETED. Then set JOB_ID to the printed job ID before running the block below. This block does not submit another image job.
The returned job ID belongs to the video job. Wait for that job to complete before reading or downloading its outputs. Media field names vary by model; start_image is the field in Veo 3’s schema.

Output status

Each item in outputs[] carries a status:

Per-output errors

error is now published on every kind of output — image, video, and audio — as an error envelope. It is null on a COMPLETED output and populated on a FAILED output, so you can inspect the failure per-item when a job produces multiple outputs.

Measured frame rate on video outputs

Video outputs now report the real measured frame rate in fps. Older jobs whose output was probed before this change may still return fps: null — treat null as “unmeasured” rather than “no frame rate”.