Video generation
Generate video with models such as Seedance 2.0, Veo and Sora. The API is asynchronous: submit a job, then poll for its status.
Endpoints
| Method | Path | Description |
|---|---|---|
POST | /v1/videos/generations | Submit a video generation job |
GET | /v1/videos/generations/:id | Get job status |
GET | /v1/videos/generations | List your jobs |
Submitting a job
Available models
For the current model IDs and live prices, refer to the pricing page and the GET /v1/models endpoint.
| Model ID | Description | Billing |
|---|---|---|
doubao-seedance-2-0-260128 | Seedance 2.0 (standard) | Per token (resolution × whether video input is present — two-dimensional pricing) |
doubao-seedance-2-0-fast-260128 | Seedance 2.0 Fast | Per token (resolution × whether video input is present — two-dimensional pricing) |
doubao-seedance-2.0 | Seedance 2.0 | Per token (resolution × whether video input is present — two-dimensional pricing) |
Text-to-video
POST /v1/videos/generations
{
"model": "doubao-seedance-2-0-260128",
"prompt": "A golden retriever running across a sunlit meadow, slow motion",
"duration": 5,
"aspect_ratio": "16:9",
"generate_audio": false
} Multimodal (image, video and audio references)
{
"model": "doubao-seedance-2-0-260128",
"prompt": "First-person shot for a fruit tea commercial...",
"reference_images": [
{"url": "https://example.com/tea1.jpg", "role": "reference_image"},
{"url": "https://example.com/tea2.jpg", "role": "reference_image"}
],
"reference_videos": [
{"url": "https://example.com/ref.mp4", "role": "reference_video"}
],
"reference_audios": [
{"url": "https://example.com/bgm.mp3", "role": "reference_audio"}
],
"duration": 11,
"aspect_ratio": "16:9",
"generate_audio": true
} Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
model | string | required | Video model ID |
prompt | string | required | Text description of the video |
duration | number | 5 | Duration in seconds, 4–15 |
aspect_ratio | string | "16:9" | "16:9", "9:16" or "1:1" |
resolution | string | "720p" | "480p", "720p" or "1080p" |
generate_audio | boolean | false | Whether to generate an audio track |
reference_images | array | [] | Reference images (up to 9) |
reference_videos | array | [] | Reference videos (up to 3) |
reference_audios | array | [] | Reference audio clips (up to 3) |
Submit response
{"data": {"id": "vid-xxxxx", "status": "Queued"}, "error": null} Polling job status
GET /v1/videos/generations/cgt-20260406-xxxxx {
"data": {
"id": "vid-xxxxx",
"model": "doubao-seedance-2-0-260128",
"status": "Completed",
"duration_seconds": 5,
"actual_cost": 5.0094,
"video_count": 1,
"videos": [{"url": "https://..."}]
}
} Job statuses
| Status | Description |
|---|---|
Queued | Submitted, waiting to start |
Running | Generation in progress |
Completed | Done — the video URL is available |
Failed | Failed — see the error_message field |
Format compatibility
Besides the flat format recommended above, the API also accepts:
- Seedance native format (a
contentarray) - Google Vertex format (
instances+parameters) - OpenAI video format (
sizesuch as"1920x1080", andsecondsfor duration)
The gateway detects the format and normalises it internally. All formats share one billing path: whichever format you submit, the resolution is resolved correctly and used for billing (falling back to the default tier when it cannot be determined), so the format never changes the price.
Billing
For live per-unit prices, refer to the pricing page and the GET /v1/models endpoint — this page only explains how billing works. When a job finishes, the amount actually charged is returned in the actual_cost field of the job detail.
Billed per token (identical for every model listed above)
Billed per token with two-dimensional pricing: the unit price depends on two dimensions, and the gateway selects the matching tier from your request parameters.
- Whether video input is present: determined by whether the
reference_videosarray has any elements (requests with video input fall into the cheaper tier). - Resolution: read from the
resolutionparameter —480pand720pshare one tier, while1080pis a separate, higher tier. Ifresolutionis omitted, the720ptier applies.
Total = tier unit price × tokens consumed. Each of the four combinations (with/without video input × 720p/1080p) has its own unit price, and unit prices differ between models; see the pricing page for the figures.
The usage export (an Excel workbook) shows the billing tier of every request together with that tier's list unit price, so you can verify "unit price × tokens = list amount" yourself. The daily and hourly summaries are also split into one row per billing tier, so they can be reconciled tier by tier.