← All docs

POST /v1/videos/generations

Video generation (billed per second). Submit, then fetch the result from the dedicated polling endpoint.

Video generation is an async job. POST returns a job id immediately, and you poll GET /v1/videos/generations/{id} for the result.

Parameters

ParameterTypeRequiredDescription
modelstringYesA VIDEO category model ID (e.g. everyais/veo-3-1-generate-001)
promptstringYes1–4000 characters
durationintegerNoOutput length in seconds, 1–120, default 8. The range a given model actually supports may be narrower
pricingVariantstringNoResolution/audio variant key. Use the pricing.variants[].key value from GET /v1/models verbatim
userstringNoEnd-user identifier
extra_body.googleobjectNonegativePrompt (≤4000 characters) · seed · enhancePrompt

Request

{
  "model": "everyais/veo-3-1-generate-001",
  "prompt": "a timelapse of a blooming flower",
  "duration": 8,
  "pricingVariant": "1080p-with-audio"
}

Response (submitted)

{
  "id": "cm...",
  "object": "video.generation.job",
  "created": 1709884800,
  "model": "everyais/veo-3-1-generate-001",
  "status": "processing"
}

GET /v1/videos/generations/{id}

Poll job status and results. Put the id from the POST response in this path.

⚠️ You cannot look the job up through /v1/outputs/{requestId}. Video job ids and request ids live in separate spaces, so polling there always returns 404.

While a job is in progress the response carries a Retry-After: 5 header — poll at 5-second intervals.

There are four status values.

statusMeaning
processingSubmission, provider processing, or settlement in progress
completedDone — includes durationSeconds and data
failedFailed or timed out — includes error
cancelledCancelled
{
  "id": "cm...",
  "object": "video.generation.job",
  "created": 1709884800,
  "model": "everyais/veo-3-1-generate-001",
  "status": "completed",
  "durationSeconds": 8,
  "data": [{ "url": "https://..." }]
}

In rare cases where the outcome of the provider call could not be confirmed, processing comes back together with outcome_unknown: true, plus requires_manual_review: true when an operator needs to check it.

If the job does not exist, has expired (24 hours), or belongs to a different API key, you get a 404 job_not_found.

Billing

total cost = durationSeconds × per-second price. If you specify pricingVariant, that variant's unit price takes precedence. For example, everyais/veo-3-1-generate-001 offers the 720p-with-audio · 1080p-with-audio · 4k-with-audio variants. Check the exact keys and unit prices in the pricing field of the GET /v1/models response.