Skip to main content
Use the Video API to create asynchronous video generation tasks, poll their status, and download the completed output. Video endpoints use the same base URL and Bearer token authentication as the rest of the LLM7 API.

Discover video models

List the live model catalog:
Video-capable models have model_type: "video", pricing_mode: "second", modalities.output: ["video"], and capabilities.video_generation: true. Atlas-backed models also expose capabilities.atlascloud_video, capabilities.atlascloud_routes, and route-level per-second prices.
Use these fields to validate duration, resolution, request type, route choice, and reference-image limits before creating a task. Seedance model IDs include seedance-2.0-mini and seedance-2.0-fast; inspect /v1/models for the live set of supported durations, resolutions, and routes.

Create a text-to-video task

Send JSON to POST /videos when the request has no reference images.
For a faster route, use the fast model ID with the same request shape:

Request fields

Add Idempotency-Key on POST /videos when retrying task creation. Use the same header value and client_request_id for retries of the same logical task, and generate new values for a new task. The response contains the asynchronous task ID:

Create an image-to-video task

Use multipart/form-data when sending reference images. Send each reference image with the repeated field name input_reference.
For multiple references:
Reference image count must not exceed capabilities.max_reference_images, and each file must not exceed capabilities.max_reference_image_bytes. If capabilities.requires_reference_image is true, include at least one input_reference. Legacy models such as gemini-veo31 can continue to expose exact output sizes:

Poll task status

Poll GET /videos/{id} until the task reaches completed, failed, or timeout.
A completed task includes output URLs:
Possible statuses: Only the same authenticated user who created the task can poll it.

Download the completed video

After the task is completed, download from GET /videos/{id}/content.
Successful responses can return Content-Type: video/mp4 with binary MP4 bytes. For Atlas-backed tasks, the endpoint can also return an HTTP redirect to the output URL listed in outputs; use a redirect-aware client or download the URL directly. If the task is not completed yet, the endpoint returns an error.

Validation and billing

Validation is based on the selected model record from /v1/models:
  • duration or seconds must be listed in capabilities.supported_seconds.
  • resolution or size, if provided, must be listed in capabilities.supported_sizes.
  • For named resolutions, pass the exact supported value such as 720p; do not convert it to 1280x720 unless that exact size appears in the model metadata.
  • request_type must be supported by the selected model route.
  • Reference image count must not exceed capabilities.max_reference_images.
  • Each reference image must not exceed capabilities.max_reference_image_bytes.
  • If capabilities.requires_reference_image is true, at least one input_reference is required.
  • Use JSON only when there are no reference images.
  • Use multipart/form-data when reference images are present.
Video generation is billed asynchronously with a hold. On POST /v1/videos, the full cost is reserved:
Use pricing.route_prices_usd_per_second when present and select the route that matches the submitted model, request type, and other route dimensions. Fall back to seconds * pricing.price only when the model does not expose pricing.route_prices_usd_per_second. If the video completes successfully, the hold is consumed and the user is charged even if the client never polls the task. If the upstream task fails or task creation is not accepted, the hold is released.