Generate videos through a single API. Currently supports Volcengine Seedance and Alibaba Bailian model families.
Endpoint and authentication
| Item | Value |
|---|---|
| Generation endpoint | POST https://ai.win10030.com/video/v1/generations |
| Task query | GET https://ai.win10030.com/video/v1/tasks/:task_id |
| Authentication | Authorization: Bearer <API-Key> |
| Content-Type | application/json |
Video generation is fully asynchronous. Create a task first, then poll
/video/v1/tasks/:task_idfor results, or use the SDK's auto-polling.
Quick example
curl -X POST https://ai.win10030.com/video/v1/generations \
-H 'Authorization: Bearer sk-xxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{"model": "wan2.1-t2v-turbo", "prompt": "A golden retriever running on grass, cinematic shot", "resolution": "720p", "ratio": "16:9"}'
{ "task_id": "a1b2c3d4-e5f6-..." }
# Poll for results
curl https://ai.win10030.com/video/v1/tasks/a1b2c3d4-e5f6-... \
-H 'Authorization: Bearer sk-xxxxxxxx'
{
"task_id": "a1b2c3d4-e5f6-...",
"task_status": "success",
"data": [{ "url": "https://..." }]
}
SDK usage (recommended)
import { RouterBrain } from '@router-brain/sdk';
const rb = new RouterBrain('sk-your-api-key');
const result = await rb.video({
model: 'wan2.1-t2v-turbo',
prompt: 'Cinematic push-in shot of a night city street, neon lights, rain reflections',
resolution: '720p',
ratio: '16:9',
}).task({ pollInterval: 3000 });
console.log(result.task_status); // 'success'
console.log(result.data[0]?.url); // generated video URL
Provider comparison
| Provider | Example models | Billing | Text-to-video | Image-to-video | Video input | Audio input |
|---|---|---|---|---|---|---|
| seedance | doubao-seedance-* | modality_tokens | Yes | Yes | Yes | Yes |
| bailian | wan2.1-* / kling-* / cogvideox-* | duration | Yes | Yes | Yes | Yes |
Billing methods:
- duration: Charged per output second. Resolution selects the pricing tier.
- tokens: Standard token billing with input / cached / output token unit prices.
- modality_tokens: Output token billing that switches the unit price within the same resolution tier based on whether the input includes a video reference (Seedance).
Task status flow
pending -> running -> success
-> failed
-> cancelled
Query models and pricing
# List video models
curl "https://ai.win10030.com/video/v1/models?q=seedance" \
-H 'Authorization: Bearer sk-xxxxxxxx'
# Query endpoint pricing details for a specific model
curl "https://ai.win10030.com/video/v1/models/doubao-seedance-1-0-pro-250528/endpoints" \
-H 'Authorization: Bearer sk-xxxxxxxx'
Via SDK:
// List video models
const models = await rb.models('video', {
q: 'seedance',
billingMethods: ['modality_tokens'],
});
// Query endpoint pricing for a specific model
const detail = await rb.endpoints('video', 'doubao-seedance-1-0-pro-250528');
for (const ep of detail.endpoints) {
console.log(ep.billing_method, ep.pricing);
}
You can also browse pricing on the models catalog.
Next steps
Request parameters → provider-specific pages in the sidebar