- Blog
- Your Definitive Guide to the Seedance 2.0 API
Your Definitive Guide to the Seedance 2.0 API
The Seedance 2.0 API gives you programmatic access to generate high-definition, multi-shot videos directly from text prompts and other creative inputs. Think of it as your toolkit for automating the creation of everything from marketing content and product demos to short films.
Understanding the Seedance 2.0 API
With the Seedance 2.0 API, you can move well beyond basic, single-clip text-to-video generation. Its architecture is specifically built for crafting cohesive narratives composed of multiple shots, all while maintaining consistent characters and styles. This guide is your complete reference for integrating these powerful capabilities into your own applications.
This API is designed from the ground up for building scalable video workflows. It's had a huge impact, especially for smaller businesses. In fact, one recent survey found that 72% of UK small business owners adopted the Seedance 2.0 API within months of its release. They're now creating stunning 1080p videos for a tiny fraction of what traditional production would cost. You can read the full report over at AOL.com.
What This Guide Covers
This reference is packed with practical examples and the insights you'll need to get your first project off the ground. We'll start by exploring the fundamentals.
- Authentication and Access: We'll show you exactly how to generate your API key and use it in a
curlcommand to make your first authenticated request. - Core Endpoints: You'll learn the practical flow of submitting a job to
/videos, checking its status with/videos/{id}, and retrieving the final file. - Asynchronous Operations: We'll provide a Python code snippet that demonstrates how to poll the API efficiently, so your application stays responsive while waiting for a video to render.
Knowing where the Seedance 2.0 API fits within the wider world of AI video creation tools helps you play to its strengths. Its unique focus on multi-shot storytelling and fine-grained stylistic control makes it the go-to choice for producing more structured, narrative-driven content.
Actionable Insight: The API isn't just a tool; it's a framework for programmatic storytelling. Start thinking in terms of scenes, shots, and consistent character descriptions. For example, instead of a vague prompt, structure your request as a sequence of shots: "Wide shot of hero," followed by "Close-up on hero's reaction." This approach unlocks its full potential.
As you work through this guide, you'll gain the expertise needed to integrate the Seedance 2.0 API properly, graduating from simple prompts to building complex video sequences. The following sections provide detailed breakdowns, code snippets, and real-world advice to get you there.
Securing Access with Authentication and API Keys
Before you can start generating videos with the Seedance 2.0 API, you'll need to establish a secure connection. This all comes down to authenticating your requests with a unique API key. Think of this key as your personal pass; it identifies you and proves you have permission to use the API.
You’ll find your API credentials waiting for you in the developer portal after you sign up. Just head over to your account dashboard to generate them. It's absolutely crucial to handle these keys with the same care you would any password. Keep them confidential and never, ever expose them in client-side code like a public JavaScript file.
Security Best Practice: The safest place for your Seedance 2.0 API key is in a secure environment variable on your server. For example, in a Linux environment, you would add
export SEEDANCE_API_KEY="your_actual_key_here"to your.bashrcor.zshrcfile. This prevents it from being accidentally committed to a public code repository.
Making Authenticated Requests
To authenticate any API call, you need to include your key in the Authorization header. We use Bearer Authentication, which means the header needs to be formatted with the word "Bearer" followed by a space and then your secret API key.
If you forget the key or get the format wrong, you'll run into a 401 Unauthorized error. This is a common hiccup, so if you get this error, your first step should always be to print and inspect the Authorization header your application is sending.
Here are a few practical, copy-and-paste examples showing how to structure this header. Just remember to replace YOUR_API_KEY with the actual key from your developer dashboard.
Practical Examples
-
Using
curlThis is a great way to run a quick test from your command line to confirm your key is working. A simple POST request to the video generation endpoint would look like this:curl -X POST https://api.seedance.tv/v2/videos \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"prompt": "A cinematic shot of a rainy London street"}' -
Using Python with
requestsWhen building this into a Python application, define your headers as a dictionary and use an f-string for clarity.import requests import os # Best practice: load the key from an environment variable api_key = os.getenv("SEEDANCE_API_KEY") headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } # Now you can use this 'headers' object in your requests # response = requests.post(url, headers=headers, json=payload)
Understanding Core API Endpoints
To get started with the Seedance 2.0 API, you first need to get familiar with its core endpoints. These are simply the specific URLs your application will communicate with to kick off a video generation job, check on its progress, and ultimately grab the finished result. The entire system is built around an asynchronous model, which is a fancy way of saying you don't have to wait around for your video to be ready. You ask for it, and the API gets to work in the background.
This approach is standard for complex tasks like media generation because it keeps your application responsive. In practice, the workflow for creating a single video involves three API calls: one to start the job, another (or several) to check its status, and a final one to retrieve your completed video.
This diagram gives you a quick overview of the basic access flow, from signing up to making your first authenticated request.

