Skip to main content
Seedance 2.0 (ByteDance) is a multimodal video generation model. It supports four input types — text-to-video, image-to-video, first-last frame, and reference-video — and the output includes synced audio by default. RuAPI exposes an OpenAI-compatible async video API: submit a task → poll status → download the video. Billed in USDT, no foreign card required.
Audio is on by default — Seedance 2.0 videos come with a synced audio track (dialogue / ambient / SFX), no extra parameters needed.
Generated videos are kept for 7 days only. Download and save them right after generation; the link stops working once it expires.

Available models

For exact prices, see the pricing page (video is billed per token).

Endpoint & auth

  • Base URL: https://www.ruapi.ai/v1
  • Auth: header Authorization: Bearer sk-YOUR_KEY (create one in the console under “Tokens”)
Generation is async, in three steps:
1

Submit a task

POST /v1/videos → returns a task id
2

Poll the status

GET /v1/videos/{id} → until status becomes completed
3

Download the video

GET /v1/videos/{id}/content → get the MP4

Step 1. Submit a task (text-to-video)

Response (id is the task number, used in the next two steps):

Step 2. Poll the status

Query the GET /v1/videos/{id} route about every 5 seconds. status goes through queued → in_progress → completed.
Once complete (metadata.url is the download link):

Step 3. Download the video

Full example: the whole flow in one script

Copy-paste and run, replacing sk-YOUR_KEY with your own key:
Python

Parameters

Top-level fields: Fields inside metadata:
Higher resolution and longer duration use more tokens and cost more. If unsure, start with 480p / 5 seconds, then tune.

The four input modes

input_type usually doesn’t need to be set — it’s inferred from the number of images/videos; you can also set it explicitly via metadata.input_type.
Images / videos must be publicly reachable URLs (the upstream fetches them); images support JPG / PNG / WebP, videos support MP4. base64 inline is not supported (an oversized request body will fail).
Below, each mode shows only step 1 “Submit”; steps 2 (poll) and 3 (download) are identical for all modes.

Mode 1. Text-to-video

Just a text prompt — generated entirely from the description.

Mode 2. Image-to-video (1 image)

Put 1 image URL in metadata.images; it’s used as the basis to animate. Describe the motion / camera in prompt.

Mode 3. First-last frame (2 images)

Put 2 images in metadata.images: the 1st = start frame, the 2nd = end frame. It generates a smooth transition from the first to the second.

Mode 4. Reference-video (1 video)

Put 1 short video URL in metadata.videos; the model reinterprets it while keeping the subject’s motion (e.g. restyle or change the scene).
Reference-video is picky about input: use a short clip that is ≤ 15 seconds with a clear subject (e.g. a person). Cartoons, clips without an obvious subject, or overly long videos often fail. It’s best if the reference’s aspect ratio matches your target ratio (e.g. a vertical source → 9:16).

Advanced: multiple images / videos

images and videos are arrays — you can pass several references at once (both verified):
  • Multiple images: put 3 or more images in images (officially up to 9). The model combines subject / scene / style across them. With 3+ images, input_type is auto-detected as reference.
  • Multiple videos: put 2 or more clips in videos (officially up to 3, total duration ≤ 15 seconds).
Same for videos: replace images with videos and pass several short clips (each ideally ≤ 7 seconds with a clear subject, ≤ 15 seconds total).

Task statuses

Billing

Video is billed per token (resolution × duration). A pre-charge is held on submit, then recalculated by actual usage on completion — the difference is refunded. The final charge is what actually got deducted. See the pricing page.

FAQ

Check two things: is the model name correct (doubao-seedance-2.0-fast), and is the address https://www.ruapi.ai/v1/videos (with /v1).
That’s normal. Generation usually takes 1–3 minutes; keep polling and don’t set the interval too short.
It’s likely been more than 7 days and the upstream link expired. Download right after generation.
This mode is picky about input. Make sure the reference video is ≤ 15 seconds, has a clear subject, and is a publicly reachable MP4. Cartoons or clips without an obvious subject often fail.
Use the plural GET /v1/videos/{id}. It’s the OpenAI-compatible format, and metadata.url in the response is directly the download link.

Next