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.

Models and prices

The live GET /v1/models price list in rubles and dollars. Endpoint: /v1/videos

Model prices in rubles and dollars; where we are cheaper, the vendor's official price for the same unit is struck through
ModelPriceUnit
Seedance 2.0 Fastrecommendedseedance-2.0-fast · ByteDancealso: seedance-std
from 10.6 ₽$0.118per second of video480p — 10.6 ₽ · 720p — 22.1 ₽
Seedance 2.0seedance-2.0 · ByteDance
from 13.3 ₽$0.147per second of video480p — 13.3 ₽ · 720p — 28.6 ₽ · 1080p — 31.5 ₽ · 4k — 96 ₽
Seedance 2.0 Proseedance-2.0-pro · ByteDance
from 13.3 ₽$0.147per second of video480p — 13.3 ₽ · 720p — 28.6 ₽ · 1080p — 31.5 ₽
Seedance 2.5seedance-2.5 · ByteDance
from 22.4 ₽$0.249per second of video480p — 22.4 ₽ · 720p — 48.2 ₽ · 1080p — 76.8 ₽
Seedance 2.0 Miniseedance-2.0-mini · ByteDance
from 8.54 ₽$0.095per second of video480p — 8.54 ₽ · 720p — 19.1 ₽
Seedance 2.0 Ecoseedance-2.0-eco · ByteDance
from 13.6 ₽$0.152per second of video720p — 13.6 ₽ · 1080p — 33.9 ₽ · 4k — 69.1 ₽
Seedance 2.5 Ecoseedance-2.5-eco · ByteDance
from 24.3 ₽$0.270per second of video720p — 24.3 ₽ · 1080p — 41.9 ₽
Dollars at the internal rate 1 $ = 90 ₽; the Zerocoder price includes ruble billing and no-VPN access.

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.

  1. Get a keyin the API dashboard
  2. Top up the walletin rubles: card, SBP or invoice
  3. Make the callPOST /v1/videos, model seedance‑std
First request

Connect the Seedance API: a key, one POST and a status poll

POST /v1/videos starts the render and returns the job id and price_rub right away; GET /v1/videos?id=… returns the status and the clip URL. If the render fails, the money goes back to the balance automatically.

Base URL
https://zerocoder.com/api/v1

Key — in the x-api-key or Authorization: Bearer header

Model in the samples — seedance-std; any text‑to‑video or image‑to‑video model from the table works

