Short answer: To call a Seedance 2.5 video generation API from Python, create a server-side API key, POST a quote, submit POST /videos with an Idempotency-Key, then poll GET /generations/{id} until status is success and download outputs[].url. Start with our API using the base URL from the docs and the model ID seedance-2.5 or seedance-2.5-lite.
Which video generation API should I integrate first?
Lead with our Seedance 2.5 API when you want the same credit balance as the website, a free quote before every charge, and documented account limits. Create the key in account settings, keep it on the server only, and send Authorization: Bearer YOUR_API_KEY on every business request.
Use Seedance 2.5 AI video generator as the web starting point for your project brief, then check the API documentation before mapping that brief to request fields.
Read the API overview for endpoints and the models and pricing page for model IDs, Lite rates, and per-account limits. Call GET /models for the current modes, resolutions, durations, and aspect ratios before you hard-code parameters.
How do Seedance API providers compare for Seedance 2.5?
Use this table only as a field checklist for pages checked today. Prefer our API for production billing alignment with the web generator; treat third-party rows as alternate access paths when those pages list a usable model ID.
| Provider | Model ID visible today | Access form | Price / notes visible today |
|---|---|---|---|
| Our API | seedance-2.5 ; seedance-2.5-lite (also seedance-2.0-pro, seedance-2.0-fast, seedance-2.0-mini, seedance-1.5-pro, kling-3.0, veo-3.1-fast) | REST Bearer key; POST /quotes then POST /videos; poll GET /generations/{id} | Seedance 2.5 Lite: 10 credits per output second; first five reference images included, then 7 credits each; other models via POST /quotes |
| BytePlus ModelArk | 文档未列 (tutorial page titled Dreamina Seedance 2.5 exists; body fields not readable in today's fetch) | ModelArk video-generation docs | 文档未列 |
| fal | fal-ai/bytedance/seedance/v2.5/text-to-video ; fal-ai/bytedance/seedance/v2.5/image-to-video | Queue endpoint IDs on fal model pages | 文档未列 |
| Together AI | ByteDance/Seedance-2.5 | videos.create style API sample on the model page; page also shows Launching soon | $0.115 / video listed on the model page |
| Runware | 文档未列 | 文档未列 (Seedance 2.5 guide URL returned 404 today) | 文档未列 |
For rate limits and quote behavior on our API, see the API pricing and limits guide. For a broader provider write-up, see the API providers comparison. Do not assume a Kling 4.0 public API exists; Kling AI still lists API access for enterprise customers and developers as Coming Soon.
For the BytePlus ModelArk path specifically, BytePlus Seedance 2.5 API setup covers activation, the model ID, and token pricing.
How do I call the Seedance 2.5 API with Python?
Store SEEDANCE_BASE_URL and SEEDANCE_API_KEY in the environment. Quote first, then create, then poll. The example uses seedance-2.5-lite with an 8-second 720p 16:9 text-to-video body that the quickstart documents at 80 credits.
import os, time, json, urllib.request
BASE = os.environ["SEEDANCE_BASE_URL"].rstrip("/") # set to the docs base URL
KEY = os.environ["SEEDANCE_API_KEY"]
body = {
"model": "seedance-2.5-lite",
"mode": "text-to-video",
"prompt": "A cat walking through a sunny garden, cinematic camera movement",
"parameters": {
"duration_seconds": 8,
"resolution": "720p",
"aspect_ratio": "16:9"
},
"max_cost_credits": 80
}
def call(method, path, payload=None, extra_headers=None):
data = None if payload is None else json.dumps(payload).encode()
headers = {"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"}
if extra_headers:
headers.update(extra_headers)
req = urllib.request.Request(BASE + path, data=data, headers=headers, method=method)
with urllib.request.urlopen(req) as resp:
return json.load(resp)
quote = call("POST", "/quotes", body)
print("cost_credits", quote.get("cost_credits"))
created = call(
"POST",
"/videos",
body,
extra_headers={"Idempotency-Key": "video-order-0001"}
)
job_id = created["id"]
while True:
status = call("GET", f"/generations/{job_id}")
state = status["status"]
if state in ("success", "failed", "canceled", "expired"):
break
time.sleep(10)
if status["status"] == "success":
url = status["outputs"][0]["url"]
print("download before expiry:", url)
A 202-style acceptance means the job is queued or processing, not finished. Poll at most once every 10 seconds while the task is active. When status is success, download outputs[].url before expires_at. Signed URLs last at most 15 minutes; media is retained for 14 days. Retry timeouts with the same Idempotency-Key and body instead of creating a second charge.
For Seedance 2.0 model IDs still in the catalog, see the Seedance 2.0 API guide. Switch the model field to seedance-2.5 only after GET /models confirms the parameters you plan to send.
What limits and credits should my Python client respect?
Each account allows 1 active API generation. Generation and upload requests are limited to 10 per minute and 1,000 per day. Reads and quotes are limited to 60 per minute and 20,000 per day. The API generation credit budget is 2,000 per day. Image uploads are limited to 100 files and 500 MiB per day. Daily windows reset in UTC.
Seedance 2.5 Lite costs 10 credits per output second. The first five reference images are included; each additional image costs 7 credits. Other models follow website pricing—always POST /quotes for the exact cost_credits. Credits are reserved before submission; a verified failure refunds once. Queries, quotes, and downloads do not spend generation credits.
This API version supports text/image to video and text/image to image. Video/audio references, editing, webhooks, and cancellation endpoints are unavailable on this version. API generation requires an active paid subscription or remaining purchased credits.
Frequently asked questions
What is the Seedance 2.5 API model ID?
Use seedance-2.5 for Seedance 2.5 and seedance-2.5-lite for Seedance 2.5 Lite. Place the ID in the model field and confirm supported parameters with GET /models.
How do I poll an async Seedance video job in Python?
Save the id from the create response, then GET /generations/{id} with the same API key no more than once every 10 seconds until status is success or another terminal state.
How much does Seedance 2.5 Lite cost on the API?
Seedance 2.5 Lite costs 10 credits per output second. An 8-second Lite example in the quickstart is documented at 80 credits; still call POST /quotes before you generate.
Can I put the Seedance API key in browser JavaScript?
No. Keep the key on your server. The documentation states calls belong on the server and keys must not go in browser code.
Does Kling 4.0 have a public video generation API?
Do not plan a Kling 4.0 public API integration from these docs. Kling AI lists API access for enterprise customers and developers as Coming Soon. Our catalog includes kling-3.0 as a separate model ID when you need that option.
Try Seedance 2.5 Today
Create a key, quote a Lite text-to-video request, and poll until you can download the MP4. Use max_cost_credits so an unexpected quote fails safely before generation.