As you can see, a straightforward, three-step authentication sequence is the prerequisite before you can even think about calling the main endpoints.
Before we dive deep into the details, here's a quick reference table summarising the main endpoints you'll be working with.
Seedance 2.0 API Core Endpoints Quick Reference
This table provides a high-level summary of the primary API endpoints, their functions, and the HTTP methods required for each. It's designed to be a quick lookup guide as you build your integration.
| Endpoint | HTTP Method | Description | Key Parameters |
|---|---|---|---|
/videos |
POST | Submits a new video generation job to the processing queue. | prompt, aspect_ratio |
/videos/{id} |
GET | Retrieves the current status and details of a specific job. | id (in URL path) |
/videos/{id} |
GET | When a job succeeds, this endpoint provides the download URL. | id (in URL path) |
/styles |
GET | Lists all available pre-defined visual styles. | (none) |
/account/balance |
GET | Checks your current credit balance. | (none) |
This table is just a starting point. The following sections will provide the in-depth examples and schemas you'll need to use these endpoints effectively.
The Video Generation Endpoint
This is where the magic begins. The video generation endpoint is your primary starting point for creating any new content. You simply send a POST request containing a JSON payload with all the details for your video.
- Endpoint:
POST /videos - Description: Submits a new video generation job to the queue.
- Actionable Insight: The initial response you get back won't contain your video. Instead, it provides a unique
idfor the job. You must store thisidimmediately, as it's the only way to track the job's progress.
Practical curl Example
Here’s a curl command to generate a video. This particular request specifies a text prompt, a 16:9 aspect ratio, and a duration of 8 seconds.
curl -X POST https://api.seedance.tv/v2/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A photorealistic shot of a fox walking through a snowy forest at dawn, cinematic lighting.",
"aspect_ratio": "16:9",
"duration_secs": 8
}'
A successful request returns a JSON object that acknowledges the job has been accepted.
Example Response Schema
{
"id": "vid_abc123xyz789",
"status": "processing",
"created_at": "2026-03-15T10:00:00Z"
}
Checking Job Status
Once you've submitted your job, you'll need to check in on it periodically to see if it's done. You do this by polling the status endpoint. Just be mindful not to check too frequently to avoid hitting rate limits.
- Endpoint:
GET /videos/{id} - Description: Retrieves the current status of a specific video generation job.
- Actionable Insight: Remember to replace
{id}with the actualidyou received from thePOST /videosrequest. The job's status will eventually change fromprocessingto eithersucceededorfailed.
Practical Python Example
This Python snippet demonstrates a robust polling strategy. It includes print statements to give you real-time feedback and properly handles both success and failure states.
import requests
import time
import os
video_id = "vid_abc123xyz789" # The ID you received from the POST request
api_key = os.getenv("SEEDANCE_API_KEY")
headers = {"Authorization": f"Bearer {api_key}"}
while True:
response = requests.get(f"https://api.seedance.tv/v2/videos/{video_id}", headers=headers)
data = response.json()
if data['status'] == 'succeeded':
print("Video generation successful!")
print(f"Download URL: {data['url']}")
break
elif data['status'] == 'failed':
print("Video generation failed.")
print(f"Error details: {data['error']}")
break
print(f"Status is '{data['status']}'. Checking again in 15 seconds...")
time.sleep(15) # Wait 15 seconds before polling again
Once the status flips to succeeded, the response will finally include a url field. This URL points directly to your finished MP4 video file, ready for you to download. To get the most out of the platform, have a look at our guide on advanced text-to-video techniques, which will give you the know-how to craft truly compelling prompts.
Mastering Advanced Video Generation Controls

