AI Video Generator API
Call Seedance video models from your own backend with the Yovid API. Send a prompt, poll the task, download the MP4, and pay per clip in credits.
The Yovid API puts the Seedance model family, from Seedance 1.0 Pro Fast up to Seedance 2.5, behind three HTTP endpoints. You post a JSON body with a prompt and, if you like, links to images, videos or audio. The API hands back a task ID at once, renders in the background, and gives you a stored MP4 when it is done. Every endpoint sits under https://yovid.ai/v1 and authenticates with a Bearer key.
- 01POST
/v1/videos/generations - 02READ
task_id - 03GET
/v1/tasks/{task_id} - 04DONE
completed + video_url
Pricing: what a clip costs
There is no separate API subscription and no per-call fee. API tasks spend the same credits as the yovid.ai web app, from the same balance, so any Yovid plan or credit pack works for the Seedance API.
The price of one clip comes from a few inputs:
- Model. Every model has its own per-second credit rate. The Seedance 2.0 family and 2.5 cost more per second than Seedance 1.0 Pro Fast and 1.5 Pro.
- Resolution. Each step up, from 480p to 720p or from 720p to 1080p, about doubles the per-second rate.
- Length. The rate is multiplied by the output duration. If you leave out
duration, the task is priced as 5 seconds. - Plan. Your subscription is applied as well, so the same request can cost a different number of credits on Lite, Pro or Premium.
- Options. On Seedance 2.5,
content_filter: falseadds 10%.
You never have to work the number out yourself. As soon as a task is accepted, GET /v1/tasks/{task_id} reports its exact price in credits_used. Those credits are put on hold while the video renders, deducted when it completes, and released if it fails. If your balance is too low, the create call returns 402 and the message says how many credits the request needed. Plan and credit pack prices are on the pricing page.
Step 1: get a key
In Settings → API keys, create a key. The secret starts with sk_sd_ and appears only once, so copy it into your server's secret store before you close the dialog. Authentication covers storage, rotation and limits.
Step 2: submit a video
cURL
curl https://yovid.ai/v1/videos/generations \
-H "Authorization: Bearer sk_sd_example" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-fast",
"prompt": "Morning fog lifting off a mountain lake, slow aerial glide over pine trees",
"duration": 5,
"quality": "720p",
"aspect_ratio": "16:9",
"generate_audio": true
}'{
"task_id": "Vq3x8LmZ2tR9bK_wP0sYd",
"status": "pending",
"created_at": "2026-10-20T09:12:04.000Z"
}JavaScript
const res = await fetch('https://yovid.ai/v1/videos/generations', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.YOVID_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'seedance-2.0-fast',
prompt: 'Morning fog lifting off a mountain lake, slow aerial glide',
duration: 5,
quality: '720p',
}),
});
if (!res.ok) throw new Error(`Yovid API ${res.status}: ${await res.text()}`);
const { task_id } = await res.json();Python
import os
import requests
res = requests.post(
"https://yovid.ai/v1/videos/generations",
headers={"Authorization": f"Bearer {os.environ['YOVID_API_KEY']}"},
json={
"model": "seedance-2.0-fast",
"prompt": "Morning fog lifting off a mountain lake, slow aerial glide",
"duration": 5,
"quality": "720p",
},
timeout=30,
)
res.raise_for_status()
task_id = res.json()["task_id"]A 200 only means the task was accepted and its credits are on hold. The video is not ready yet, so keep the task_id. Treat it as an opaque string: store it as is and do not parse it.
Step 3: poll until it finishes
Call GET /v1/tasks/{task_id}. A new task reads pending while it is queued, processing while the video renders and is saved, and ends as completed or failed. Polling every 5 to 10 seconds is plenty; stretch the gap for long or high-resolution clips.
curl https://yovid.ai/v1/tasks/Vq3x8LmZ2tR9bK_wP0sYd \
-H "Authorization: Bearer sk_sd_example"{
"task_id": "Vq3x8LmZ2tR9bK_wP0sYd",
"status": "completed",
"model": "seedance-2.0-fast",
"output": {
"video_url": "https://media.yovid.ai/videos/video_Vq3x8LmZ2tR9bK_wP0sYd_1792487609000.mp4",
"duration": 5,
"quality": "720p"
},
"credits_used": 17,
"error": null,
"created_at": "2026-10-20T09:12:04.000Z",
"completed_at": "2026-10-20T09:13:31.000Z"
}output.video_url points at a copy Yovid keeps in its own storage, so the link stays valid after the task is over. If the status is failed, output is null, error explains why in plain words, and the credits on hold go back to your available balance.
Step 4: check your balance
curl https://yovid.ai/v1/credits \
-H "Authorization: Bearer sk_sd_example"{ "total": 1200, "reserved": 17, "available": 1183 }reserved covers every video still in progress on your account, including ones started in the yovid.ai web app, so available is what your next API task can really spend.
Where to go next
- Models and inputs: model IDs, input limits, durations, resolutions and plan access.
- Errors and retries: every status and error code, and which ones are safe to retry.
- The API reference pages describe each field of the three endpoints.