Short answer: To get a Seedance API key, sign in at seedance2-5.com and create a key in Settings → API keys. Copy it immediately, because it is shown only once. Then send it from your server in the Authorization: Bearer YOUR_API_KEY header to the base URL https://seedance2-5.com/api/v1. Keep the key server-side: requests that carry an Origin header are rejected.
- Where to create it: Settings → API keys.
- Auth scheme: HTTP Bearer,
Authorization: Bearer YOUR_API_KEY. - Base URL:
https://seedance2-5.com/api/v1(OpenAPI 3.1.0 spec at/api/v1/openapi.json). - Shown once: Keys are stored as a digest, and list pages cannot recover the original key.
- Limits: 10 active keys per account; you can create 10 per hour and 20 per day.
- Legacy keys: Keys issued before the API launch return
403 api_key_upgrade_required. Replace them. - Billing: Generations use your account credits. New accounts get free credits on sign-up, enough for one video.
- Last verified: 2026-10-20
What is a Seedance API key?
A Seedance API key is the credential that the Seedance 2.5 API uses to identify your account. The official OpenAPI spec describes the API as "server-side video and image generation using your account credits." It defines the key as a cryptographically generated account API key (46 characters) that you should keep on your server. Every endpoint in the spec requires it.
For a visual starting point before writing requests, explore Seedance 2.5 video generator online and outline the scene your server-side integration will need to create.
How to get a Seedance API key (step by step)
- Sign in to your account at seedance2-5.com.
- Open Settings → API keys and create a new key.
- Copy the key right away. API launch keys are shown only once, and the list page cannot show it again.
- Store it in a server secret manager or an n8n Credential. Do not paste it into your code.
- Test it with a read-only call such as
GET /modelsorGET /credits/balance(examples below). - Replace any legacy key. If you get
403 api_key_upgrade_required, create a replacement, update your server, and revoke the old key.
API authentication: how the Bearer header works
The Seedance 2.5 API documentation uses a single scheme, Bearer authentication:
Authorization: Bearer YOUR_API_KEY
Send this header on every request to https://seedance2-5.com/api/v1. The authentication docs also set these rules:
- Server-side only: requests that carry an
Originheader are rejected, so browser calls fail. - Never expose the key in query strings, prompts, frontend code, mobile binaries, logs, repositories, or exported workflows.
- Task ownership: retrying and polling require the original API key. A different key cannot query that generation through the API, even if it belongs to the same account.
- Revocation: revoke exposed keys immediately. Revoking a key does not cancel a task that was already submitted.
Seedance API endpoints (from the OpenAPI spec)
| Method & path | Summary (official) |
|---|---|
GET /models | List available product models and parameters |
GET /credits/balance | Get the account credit balance |
POST /quotes | Quote a generation without charging credits |
POST /videos | Generate a video |
POST /images | Generate an image |
GET /generations/{id} | Read generation status and signed download URLs |
POST /uploads | Prepare up to five image uploads. PUT the exact bytes using all returned headers. |
POST /uploads/complete | Verify uploaded images and obtain generation input URLs |
For model IDs, supported parameters, and account limits, see Models & pricing. For cost planning, see Seedance 2.5 API pricing and limits.
curl example: test your Seedance API key
# Keep the key in an environment variable, never in code
export SEEDANCE_API_KEY="YOUR_API_KEY"
## List models (read-only)
curl https://seedance2-5.com/api/v1/models \
-H "Authorization: Bearer $SEEDANCE_API_KEY"
## Check credit balance
curl https://seedance2-5.com/api/v1/credits/balance \
-H "Authorization: Bearer $SEEDANCE_API_KEY"
## Get a quote without charging credits
curl -X POST https://seedance2-5.com/api/v1/quotes \
-H "Authorization: Bearer $SEEDANCE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5",
"mode": "text-to-video",
"prompt": "A paper boat drifting down a rainy street at dusk",
"inputs": [],
"parameters": {"duration_seconds": 5, "generate_audio": true}
}'
Python example: Seedance 2.5 API with requests
import os
import requests
BASE_URL = "https://seedance2-5.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['SEEDANCE_API_KEY']}"}
## 1) Quote first (no credits charged)
body = {
"model": "seedance-2.5",
"mode": "text-to-video",
"prompt": "A paper boat drifting down a rainy street at dusk",
"inputs": [],
"parameters": {"duration_seconds": 5, "generate_audio": True},
}
quote = requests.post(f"{BASE_URL}/quotes", json=body, headers=HEADERS)
print(quote.status_code, quote.json())
## 2) Submit the video (returns 202), then poll with the SAME key
job = requests.post(f"{BASE_URL}/videos", json=body, headers=HEADERS)
gen_id = job.json()["id"]
status = requests.get(f"{BASE_URL}/generations/{gen_id}", headers=HEADERS).json()
print(status["status"], status["credits"]["cost"], status["outputs"])
Per the spec, a generation object has id, model, status (pending, processing, success, failed, canceled, expired), created_at, credits.cost, outputs (each with type, url, expires_at), and error. Download outputs before expires_at. For the async pattern and retry guidance, see the Async generations and Errors & retries pages in the API docs.
Auth errors and status codes
Error responses use this shape: {"error": {"code": "...", "message": "..."}}. The spec says rejected requests return "No upstream diagnostics."
| Situation | What the docs say | Fix |
|---|---|---|
| Legacy key (issued before API launch) | 403 api_key_upgrade_required | Create a replacement, update your server, and revoke the old key |
Request sent with an Origin header | Rejected | Call from your backend, not the browser |
| Polling with a different key | Cannot query that generation | Use the original API key |
| Key was exposed | Revoke immediately; submitted tasks are not canceled | Revoke it and create a new key |
| Other rejections | Documented codes: 400, 401, 402, 403, 409, 413, 422, 429, 503 (/generations/{id}: 401, 404, 429, 503) | Read error.code and follow Errors & retries |
Seedance API vs BytePlus
This guide covers the seedance2-5.com account API, which bills against your site credits. If you are comparing it with the BytePlus route, read BytePlus Seedance 2.5 API.
FAQ
How do I get a Seedance API key?
Sign in at seedance2-5.com, open Settings → API keys, create a key, and copy it right away. It is shown only once.
How does Seedance API authentication work?
It uses HTTP Bearer authentication. Send Authorization: Bearer YOUR_API_KEY from your server to https://seedance2-5.com/api/v1.
Why does my key return 403 api_key_upgrade_required?
The key was issued before the API launched. Create a replacement, update your server, and revoke the old key.
Can I call the Seedance API from the browser?
No. Requests that carry an Origin header are rejected. Keep keys out of frontend code and mobile apps.
How many API keys can I have?
Each account allows 10 active keys. You can create 10 per hour and 20 per day.
Sources
- Seedance 2.5 API: Authentication
- Seedance 2.5 API OpenAPI spec
- Seedance 2.5 API overview
- Models & pricing
Last verified: 2026-10-20
Try Seedance 2.5 Today
Create your API key, run a free quote, and generate your first clip. New accounts get free credits on sign-up, enough for one video. Try Seedance 2.5 Today →