Moving beyond basic, single-prompt videos means getting to grips with the advanced parameters in the Seedance 2.0 API. These controls are what truly separate a simple clip from a cinematic sequence, giving you the power to direct the AI with far greater precision and creative intent.
By mastering these settings, you can craft multi-shot narratives, maintain character consistency across scenes, and define the exact mood and style of your final video. It’s the difference between merely asking for a video and actually directing one.
Structuring Multi-Shot Sequences
One of the most powerful features of the Seedance 2.0 API is its ability to generate coherent stories that unfold over several shots. You achieve this by structuring your prompt as an array of scene descriptions, rather than a single string. The key to making it work is using descriptive language to maintain consistency.
For example, to create a two-shot sequence featuring the same character, you would define each shot clearly while reusing key descriptors. This signals to the model that the character's appearance should carry over from one cut to the next.
Practical Example: A Two-Shot Sequence
Instead of a single prompt string, you pass a scenes array in your JSON payload. Each object in the array represents a distinct shot with its own prompt and duration.
{
"scenes": [
{
"prompt": "Wide shot. A detective in a brown trench coat stands under a flickering streetlamp on a rainy London street at night.",
"duration_secs": 4
},
{
"prompt": "Close-up shot. The same detective in the brown trench coat looks up, rain dripping from his hat. Cinematic, photorealistic style.",
"duration_secs": 3
}
],
"style": "photorealistic",
"seed": 42
}
Notice the actionable techniques used here: repeating "the same detective" and "brown trench coat" maintains character consistency. Using a fixed seed value like 42 also strongly encourages visual consistency between the generated shots. For more on the model's capabilities, our post on ByteDance's latest updates offers further insights in the official Seedance 2.0 announcement.
Directing Camera Motion and Style
Beyond just the scene structure, you can add specific parameters to control the virtual camera and the overall aesthetic. This gives you director-level input, shaping the final look and feel of your output. The camera object lets you specify movements, while the style parameter locks in a visual theme.
- Camera Motion: Use
zoom,pan, andtiltto guide the camera's movement. - Artistic Style: Apply predefined styles like
photorealism,anime, orcyberpunkto set the tone. - Motion Detail: Set
motion_levelfromlowtohighto control the amount of dynamic activity within the scene.
Actionable Insight: Combine these controls for professional results. To create a dramatic reveal, use a slow
"zoom": "in"combined with a"style": "cinematic"and a high"motion_level": "high"to add energy to the scene. Experiment with different combinations to see the effect. For example, a"pan": "left"can follow a moving subject.
Managing Rate Limits and Handling Errors
When you're building an application that relies on the Seedance 2.0 API, it’s crucial to understand the ground rules for making requests. We implement rate limits to guarantee fair usage and stable performance for all developers. Think of it as a cap on how many requests your application can make within a certain timeframe.
If you go over this limit, you’ll be temporarily blocked. That's why building your app to respect these limits from the start is key to a reliable integration.
Staying Within the Limits
The good news is that you don't have to guess. Every single API response includes headers that give you a live look at your current rate limit status. By reading these headers, you can build a much smarter application that automatically adjusts its request frequency.
Here are the headers to watch out for:
X-RateLimit-Limit: The total number of requests allowed in the current window.X-RateLimit-Remaining: How many requests you have left.X-RateLimit-Reset: A UNIX timestamp showing when your quota resets.
Practical Example: In a Python script, you can access these headers directly from the response object:
response = requests.get(url, headers=headers)
remaining_requests = int(response.headers.get('X-RateLimit-Remaining', 0))
print(f"You have {remaining_requests} requests left.")
if remaining_requests == 0:
# Logic to pause requests until the reset time
pass
For a complete breakdown of our policies and strategies for effective usage, our official Rate Limits documentation is your best resource.
Navigating Common API Errors
Aside from rate limits, your application needs to be ready to handle other potential errors gracefully. A professional integration doesn't just crash when something goes wrong; it identifies the problem and responds in a sensible way.
To help you build more resilient code, we've put together a quick-reference table of the most common error codes. It outlines what they mean and what you can do to fix them, making it much faster to diagnose and sort out any issues.
Common Seedance 2.0 API Error Codes and Solutions
Here's a detailed breakdown of frequent error codes, their meanings, and recommended actions for developers to resolve them.
| HTTP Status Code | Error Message Example | Meaning | Recommended Action |
|---|---|---|---|
| 401 | Unauthorized |
Your API key is missing, invalid, or expired. | Action: Verify your Authorization header is formatted as "Bearer YOUR_API_KEY". Generate a new key from your dashboard if you suspect it's compromised. |
| 404 | Not Found |
The requested resource (e.g., a video ID) doesn't exist. | Action: Double-check the URL and the ID you are using. Ensure the job wasn't deleted or that the ID is correct. |
| 422 | Unprocessable Entity |
Your request payload has a validation error (e.g., missing field, wrong data type). | Action: Review your JSON payload. Check for missing required fields like prompt or incorrect data types, such as providing a number where a string is expected. |
| 429 | Too Many Requests |
You have exceeded your rate limit. | Action: Stop sending requests. Check the Retry-After header for a recommended wait time. Implement an exponential backoff strategy in your code to handle this automatically. |
| 500 | Internal Server Error |
An unexpected error occurred on our servers. | Action: This is not your fault. Wait a few moments and retry the request. If the problem persists, check our API status page for reported outages. |
By keeping this table handy, you can quickly troubleshoot and get your integration back on track.
Best Practices for Error Handling
Writing solid code means planning for things to fail occasionally. For a 429 Too Many Requests error, the most effective approach is exponential backoff.
This means that after a failed request, you pause for a short time (e.g., 1 second) before retrying. If it fails again, you double the waiting period (2 seconds, then 4, and so on). This logic prevents your application from spamming our API and gives the system time to recover.
Combine this retry logic with proactive validation of your request payloads on your end before you send them. This will drastically reduce 422 Unprocessable Entity errors and lead to a much more stable and dependable application for your users.
Practical Integration Use Cases and Code Examples
Let's move beyond the theory and look at how the Seedance 2.0 API works in practice. Seeing its features applied to real-world scenarios is where its true value really shines. This section will walk you through some tangible use cases and provide the code to get you started, showing how you can integrate the API to build some genuinely useful applications.
The API isn't just for creating one-off videos; it’s designed to be a core part of automated content pipelines. We’ve already seen its impact with small businesses here in the UK. A 2026 digital economy report noted a staggering 78% reduction in video production costs for early adopters. The API's precision, which hits an industry-leading 95% adherence to editing instructions, also drove a 42% boost in engagement on platforms like Instagram and TikTok by keeping characters and branding consistent. You can dig into the complete findings over on the official Seedance 2.0 launch blog.
Building a Simple Web Application
One of the most straightforward ways to get started with the Seedance 2.0 API is to build a simple web app. Think of a basic front-end that lets a user type in a text prompt and generate a video. This is a brilliant first project because it takes you through the entire request-response cycle.
The process boils down to a few key steps:
- User Interface: Create a simple HTML form with
<input type="text" id="prompt">and a<button>. - Backend Server: Set up a server-side endpoint (e.g., using Node.js/Express or Python/Flask) to receive the prompt. This backend is crucial for securely storing and using your API key.
- API Call: From your server, make a
POSTrequest to the/videosendpoint of the Seedance 2.0 API, passing along the user's prompt. - Displaying Results: Once Seedance has finished processing the video, your backend can send the final video URL back to the front end, where JavaScript can insert it into a
<video>tag for playback.
Actionable Insight: This client-server architecture is a non-negotiable best practice. Never expose your Seedance API key in your front-end JavaScript. All API calls must originate from a server you control to protect your credentials.
Automating Social Media Content
For marketing teams, the API can be a game-changer. Imagine you have a CSV file of product names and features. A simple backend script could read each row, construct a prompt from the data, and automatically generate a unique promotional video for each product.
Practical Example: Python Script for Bulk Video Creation
import csv
import requests
def generate_video_for_product(product_name, feature):
prompt = f"A sleek 30-second ad for {product_name}, highlighting its {feature}. Modern, energetic style."
payload = {"prompt": prompt, "aspect_ratio": "9:16"}
# ... (code to make the API call to /videos) ...
print(f"Submitted video generation for {product_name}")
with open('products.csv', 'r') as file:
reader = csv.reader(file)
next(reader) # Skip header row
for row in reader:
product_name, feature = row
generate_video_for_product(product_name, feature)
This script automates the creation of dozens of ad variants, perfect for A/B testing or creating a steady stream of content. Our guide on using a free AI video generator offers more ideas for creating this kind of marketing content.
Frequently Asked Questions About the Seedance 2.0 API
Here you'll find quick answers to some of the most common questions our developers have about working with the Seedance 2.0 API. Think of this as your go-to spot for troubleshooting and clarifying how things work.
How Long Does It Take to Generate a Video?
This really depends on complexity and server load. A simple, short clip might be ready in one to three minutes. However, complex multi-shot videos with high resolution and long durations can take significantly longer.
For any production application, do not rely on polling alone. The most robust and efficient method is to implement webhooks. This lets our system send a notification to a URL you provide the moment a video is ready, eliminating the need for constant status checks.
Can I Maintain Character Consistency Across Multiple Videos?
Yes, you can achieve high consistency with the right prompting techniques. While creating a perfect 1:1 replica across different API calls is a known challenge in generative AI, you can get very close by being methodical.
Actionable Insight: The key is to create a "character sheet" of descriptive keywords and reuse it. For example: John "The Fixer" Doe, a man with a prominent scar over his left eye, sharp jawline, salt-and-pepper hair, wearing a worn leather jacket and a grey beanie. Use this exact, detailed description in every prompt featuring the character. Combining this with a consistent seed value will give you the best results.
What Video Formats and Resolutions Are Supported?
The Seedance 2.0 API generates all videos in the universally compatible MP4 format. The default resolution is 1920x1080 (1080p), suitable for most professional applications.
You can easily request other aspect ratios to fit different platforms. Here's how to structure it in your request payload:
- For Instagram Posts:
"aspect_ratio": "1:1" - For TikTok/Reels:
"aspect_ratio": "9:16" - For YouTube/Vimeo:
"aspect_ratio": "16:9"(This is the default)
The API will automatically adjust the dimensions to match your selected ratio while maintaining the highest possible quality.
Ready to start building with the industry's most powerful text-to-video tools? Explore the full potential of AI-driven content creation with Seedance. Visit https://www.seedance.tv to get started today.