Generate videos through a single API. Currently supports Volcengine Seedance and Alibaba Bailian model families.

Endpoint and authentication

ItemValue
Generation endpointPOST https://ai.win10030.com/video/v1/generations
Task queryGET https://ai.win10030.com/video/v1/tasks/:task_id
AuthenticationAuthorization: Bearer <API-Key>
Content-Typeapplication/json

Video generation is fully asynchronous. Create a task first, then poll /video/v1/tasks/:task_id for 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

ProviderExample modelsBillingText-to-videoImage-to-videoVideo inputAudio input
seedancedoubao-seedance-*modality_tokensYesYesYesYes
bailianwan2.1-* / kling-* / cogvideox-*durationYesYesYesYes

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