AI Video MakerAI Video Maker API

Quickstart

Create a Seedance video task, track its status, and retrieve the finished video.

Use the AI Video Maker API to create videos from text, images, or reference media. Generation runs asynchronously. Use https://aivideomaker.dev as the base URL for every request.

  1. 01POST
    /v1/videos/generations
  2. 02READ
    task_id
  3. 03GET
    /v1/tasks/{task_id}
  4. 04DONE
    completed + video_url

1. Create an API key

Create a key in Settings → API keys. You can view the full secret only once. Copy it immediately and store it in a secret manager on your server.

2. Start a generation

cURL

curl https://aivideomaker.dev/v1/videos/generations \
  -H "Authorization: Bearer sk_sd_example" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0-fast",
    "prompt": "A paper boat crossing a rain-soaked neon street, cinematic camera movement",
    "duration": 5,
    "quality": "720p",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }'
Response
{
  "task_id": "vid_01JZK7R7KCYQ3T9F33A7K0J6XB",
  "status": "pending",
  "created_at": "2026-07-22T08:30:00.000Z"
}

JavaScript

const response = await fetch('https://aivideomaker.dev/v1/videos/generations', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer sk_sd_example',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'seedance-2.0-fast',
    prompt: 'A paper boat crossing a rain-soaked neon street',
    duration: 5,
    quality: '720p',
  }),
});

if (!response.ok) throw new Error(await response.text());
const task = await response.json();
console.log(task.task_id);

Python

import requests

response = requests.post(
    "https://aivideomaker.dev/v1/videos/generations",
    headers={"Authorization": "Bearer sk_sd_example"},
    json={
        "model": "seedance-2.0-fast",
        "prompt": "A paper boat crossing a rain-soaked neon street",
        "duration": 5,
        "quality": "720p",
    },
    timeout=30,
)
response.raise_for_status()
task_id = response.json()["task_id"]
print(task_id)

3. Poll the task

While the status is pending or processing, poll every 5 to 10 seconds and increase the interval with exponential backoff.

curl https://aivideomaker.dev/v1/tasks/vid_01JZK7R7KCYQ3T9F33A7K0J6XB \
  -H "Authorization: Bearer sk_sd_example"

When status changes to completed, read the video URL from output.video_url. Stop polling if the task changes to failed.

Completed task
{
  "task_id": "vid_01JZK7R7KCYQ3T9F33A7K0J6XB",
  "status": "completed",
  "model": "seedance-2.0-fast",
  "output": {
    "video_url": "https://media.aivideomaker.dev/videos/vid_01JZK7R7KCYQ3T9F33A7K0J6XB.mp4",
    "duration": 5,
    "quality": "720p"
  },
  "credits_used": 25,
  "error": null,
  "created_at": "2026-07-22T08:30:00.000Z",
  "completed_at": "2026-07-22T08:31:12.000Z"
}

4. Check available credits

curl https://aivideomaker.dev/v1/credits \
  -H "Authorization: Bearer sk_sd_example"

available shows how many credits a new generation can use. reserved shows the credits held for active video tasks. AI Video Maker deducts reserved credits only when a task completes successfully.