import time, requests API = "https://zerocoder.com/api/v1"H = {"x-api-key": "zc-sk-…"} r = requests.post(f"{API}/videos", headers=H, json={    "model": "seedance-std",    "prompt": "Drone shot over a foggy forest at dawn",    "seconds": 5,      # 4–10    "aspect": "16:9",  # image-to-video: "image": "https://…"})r.raise_for_status()job = r.json()  # status "queued", price_rub charged st = {}while st.get("status") not in ("completed", "failed"):    time.sleep(4)    r = requests.get(f"{API}/videos", headers=H,                     params={"id": job["id"]})    st = r.json() if r.ok else {}  # 502 → poll againprint(st)  # "url", or "refunded": true on failure
const API = "https://zerocoder.com/api/v1";const H = {  "x-api-key": "zc-sk-…",  "content-type": "application/json",}; const res = await fetch(`${API}/videos`, {  method: "POST", headers: H,  body: JSON.stringify({    model: "seedance-std", seconds: 5, aspect: "16:9",    prompt: "Drone shot over a foggy forest at dawn",  }), // image-to-video: add image: "https://…"});const job = await res.json(); // "queued", price_rubif (!res.ok) throw new Error(job.error.message); const poll = `${API}/videos?id=${job.id}`;let st = {};while (st.status !== "completed" && st.status !== "failed") {  await new Promise((go) => setTimeout(go, 4000));  const r = await fetch(poll, { headers: H });  st = r.ok ? await r.json() : {}; // 502 → poll again}console.log(st); // url, or refunded: true
# 1) start the render: price_rub is charged up front,#    refunded if the render failscurl https://zerocoder.com/api/v1/videos \  -H "x-api-key: zc-sk-…" \  -H "content-type: application/json" \  -d '{"model": "seedance-std", "seconds": 5,       "aspect": "16:9",       "prompt": "Drone shot over a foggy forest at dawn"}'# → {"id":"…","object":"video","status":"queued",#    "seconds":5,"price_rub":…,"balance_rub":…,#    "poll":"/api/v1/videos?id=…"}# image-to-video: add "image": "https://…/frame.jpg"
# 2) poll every few seconds: "completed" or "failed"curl "https://zerocoder.com/api/v1/videos?id=…" \  -H "x-api-key: zc-sk-…"# rendering → "status": "queued" | "running" | …# done      → "status": "completed", "url": "https://…"# failed    → "status": "failed", "refunded": true# HTTP 502 "Status check failed" → just poll again;#   a render that never finishes is refunded

How to connect the Seedance API: first request in 5 minutes

From a key to production — six steps based on the real /api/v1 contracts. Each step links to the relevant docs section.

  1. 1

    Get a key in your account

    Sign up, open the API section of your account, top up the balance in rubles and create a zc-sk-… key. One key unlocks Seedance and every other model in the catalogue.

    Read more →
  2. 2

    Send the first request

    POST /v1/videos with model, prompt, seconds and aspect: the response carries the job id, status queued and price_rub — the amount is charged before the Seedance render starts.

    Read more →
  3. 3

    Poll the job status

    GET /v1/videos?id=… every few seconds until status is completed (url field) or failed (refunded: true — the money is already back on the balance). The file URL is temporary — download right away.

    Read more →
  4. 4

    Handle limits and errors

    30 requests per minute per key: on 429 wait and retry with a growing pause; 402 — top up the balance; 400 — check model against GET /v1/models. Failed generations are not charged, so retrying is safe.

    Read more →
  5. 5

    Watch the budget

    GET /v1/balance returns the balance and 30-day spend; every call's price comes back in the response — write it to your logs and set an alert threshold in your own monitoring.

    Read more →
  6. 6

    Ship to production

    Keep the key in server secrets, never in the frontend. For high Seedance volumes contact us — the limit is raised individually and companies can pay by invoice. Check the observed stability on the status page.

    Read more →

No code

Any tool that can make an HTTP request can call our API: one POST with the x-api-key header.
HTTP Requestn8n

HTTP Request node: POST to the /api/v1 endpoint, x-api-key header and a JSON body built from workflow fields. For video add a Wait node and a second HTTP Request on GET ?id= in a loop until completed.

HTTP → Make a requestMake

HTTP “Make a request” module: POST, Body type JSON, x-api-key header. The response is parsed automatically — the image url or the answer text flows into the next modules.

Webhooks by ZapierZapier

Webhooks by Zapier → Custom Request action: POST, Data — JSON with model and prompt, Headers — x-api-key. Response fields are available to the following Zap steps.

Apps ScriptGoogle Sheets

In Apps Script use UrlFetchApp.fetch with method post, contentType application/json and a payload from the cells: prompts in one column, results written to the next one.

any bot frameworkTelegram bot

A bot on aiogram, grammY or Telegraf calls the same HTTP API: user message → model request → reply in the chat. For video — poll the status and send the file from the finished URL.

OpenAI-compatible base URLPython / Node SDK

For text models the official OpenAI and Anthropic SDKs work with a swapped base URL and our key — your application code stays the same. Images and video are a plain HTTP call from any language.

For business

We'll help bring AI into your business

More than a key: we help wire Seedance and other models into your workflows — from audit to production, with invoice payment.

  • Process auditWe find where AI pays off in your workflows: support, sales, content, documents — and name specific scenarios and models.
  • Integration into CRM, website, Telegram, n8nWired through our API or ready no-code scenarios; one key and a shared balance for every model.
  • Ruble payment by invoiceCompanies get an invoice for bank transfer, accounting documents and a top-up of the API balance.
  • Support and limitsHelp with prompts and architecture, request limits raised individually for your load.

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 at the requested resolution (size / resolution), 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

Observed stability of the API and video generation

Numbers come from the public /status summary: the share of successful requests over a period for the whole API and for the category as a whole (the summary has no per-model breakdown), no SLA promises. Failed generations are not charged, so retrying is safe.

Developer APIoperational

—now (2 h window)
78.5%last 30 days
78.5%last 90 days

Video generationdegraded

—now (2 h window)
80%last 30 days
80%last 90 days

Refunds and charges

  • Charged up front by price_rub; a failed render is refunded automatically with refunded: true in the response
  • A job stuck in the queue over 30 minutes is refunded automatically
  • Status and file URL — in GET /v1/videos?id=

Tracking since Aug 6, 2026.

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

Real results

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

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

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

Ready-made prompts for Seedance

Copy the prompt and the parameters into the request body — the fields are named exactly as in the /api/v1 contract. Replace the angle-bracket placeholders with your material.

Product card in motion

Slow 360° turntable of a matte black wireless headphone set on a white studio backdrop, soft reflections, product commercial lighting, no text
seconds: 5aspect: 1:1

For marketplaces — square and no captions in frame.

Vertical hook for Reels and Shorts

Handheld close-up of iced coffee being poured over ice in a tall glass, condensation, morning window light, quick push-in, upbeat energy
seconds: 5aspect: 9:16

Animate a product photo (image-to-video)

Gentle camera orbit around the product, subtle fabric movement, keep the product shape, logo and colors exactly as in the reference
seconds: 5aspect: 16:9image: https://…/product.jpg

The image link must be a public https URL.

Cinematic B-roll

Aerial drone shot over a foggy pine forest at sunrise, slow dolly forward, volumetric light, cinematic color grading
seconds: 10aspect: 16:9

Abstract looping background

Abstract flowing liquid metal in deep green and gold, seamless loop, dark background, slow elegant motion
seconds: 5aspect: 16:9

Who the Seedance API is for

Industries where this kind of generation becomes part of the workflow rather than an experiment.

E-commerce & marketplacesProduct video cards from catalogue photos — hundreds of SKUs without a shoot, Seedance through one key.
Media & socialVertical clips for Reels, Shorts and TikTok — on a schedule from text ideas.
Agencies & productionPreviz, storyboards and B-roll for clients in hours instead of days.
EdTechIllustrative clips for lessons and concepts explained in motion.
Real estate & autoBring listing photos to life: fly-throughs, turns, atmosphere.
SaaS & appsSeedance video generation inside your product — one key and a shared balance.

FAQ

How much does the Seedance API cost in rubles?

Seedance is billed per second of finished video, and the per-second price depends on the resolution: every version's tiers are in the table above and in price_rub_by_resolution of GET /v1/models. A clip costs that price times its duration; without size or resolution it is billed as 1920x1080 — 1080p, else the nearest higher tier or the highest. The amount is charged at start and shown in price_rub.

How do I call the Seedance API from Python?

Plain requests is enough: POST to /v1/videos with the x-api-key header and a body of model, prompt, seconds and aspect, then poll GET /v1/videos with the id from the response until the status is completed. A ready-to-run Seedance sample is in the “First request” block above — no SDK required.

What are the Seedance API limits for duration and format?

The seconds parameter accepts 4 to 10 seconds (default 5), aspect is 16:9, 9:16 or 1:1, or pass an explicit size. The start frame for image-to-video is a public https URL. The shared key limit is 30 requests per minute across all endpoints; above that Seedance returns 429.

How do I pick a Seedance model id, and how do the versions differ?

Every available Seedance version is listed in the table and in GET /v1/models; the short alias seedance-std always points to the current standard version. Versions differ in the per-second price: use a cheaper row for drafts and bulk variations, and before going live run one prompt on two or three versions and compare the clips.

What happens if a Seedance generation fails — am I charged?

No. The cost of a Seedance clip is reserved at start, but if the provider returns an error or the job sits in the queue for more than 30 minutes, the amount goes back to your API balance automatically and the job status shows refunded: true. You only pay for clips you actually receive.

Can a company pay for the Seedance API by invoice?

Yes. Besides a Russian bank card, the API balance can be topped up by invoice for legal entities: request an invoice in the API account, and after the bank transfer the amount is credited to the balance while the same key keeps working with Seedance and every other model. Accounting documents are available on request.

Is there a free trial of the Seedance API?

There are no free API credits: the API wallet starts with a minimum first top-up and every Seedance clip is charged at the list price. You can judge the model's quality for free by hand — in the Zerocoder studio and in the Seedance tool from the catalogue — then move the winning prompt into an API request.

Does the Seedance API produce sound and image-to-video?

Yes: Seedance generates a soundtrack together with the picture at no extra charge, and image-to-video is enabled by the image field with a URL of the start frame — the model animates it while keeping the composition. The link to the finished mp4 arrives with the completed status; save the file right away.

AI API for your product

Ruble billing, no VPN, one key for every model