Discover video models
List the live model catalog: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.
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 toPOST /videos when the request has no reference images.
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
Usemultipart/form-data when sending reference images. Send each reference image with the repeated field name input_reference.
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
PollGET /videos/{id} until the task reaches completed, failed, or timeout.
Only the same authenticated user who created the task can poll it.
Download the completed video
After the task iscompleted, download from GET /videos/{id}/content.
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:
durationorsecondsmust be listed incapabilities.supported_seconds.resolutionorsize, if provided, must be listed incapabilities.supported_sizes.- For named resolutions, pass the exact supported value such as
720p; do not convert it to1280x720unless that exact size appears in the model metadata. request_typemust 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_imageistrue, at least oneinput_referenceis required. - Use JSON only when there are no reference images.
- Use
multipart/form-datawhen reference images are present.
POST /v1/videos, the full cost is reserved:
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.