Seedance 2 Mini API: Pricing, Code & Production Guide
Seedance 2 Mini is ByteDance's fastest, most affordable video generation model — approximately 2x faster than Seedance 2 Fast and roughly half the price. It generates smooth 480p or 720p clips from text prompts or reference images, with durations from 4 to 15 seconds and optional AI-generated audio at no extra cost.
This guide covers everything you need to integrate Seedance 2 Mini through Muapi: parameters, real pricing numbers, async polling, error handling, and a two-pass production strategy that keeps costs predictable at scale.
What Is Seedance 2 Mini?
Where It Fits in the Seedance 2 Family
The Seedance 2 lineup from ByteDance runs from Pro (highest quality) through Standard, Fast, and Mini (fastest, cheapest). Mini is purpose-built for high-volume workflows — e-commerce product clips, TikTok-ready drafts, and rapid iteration pipelines where you need dozens of variants without burning your budget.
The trade-off is straightforward: Mini delivers around 48 seconds of generation time for a 5-second 720p clip, but shows soft edges and compression artifacts on complex scenes with dense motion or fine detail. For drafts, social content, and simple product shots it is excellent. For cinematic final renders, step up to Standard or Pro.
Supported Input Modes
Muapi exposes three Seedance 2 Mini endpoints:
- Text-to-Video (
seedance-2-mini-text-to-video) — generate from a text prompt - Image-to-Video (
seedance-2-mini-image-to-video) — animate a reference image - Omni Reference (
seedance-2-mini-omni-reference) — multi-reference for character and motion consistency
This guide covers text-to-video and image-to-video, the two most common production paths.
Technical Specifications
Output Specs
| Spec | Value |
|---|---|
| Provider | ByteDance |
| Resolutions | 480p, 720p |
| Duration | 4–15 seconds |
| Aspect Ratios | 16:9, 9:16, 1:1, 3:4, 4:3, 21:9 |
| Audio | AI-generated ambient audio (optional, free) |
| High Bitrate | Optional — larger file, better compression fidelity |
| Max Prompt | 20,000 characters |
| Output Format | MP4, URL valid for 24 hours |
| Typical Latency | ~48s for a 5s 720p clip; up to 3 min for 15s |
Input Parameters
| Parameter | Type | Description |
|---|---|---|
prompt | string | Scene description. Use positive phrasing — "sharp crisp frames" outperforms "no motion blur". |
aspect_ratio | string | 16:9, 9:16, 1:1, 3:4, 4:3, 21:9 |
resolution | string | 480p or 720p |
duration | integer | Clip length in seconds (4–15) |
generate_audio | boolean | Synchronized ambient audio. No extra charge. |
high_bitrate | boolean | Higher-fidelity output at larger file size. |
Write prompts in six parts: Subject, Action, Environment, Camera, Style, Constraints. Unstructured or negative-heavy prompts produce noticeably worse output.
How to Call the Seedance 2 Mini API via Muapi
Authentication and Base URL
All requests use Bearer token auth. Get your key from the Muapi dashboard.
Base URL: https://muapi.ai/api/v1
Auth: Authorization: Bearer YOUR_API_KEY
Seedance 2 Mini is asynchronous — every POST returns a job ID, not a finished video. You then poll a separate endpoint until the job completes. Never POST the same request again after receiving a job ID — that creates a duplicate generation and charges your account twice.
Text-to-Video Request
# cURL
curl -s -X POST https://muapi.ai/api/v1/seedance-2-mini-text-to-video \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A ceramic coffee mug on a marble countertop, steam rising slowly, soft morning light from left window, photorealistic, cinematic",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5,
"generate_audio": true
}'
# Response: { "id": "job_abc123", "status": "processing" }
# Python
import requests
response = requests.post(
"https://muapi.ai/api/v1/seedance-2-mini-text-to-video",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"prompt": "A ceramic coffee mug on a marble countertop, steam rising slowly, soft morning light from left window, photorealistic, cinematic",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5,
"generate_audio": True,
}
)
job_id = response.json()["id"] # save this — needed to poll
Image-to-Video Request
Animate an existing image with the image-to-video endpoint:
# cURL
curl -s -X POST https://muapi.ai/api/v1/seedance-2-mini-image-to-video \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "The product rotates slowly, soft studio lighting, clean white background",
"image_url": "https://your-cdn.com/product.jpg",
"aspect_ratio": "1:1",
"resolution": "720p",
"duration": 4
}'
# Python
response = requests.post(
"https://muapi.ai/api/v1/seedance-2-mini-image-to-video",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"prompt": "The product rotates slowly, soft studio lighting, clean white background",
"image_url": "https://your-cdn.com/product.jpg",
"aspect_ratio": "1:1",
"resolution": "720p",
"duration": 4,
}
)
job_id = response.json()["id"]
Async Polling, Job Status, and Error Handling
Polling for Results
Poll GET /predictions/{job_id}/result every 5–10 seconds. Budget around 48 seconds for a 5-second 720p clip; up to 3 minutes for a 15-second clip.
# Python — polling loop with timeout
import time, requests
def poll_result(job_id, api_key, timeout=240, interval=6):
url = f"https://muapi.ai/api/v1/predictions/{job_id}/result"
headers = {"Authorization": f"Bearer {api_key}"}
deadline = time.time() + timeout
while time.time() < deadline:
r = requests.get(url, headers=headers)
data = r.json()
status = data.get("status")
if status in ("succeeded", "completed"):
return data["output"] # MP4 URL — valid for 24 hours
elif status in ("failed", "error"):
raise RuntimeError(f"Job failed: {data.get('error')}")
time.sleep(interval)
raise TimeoutError(f"Job {job_id} did not complete within {timeout}s")
HTTP Error Reference
| Code | Cause | What to Do |
|---|---|---|
400 | Invalid params — bad aspect_ratio, duration out of range | Fix request params, do not retry |
402 | Insufficient balance | Top up at muapi.ai/topup |
422 | Prompt policy violation — copyrighted character, face detection | Revise prompt |
429 | Rate limit exceeded | Wait for Retry-After header, then retry |
5xx | Server error | Exponential backoff, max 3 retries |
# Python — generation with retry logic
def generate_with_retry(payload, api_key, max_retries=3):
url = "https://muapi.ai/api/v1/seedance-2-mini-text-to-video"
headers = {"Authorization": f"Bearer {api_key}"}
for attempt in range(max_retries):
r = requests.post(url, headers=headers, json=payload)
if r.status_code == 200:
return r.json()["id"]
elif r.status_code == 429:
time.sleep(int(r.headers.get("Retry-After", 30)))
elif r.status_code in (400, 402, 422):
r.raise_for_status() # client error — do not retry
else:
time.sleep(2 ** attempt) # exponential backoff for 5xx
raise RuntimeError("Max retries exceeded")
Key rule: only retry the POST if you received a 5xx with no job ID in the response. If you got a job ID, poll that job — it may still be processing.
Pricing and Cost Planning
Muapi charges per second of output. No subscription required.
| Resolution | Per Second | 4s Clip | 5s Clip | 10s Clip | 15s Clip |
|---|---|---|---|---|---|
| 480p | $0.08 | $0.32 | $0.40 | $0.80 | $1.20 |
| 720p | $0.15 | $0.60 | $0.75 | $1.50 | $2.25 |
For comparison, Seedance 2 Standard costs approximately $0.30/sec at 720p — Mini is half the price. A batch of 100 ten-second clips at 720p costs $150 on Mini vs $300 on Standard.
Cost tip: iterate at 480p, promote approved clips to 720p. This cuts iteration spend by nearly half and keeps your monthly bill predictable. See muapi.ai/topup for prepaid credit tiers.
Production Workflow Patterns
Two-Pass Draft-to-Final Pipeline
The most cost-efficient pattern separates drafting from final rendering:
- Draft pass (480p, 4s): Generate 5–10 prompt variants at $0.32 each
- Review: Pick the best 1–2 outputs with the team
- Final pass (720p, full duration): Render only the approved clips
This typically cuts generation costs by 60–70% compared to rendering everything at full quality upfront.
Batch Production for TikTok and Shopify
For TikTok/Reels pipelines, cap concurrency at 5–10 simultaneous jobs to stay within rate limits:
from concurrent.futures import ThreadPoolExecutor, as_completed
def make_clip(prompt, api_key):
job_id = generate_with_retry(
{"prompt": prompt, "resolution": "480p", "duration": 5, "aspect_ratio": "9:16"},
api_key
)
return poll_result(job_id, api_key)
prompts = ["Scene A...", "Scene B...", "Scene C..."]
with ThreadPoolExecutor(max_workers=5) as executor:
futures = {executor.submit(make_clip, p, API_KEY): p for p in prompts}
for f in as_completed(futures):
print(f"Ready: {f.result()}") # download within 24 hours
For Shopify product pages, the image-to-video endpoint pairs directly with your existing product image library. A 4-second 480p loop at $0.32 adds autoplay motion to product cards without a video shoot. Download and host the MP4 on your own CDN — output URLs expire after 24 hours.
Alternatives and When to Use Seedance 2 Mini
Mini is the right choice when iteration speed and cost matter more than pixel-perfect output. Here is how it compares to the alternatives available on Muapi:
| Model | Strength | Use Instead of Mini When |
|---|---|---|
| Seedance 2 Standard | Higher fidelity, better motion | Final renders with complex scenes |
| Kling 3.0 | Cinematic physics, character consistency | Hero content, fast-motion sequences |
| MiniMax Hailuo 03 | 1080p quality at competitive price | You need 1080p output |
| Wan 2.7 | Open-weights, flexible prompting | Maximum prompt control matters |
For 4K output, see the Seedance 2.5 guide. For a head-to-head quality comparison with Kling, see Seedance 2.0 vs Kling 3.0. Try all variants interactively at muapi.ai/playground/seedance-2-mini-text-to-video.
FAQ
How does Seedance 2 Mini compare to Seedance 2 Standard in quality?
Mini is approximately 2x faster and half the price of Standard at 720p. The quality difference is most visible in scenes with rapid camera movement, fine texture detail, or dense motion — Mini tends to show softer edges and slight compression artifacts there. For simple product shots, talking-head clips, e-commerce loops, and social media drafts the gap is minimal and the cost saving is significant. Use Mini for iteration and Standard or Pro only for final approved output.
What is the correct way to avoid duplicate charges when retrying?
The async pattern means every successful POST creates and bills a new generation job. Only retry a POST if you received a 5xx error and no job ID was returned. If you received a job ID, poll that job — it may still be processing. The most common mistake is wrapping the POST in a blanket retry loop; this generates and charges duplicate jobs silently.
Does generate_audio cost extra?
No. generate_audio is included at no extra charge. Set it to true to receive synchronized AI-generated ambient audio in the output MP4. Disable it when you plan to overlay your own audio track, or when your downstream pipeline strips audio before delivery.
Can I use Seedance 2 Mini as a developer outside China?
Yes — that is the core reason to use Muapi. The native ByteDance/BytePlus API has geographic and entity restrictions that block or complicate access for international developers. Muapi provides a unified REST endpoint with no regional restrictions, USD billing, and no BytePlus account required.
How do I handle HTTP 429 rate limits in a batch pipeline?
Read the Retry-After header — it tells you exactly how many seconds to wait before the next request. Implement exponential backoff for 5xx errors separately. Keep batch concurrency at 5–10 simultaneous jobs per key. If you routinely hit limits at production scale, contact Muapi to discuss higher concurrency tiers.
Is there a 1080p option for Seedance 2 Mini?
No. Mini tops out at 720p. For 1080p output, use Seedance 2 VIP (available on Muapi) or step up to Seedance 2.5, which supports native 4K.





