ByteDance · Video · API

Seedance API — ruble pricing and a 5-minute setup

Seedance API with ruble billing: text-to-video and image-to-video through one Zerocoder key. Per-second pricing, cURL / Python / Node samples, limits, refunds.

What Seedance does and where it's strong

Seedance is ByteDance's video generation family: you send a text prompt (or a text prompt plus a reference frame) and get back a short video clip. The family covers text-to-video and image-to-video, with several tiers from a lightweight eco model up to a pro-grade one, so you can match quality to the task instead of paying for headroom you don't need.

The models handle camera motion, lighting, and scene progression across a clip, which makes them a fit for product demos, social clips, and short narrative shots rather than just static image animation.

What Zerocoder adds

  • One API key that works across every Seedance model and every other model on the platform
  • A single ruble wallet — top up by Russian card or company invoice, no foreign card or VPN needed
  • Transparent per-model pricing in one place, with docs and an SDK-compatible interface so existing HTTP clients just work

How a request and response work

You start a job with a prompt, a model id, a duration in seconds, and an aspect ratio or size; for image-to-video you add a reference frame URL. The API charges you immediately and hands back a task id with status queued. You then poll that id — the status moves to processing and then to completed with a video URL, or to failed, in which case the charge is returned to your wallet automatically.

Available models and prices

Built from the live GET /v1/models price list: prices include our margin, in rubles and in dollars at the internal rate. Anything missing is temporarily not served by the gateway.

ModelUnit₽$Cost examplesEndpoint
seedance-2.0-fastrecommendedalso: seedance-stdper second22.1 ₽$0.245
5-second clip: 110 ₽ · $1.23
10-second clip: 221 ₽ · $2.45
/v1/videos
seedance-2.0recommendedper second28.6 ₽$0.317
5-second clip: 143 ₽ · $1.59
10-second clip: 286 ₽ · $3.17
/v1/videos
seedance-2.0-prorecommendedper second28.6 ₽$0.317
5-second clip: 143 ₽ · $1.59
10-second clip: 286 ₽ · $3.17
/v1/videos
seedance-2.5recommendedper second22.4 ₽$0.249
5-second clip: 112 ₽ · $1.25
10-second clip: 224 ₽ · $2.49
/v1/videos
seedance-2.0-minirecommendedper second19.1 ₽$0.212
5-second clip: 95.6 ₽ · $1.06
10-second clip: 191 ₽ · $2.13
/v1/videos
seedance-2.0-ecoper second13.6 ₽$0.152
5-second clip: 68.2 ₽ · $0.758
10-second clip: 136 ₽ · $1.52
/v1/videos
seedance-2.5-ecoper second24.3 ₽$0.270
5-second clip: 121 ₽ · $1.35
10-second clip: 243 ₽ · $2.70
/v1/videos

Cost calculator

Pick a model and a volume — the calculator uses the same formulas as API billing.

per call110 ₽ $1.23
per month · 505514 ₽ $61.27

Prices from GET /v1/models, internal exchange rate. Failed generations are not charged.

First request

One zc-sk-… key, the x-api-key header (or Authorization: Bearer), base URL https://zerocoder.com/api/v1. Samples are generated from the real route contracts.

1

Create a key

Account → API: top up the balance in rubles and create a zc-sk-… key

2

Send a request

Copy the sample below — the model id is already taken from the price list.

3

Check the charge

GET /v1/balance shows the balance; the call price comes back in the response.

model: seedance-std
# 1) start the render — price_rub is charged up front, refunded if the render fails
curl https://zerocoder.com/api/v1/videos \
  -H "x-api-key: zc-sk-…" -H "content-type: application/json" \
  -d '{"model": "seedance-std", "prompt": "A drone shot over a foggy pine forest at sunrise, slow dolly in", "seconds": 5, "aspect": "16:9"}'
# → {"id":"vid_…","object":"video","model":"seedance-std","status":"queued","seconds":5,"price_rub":…,"balance_rub":…,"poll":"/api/v1/videos?id=vid_…"}

# 2) poll until status is "completed" (url) or "failed" (refunded: true)
curl "https://zerocoder.com/api/v1/videos?id=vid_…" -H "x-api-key: zc-sk-…"
# image-to-video: add "image": "https://…/frame.jpg" to the body
import time, requests

API = "https://zerocoder.com/api/v1"
H = {"x-api-key": "zc-sk-…"}

job = requests.post(f"{API}/videos", headers=H, json={
    "model": "seedance-std",
    "prompt": "A drone shot over a foggy pine forest at sunrise, slow dolly in",
    "seconds": 5,            # 4–10
    "aspect": "16:9",        # or 9:16 / 1:1; "image": "https://…" for image-to-video
}).json()
print("charged", job["price_rub"], "RUB, balance", job["balance_rub"])

while True:
    st = requests.get(f"{API}/videos", headers=H, params={"id": job["id"]}).json()
    if st["status"] == "completed":
        print(st["url"]); break
    if st["status"] == "failed":
        print("failed, refunded:", st.get("refunded")); break
    time.sleep(4)
const API = "https://zerocoder.com/api/v1";
const H = { "x-api-key": "zc-sk-…", "content-type": "application/json" };

