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

MethodPathDescription
POST/v1/videos/generationsSubmit a video generation job
GET/v1/videos/generations/:idGet job status
GET/v1/videos/generationsList 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 IDDescriptionBilling
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

ParameterTypeDefaultDescription
modelstringrequiredVideo model ID
promptstringrequiredText description of the video
durationnumber5Duration in seconds, 4–15
aspect_ratiostring"16:9""16:9", "9:16" or "1:1"
resolutionstring"720p""480p", "720p" or "1080p"
generate_audiobooleanfalseWhether to generate an audio track
reference_imagesarray[]Reference images (up to 9)
reference_videosarray[]Reference videos (up to 3)
reference_audiosarray[]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

StatusDescription
QueuedSubmitted, waiting to start
RunningGeneration in progress
CompletedDone — the video URL is available
FailedFailed — see the error_message field

Format compatibility

Besides the flat format recommended above, the API also accepts:

  • Seedance native format (a content array)
  • Google Vertex format (instances + parameters)
  • OpenAI video format (size such as "1920x1080", and seconds for 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_videos array has any elements (requests with video input fall into the cheaper tier).
  • Resolution: read from the resolution parameter — 480p and 720p share one tier, while 1080p is a separate, higher tier. If resolution is omitted, the 720p tier 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.