Overview

Use your API key to generate videos via Seedance API. The API supports both text-to-video and image-to-video generation. Video generation is asynchronous - you submit a task and then query for results.

Endpoints

Generate Video

  • Method: POST
  • URL: https://api.seedanceapi.dev/v1/video/generate

Query Task

  • Method: POST
  • URL: https://api.seedanceapi.dev/v1/video/query

Authentication

Include your API key in the Authorization header:

Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Generate Video Request

{
  "prompt": "A cat wearing sunglasses walking on a beach with palm trees in the background",
  "model": "seedance-pro-5s",
  "image": "https://example.com/reference-image.jpg"
}

Parameters

ParameterTypeRequiredDescription
promptstringYes*Text description for the video
modelstringNoModel to use (default: seedance-pro-5s)
imagestringNo*Reference image URL for image-to-video

*Either prompt or image is required.

Supported Models

ModelResolutionDurationCredits
seedance-lite-5s720p5s12
seedance-lite-10s720p10s24
seedance-pro-5s1080p5s35
seedance-pro-10s1080p10s70
seedance-1.5-pro-5s1080p + Audio5s50
seedance-1.5-pro-10s1080p + Audio10s100

Generate Response

{
  "code": 0,
  "message": "ok",
  "data": {
    "task_id": "abc123-def456-789",
    "status": "pending",
    "model": "seedance-pro-5s",
    "scene": "text-to-video"
  }
}

Query Task Request

{
  "task_id": "abc123-def456-789"
}

Query Response

{
  "code": 0,
  "message": "ok",
  "data": {
    "task_id": "abc123-def456-789",
    "status": "success",
    "model": "seedance-pro-5s",
    "scene": "text-to-video",
    "videos": [
      {
        "url": "https://cdn.seedanceapi.dev/videos/abc123.mp4"
      }
    ],
    "error": null
  }
}

Task Status Values

StatusDescription
pendingTask is queued
processingVideo is being generated
successVideo generation completed
failedGeneration failed

Examples

cURL - Generate Video

curl -X POST "https://api.seedanceapi.dev/v1/video/generate" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A cat wearing sunglasses walking on a beach",
    "model": "seedance-pro-5s"
  }'

cURL - Query Task

curl -X POST "https://api.seedanceapi.dev/v1/video/query" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "task_id": "abc123-def456-789"
  }'

Node.js

async function generateVideo() {
  // Step 1: Submit video generation task
  const genRes = await fetch('https://api.seedanceapi.dev/v1/video/generate', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      prompt: 'A cat wearing sunglasses walking on a beach',
      model: 'seedance-pro-5s',
    }),
  });

  const genResult = await genRes.json();
  if (genResult.code !== 0) throw new Error(genResult.message);

  const taskId = genResult.data.task_id;
  console.log('Task submitted:', taskId);

  // Step 2: Poll for results
  while (true) {
    await new Promise((r) => setTimeout(r, 15000)); // Wait 15 seconds

    const queryRes = await fetch('https://api.seedanceapi.dev/v1/video/query', {
      method: 'POST',
      headers: {
        Authorization: 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ task_id: taskId }),
    });

    const queryResult = await queryRes.json();
    if (queryResult.code !== 0) throw new Error(queryResult.message);

    const { status, videos, error } = queryResult.data;

    if (status === 'success') {
      console.log('Video ready:', videos[0].url);
      return videos[0].url;
    }

    if (status === 'failed') {
      throw new Error(error || 'Video generation failed');
    }

    console.log('Status:', status);
  }
}

Python

import requests
import time


def generate_video():
    headers = {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json',
    }

    # Step 1: Submit video generation task
    gen_res = requests.post(
        'https://api.seedanceapi.dev/v1/video/generate',
        headers=headers,
        json={
            'prompt': 'A cat wearing sunglasses walking on a beach',
            'model': 'seedance-pro-5s',
        },
        timeout=60
    )
    gen_result = gen_res.json()
    if gen_result.get('code') != 0:
        raise Exception(gen_result.get('message'))

    task_id = gen_result['data']['task_id']
    print(f'Task submitted: {task_id}')

    # Step 2: Poll for results
    while True:
        time.sleep(15)  # Wait 15 seconds

        query_res = requests.post(
            'https://api.seedanceapi.dev/v1/video/query',
            headers=headers,
            json={'task_id': task_id},
            timeout=60
        )
        query_result = query_res.json()
        if query_result.get('code') != 0:
            raise Exception(query_result.get('message'))

        data = query_result['data']
        status = data['status']

        if status == 'success':
            video_url = data['videos'][0]['url']
            print(f'Video ready: {video_url}')
            return video_url

        if status == 'failed':
            raise Exception(data.get('error') or 'Video generation failed')

        print(f'Status: {status}')


if __name__ == '__main__':
    generate_video()

Error Responses

{
  "code": 400,
  "message": "Insufficient credits"
}

Common error codes:

  • 400: Invalid request parameters or insufficient credits
  • 401: Invalid API key
  • 403: No permission to access the task
  • 404: Task not found
  • 500: Server error