const job = await fetch(`${API}/videos`, {
  method: "POST", headers: H,
  body: JSON.stringify({ model: "seedance-std", prompt: "A drone shot over a foggy pine forest at sunrise, slow dolly in", seconds: 5, aspect: "16:9" }),
}).then((r) => r.json());
console.log("charged", job.price_rub, "RUB");

for (;;) {
  const st = await fetch(`${API}/videos?id=${job.id}`, { headers: H }).then((r) => r.json());
  if (st.status === "completed") { console.log(st.url); break; }
  if (st.status === "failed") { console.log("failed, refunded:", st.refunded); break; }
  await new Promise((r) => setTimeout(r, 4000));
}

Inputs, limits and refunds

  • Text → video and image → video (image: public https URL)
  • Duration seconds: 4–10 (default 5)
  • aspect 16:9 / 9:16 / 1:1 or an explicit size
  • Charged up front by price_rub, refunded if the render fails (refunded: true)
  • A job stuck in the queue over 30 minutes is refunded automatically
  • 30 requests per minute per key (all endpoints combined)

Error responses and refunds

# 401 {"type":"error","error":{"type":"authentication_error","message":"Invalid or revoked API key."}}
# 402 {"type":"error","error":{"type":"billing_error","message":"Not enough API balance: …"}}
# 429 {"type":"error","error":{"type":"rate_limit_error","message":"…"}}   ← 30 requests/min per key
# 400 {"type":"error","error":{"type":"invalid_request_error","message":"Unknown model \"…\". See GET /v1/models."}}
# 502 {"type":"error","error":{"type":"api_error","message":"… Charge refunded."}}   ← start failed → money back
# GET ?id → {"id":"vid_…","status":"failed","refunded":true}                        ← render failed → money back

Use cases

1

An e-commerce team turns product photos into short looping showcase clips for listing pages

2

A social media bot generates daily short video posts from a content calendar of prompts

3

A marketing agency batch-produces ad variants in different aspect ratios for A/B testing

4

An indie hacker builds a text-to-video SaaS tool with a simple prompt box for end users

5

An internal ops team auto-generates training or onboarding video snippets from scripts

6

A game studio prototypes cutscene or trailer shots before committing to full production

Prompting tips

  • Name the shot type and camera move explicitly: wide establishing shot, slow dolly in, handheld tracking shot
  • Set the light and time of day — golden hour, overcast noon, neon night — it anchors color and mood
  • Describe how the scene changes across the clip, not just the opening frame: what moves, what enters, what ends
  • For image-to-video, pick a clean, well-lit reference frame with the subject centered and in focus
  • Match duration and aspect ratio to the platform: vertical 9:16 for short-form, 16:9 for landscape players
  • Avoid asking for on-screen text, dense crowds, or close-up hands — these are the hardest details to render cleanly

Real results

Works by Zerocoder users made with this model: preview, resolution, duration and date. Nothing was generated specifically for this page.

55
10
17
ModelResolutionDurationDateLikesPrompt
Seedance480p10 s6 September 202655Ultra-photorealistic amateur smartphone video. The footage is filmed handheld by a passenger inside a second small aircraft flying parallel
Seedance480p6 s29 August 202617Universal Robotic Camera Prompt UNIVERSAL ROBOTIC CAMERA PROMPT Use the uploaded image as the exact first frame and exact visual reference.
Seedance720p4 s26 June 202610сделай короче отрывок снятый на айфон 7 как рыцарь в дали на горе вставляет свой меч в землю и там идет очень силный дождь и это ночь и в мо
Seedance720p5 s27 July 20260Оживи фото, чтобы мужская рука в золотых часах крутых нажимает кнопку с динамикой но плавно, типа брутально
Seedance720p5 s27 July 20260Оживи фотку, сохрани ракурс, и усиль динамику

FAQ

Does the Seedance API support image-to-video?

Yes. Pass a public https image URL in the image field plus a prompt describing the motion — the model animates the frame while keeping the composition and character.

Do Seedance clips have sound?

Yes, the model generates a soundtrack together with the picture; audio is not billed separately.

How do I get a Seedance API key?

Sign up at Zerocoder, open the API section of your account and create a zc-sk-… key. The same key unlocks Seedance and every other model in the catalogue — no separate Seedance key needed.

How is Seedance API billed?

Top up the API balance in rubles (Russian bank card or invoice for companies). Usage is charged per second or per clip of Seedance video at the price returned by GET /v1/models; Seedance prices already include our margin, there are no hidden fees.

What if Seedance fails to generate the clip?

If the provider fails a Seedance generation, the charge is refunded automatically and the response carries refunded: true. You only pay for a finished clip.

What are the Seedance API rate limits?

A shared limit of 30 requests per minute per key across all generation endpoints, Seedance included. Above that you get 429 rate_limit_error; for higher Seedance volumes contact us and we raise it individually.

Do I need a VPN or a foreign card for Seedance API?

No. Seedance requests go to zerocoder.com, payment is in rubles, and accounting documents are available on request.

Can I try Seedance without code?

Yes: Seedance is available in the Zerocoder studio and in the free tools catalogue — check the quality by hand, then wire up the Seedance API.

AI API for your product

70% cheaper than the official APIs — one key for GPT, Claude, Gemini, images and video