Response structure
Every completed generation includes these fields:Sync vs async
Images returnHTTP 200 with status: "completed" and the full response body immediately.
Videos return HTTP 202 with status: "pending" and only an id when you submit the generation. Poll GET /v2/videos/generations/{id} until the status changes to completed or failed. See Generate videos for the full flow.
The data array
Each item indata represents a generated file.
Image items:
Video items include additional fields:
Download URLs
Theurl in each data item is a signed download URL to the generated media.
url is valid for that same window and expires at deletes_at.
Read deletes_at rather than computing the deadline yourself, and download as soon as a generation completes. That keeps your delivery flow predictable.
Usage and billing
Theusage object contains billing details for the generation.
For spend across generations rather than a single one, use the daily costs endpoint in Billing. For the rates behind
unit_price, see the pricing field in Models.