Seedance 2.0 API: Sådan genererer du AI-videoer programmatisk
En udviklervejledning til Seedance 2.0 API: godkendelse, endpoints, anmodningsformater, kodeeksempler i Python og JavaScript, fejlhåndtering og bedste praksis.

Generér en cinematisk AI-video med én HTTP-anmodning. Seedance 2.0 API'en er den samme genereringspipeline som webplatformen bruger, eksponeret som en ren REST-grænseflade med Bearer-godkendelse, webhooks og batch-endpoints. Hvis du kan lave en POST-anmodning, kan du bygge en videogenereringspipeline.
Denne guide dækker alt, hvad du behøver for at integrere Seedance 2.0 i dine egne applikationer: godkendelse, endpoints, parametre, fejlhåndtering og produktionsklare kodeeksempler i Python og JavaScript.
TL;DR - API på et øjeblik
- Basis-URL:
https://api.arteza.ai/v1 - Godkendelse: Bearer-token i
Authorization-headeren - Generering: Asynkron - indsend en opgave, poll eller brug webhook til færdiggørelse
- Hastighedsgrænser: 60 anmodninger/minut, 5 samtidige genereringer
- Modeller: Seedance 2.0, 1.0 Pro, 1.0 Lite, Seedream v3/v4.5/v5 - alle i én API
- Kreditomkostning: Samme dynamiske pris pr. sekund som web-UI'et (19-351 kreditter for 2.0)
5 gratis generationer · Intet kreditkort påkrævet
Hvad API'en faktisk kan
Alt, hvad webgrænsefladen kan, kan API'en også. Tekst-til-video, billede-til-video, modelvalg, varighedsstyring, billedformat, lydskift og adgang til alle modeller på platformen. Batch-endpoints til generering af mange klip på én gang. Webhook-notifikationer, så du ikke behøver at polle. Brugerdefinerede metadata, der bliver returneret i resultaterne til sporing af A/B-tests eller kampagnevarianter.
Understøttede modeller
Alle modeller bruger den samme API-overflade, blot med forskellige identifikatorer.
| Model | API-identifikator | Typiske kreditter |
|---|---|---|
| Seedance 2.0 | seedance-2.0 | 243-910 |
| Seedance 1.0 Pro | seedance-1.0-pro | 48-288 |
| Seedance 1.0 Lite | seedance-1.0-lite | 14-84 |
| Seedream v5 | seedream-v5 | 8 |
| Seedream v4.5 | seedream-v4.5 | 7 |
| Seedream v3 | seedream-v3 | 6 |
Få en API-nøgle på 30 sekunder
Opret en konto, gå til Indstillinger → API-nøgler, og du er klar til din første POST-anmodning. Gratis kreditter inkluderet.
Hent din API-nøgleGodkendelse på 30 sekunder
Generér en API-nøgle fra dashboardet under Indstillinger > API-nøgler. Send den som et Bearer-token:
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://api.arteza.ai/v1/account/credits
Svar:
{
"credits": 2750,
"tier": "popular"
}
Sikkerhedsregler, der er vigtige:
- Send aldrig din API-nøgle i klientsidet kode eller offentlige repositories
- Gem den i miljøvariabler (
SEEDANCE_API_KEY) - Roter nøgler jævnligt fra dashboardet
- Hver nøgle arver kreditbalancen fra sin forældrekonto
Endpointet til tekst-til-video
Dette er det endpoint, du vil bruge mest.
POST /v1/generate/text-to-video
{
"model": "seedance-2.0",
"prompt": "Aerial shot of a coastal city at sunset, golden light reflecting off glass skyscrapers, cinematic drone footage",
"duration": 10,
"aspect_ratio": "16:9",
"audio": true
}
Parameterreference
| Parameter | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
model | streng | Ja | Modelidentifikator (f.eks. seedance-2.0) |
prompt | streng | Ja | Scenebeskrivelse, maks. 500 tegn |
duration | heltal | Nej | Videolængde i sekunder (4-15 for 2.0, standard 8) |
aspect_ratio | streng | Nej | 16:9, 9:16 eller 1:1 (standard 16:9) |
audio | boolean | Nej | Inkluder synkroniseret lyd (standard true, kun 2.0) |
webhook_url | streng | Nej | URL til modtagelse af færdiggørelsesnotifikation |
metadata | objekt | Nej | Brugerdefinerede nøgle-værdi-par, der returneres i resultater |
Vellykket svar
{
"task_id": "task_abc123def456",
"status": "queued",
"model": "seedance-2.0",
"credits_charged": 607,
"estimated_time": 120,
"created_at": "2026-04-10T14:30:00Z"
}
Genereringen er asynkron. Du får et task_id med det samme og poller for færdiggørelse (eller bruger webhooks).
Endpointet til billede-til-video
Animér et killebillede med en bevægelsesprompt.
POST /v1/generate/image-to-video
Content-Type: multipart/form-data
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
model | streng | Ja | Modelidentifikator |
image | fil | Ja | Killebillede (JPEG, PNG, WebP; maks. 10 MB) |
prompt | streng | Ja | Bevægelsesbeskrivelse |
duration | heltal | Nej | Videolængde i sekunder |
aspect_ratio | streng | Nej | Outputbilledformat |
audio | boolean | Nej | Inkluder lyd (kun Seedance 2.0) |
webhook_url | streng | Nej | Webhook-URL ved færdiggørelse |
Foretrækker du ikke at uploade en fil? Send en image_url i stedet:
{
"model": "seedance-2.0",
"image_url": "https://example.com/photo.jpg",
"prompt": "The woman turns her head slowly and smiles, wind gently blowing her hair",
"duration": 8,
"aspect_ratio": "16:9"
}
Tjek genereringsstatus
Poll opgave-endpointet for at tjekke fremskridt.
GET /v1/tasks/{task_id}
Svar under behandling
{
"task_id": "task_abc123def456",
"status": "processing",
"progress": 65,
"model": "seedance-2.0",
"created_at": "2026-04-10T14:30:00Z",
"estimated_completion": "2026-04-10T14:31:30Z"
}
Færdigt svar
{
"task_id": "task_abc123def456",
"status": "completed",
"model": "seedance-2.0",
"result": {
"video_url": "https://cdn.arteza.ai/outputs/task_abc123def456.mp4",
"duration": 10,
"resolution": "1280x720",
"has_audio": true,
"file_size": 8542310
},
"credits_charged": 607,
"created_at": "2026-04-10T14:30:00Z",
"completed_at": "2026-04-10T14:31:28Z"
}
Statusværdier
| Status | Betydning |
|---|---|
queued | Opgave modtaget, venter på start |
processing | Generering i gang |
completed | Video klar ved result.video_url |
failed | Generering mislykkedes - se feltet error |
cancelled | Opgave annulleret af bruger |
Video-URL'er udløber efter 24 timer. Download og gem dem på din egen infrastruktur med det samme.

Vil du generere output som dette programmatisk? Du er 30 sekunder fra dit første API-kald. Få din API-nøgle gratis →
Produktionsklart Python-eksempel
Her er et komplet script, der indsender en generering, poller for færdiggørelse og downloader resultatet.
import os
import time
import requests
API_KEY = os.environ["SEEDANCE_API_KEY"]
BASE_URL = "https://api.arteza.ai/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def generate_video(prompt, duration=8, aspect_ratio="16:9"):
"""Indsend en tekst-til-video-opgave. Returnerer task_id."""
response = requests.post(
f"{BASE_URL}/generate/text-to-video",
headers=HEADERS,
json={
"model": "seedance-2.0",
"prompt": prompt,
"duration": duration,
"aspect_ratio": aspect_ratio,
"audio": True,
},
)
response.raise_for_status()
return response.json()["task_id"]
def wait_for_completion(task_id, poll_interval=5, timeout=300):
"""Poll indtil opgaven er færdig. Returnerer result-dict."""
elapsed = 0
while elapsed < timeout:
response = requests.get(f"{BASE_URL}/tasks/{task_id}", headers=HEADERS)
response.raise_for_status()
data = response.json()
if data["status"] == "completed":
return data["result"]
if data["status"] == "failed":
raise RuntimeError(f"Generation failed: {data.get('error')}")
time.sleep(poll_interval)
elapsed += poll_interval
raise TimeoutError(f"Task {task_id} did not complete within {timeout}s")
def download_video(video_url, output_path):
"""Stream videoen til disk."""
response = requests.get(video_url, stream=True)
response.raise_for_status()
with open(output_path, "wb") as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
if __name__ == "__main__":
task_id = generate_video(
prompt="A cat sitting on a windowsill watching rain fall outside, cozy indoor lighting, shallow depth of field",
duration=10,
)
print(f"Task submitted: {task_id}")
result = wait_for_completion(task_id)
print(f"Video ready: {result['video_url']}")
download_video(result["video_url"], "output.mp4")
print("Downloaded to output.mp4")
JavaScript (Node.js)-eksempel
Den samme arbejdsgang i moderne Node.js med native fetch.
const API_KEY = process.env.SEEDANCE_API_KEY;
const BASE_URL = "https://api.arteza.ai/v1";
async function generateVideo(prompt, duration = 8, aspectRatio = "16:9") {
const response = await fetch(`${BASE_URL}/generate/text-to-video`, {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "seedance-2.0",
prompt,
duration,
aspect_ratio: aspectRatio,
audio: true,
}),
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}
const data = await response.json();
return data.task_id;
}
async function waitForCompletion(taskId, pollMs = 5000, timeoutMs = 300000) {
const start = Date.now();
while (Date.now() - start < timeoutMs) {
const response = await fetch(`${BASE_URL}/tasks/${taskId}`, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
const data = await response.json();
if (data.status === "completed") return data.result;
if (data.status === "failed") {
throw new Error(`Generation failed: ${data.error}`);
}
await new Promise((resolve) => setTimeout(resolve, pollMs));
}
throw new Error(`Task ${taskId} timed out`);
}
// Brug
const taskId = await generateVideo(
"Timelapse of a flower blooming, macro lens, soft natural lighting",
12
);
console.log(`Task submitted: ${taskId}`);
const result = await waitForCompletion(taskId);
console.log(`Video ready: ${result.video_url}`);
Billede-til-video i Python
Når du skal uploade et killebillede, bruges multipart/form-data:
def generate_from_image(image_path, prompt, model="seedance-2.0", duration=8):
"""Generér video fra en lokal billedfil."""
with open(image_path, "rb") as img_file:
response = requests.post(
f"{BASE_URL}/generate/image-to-video",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"image": img_file},
data={
"model": model,
"prompt": prompt,
"duration": duration,
"aspect_ratio": "16:9",
"audio": "true",
},
)
response.raise_for_status()
return response.json()["task_id"]
Fejlhåndtering, der holder
API'en bruger standard HTTP-statuskoder med strukturerede fejlsvar.
| Status | Betydning | Almindelig årsag |
|---|---|---|
| 400 | Ugyldig anmodning | Ugyldige parametre, prompt for lang |
| 401 | Ikke autoriseret | Manglende eller ugyldig API-nøgle |
| 402 | Betaling påkrævet | Utilstrækkelige kreditter |
| 404 | Ikke fundet | Ugyldigt opgave-ID |
| 429 | For mange anmodninger | Hastighedsgrænse overskredet |
| 500 | Intern serverfejl | Problem på serversiden - prøv igen med backoff |
Fejlsvarets struktur
{
"error": {
"code": "insufficient_credits",
"message": "Your account has 8 credits but this generation requires 24 credits.",
"required_credits": 24,
"available_credits": 8
}
}
Anbefalet mønster
try:
task_id = generate_video(prompt)
except requests.exceptions.HTTPError as e:
status = e.response.status_code
if status == 402:
error = e.response.json()["error"]
print(f"Need {error['required_credits']} credits, have {error['available_credits']}")
# Omdirigér brugeren til /pricing
elif status == 429:
retry_after = int(e.response.headers.get("Retry-After", 60))
print(f"Rate limited. Retry after {retry_after}s.")
else:
raise
Hastighedsgrænser og bedste praksis i produktion
Grænserne
| Grænse | Værdi |
|---|---|
| Anmodninger pr. minut | 60 |
| Samtidige genereringer | 5 |
| Maks. promptlængde | 500 tegn |
| Maks. billedupload | 10 MB |
Fem praksisser, der betyder noget i produktion
- Brug webhooks, ikke polling, i stor skala. Polling spilder API-kald. Webhooks fyrer præcis én gang.
- Implementér eksponentiel backoff ved 429-svar. Prøv ikke igen med det samme.
- Download video-URL'er hurtigt. De udløber efter 24 timer. Gem dem på dit eget CDN.
- Validér input på klientsiden. Fang problemer med promptlængde og filstørrelse, inden du rammer API'en.
- Tjek kreditbalancen før batchjobs. En 402 midt i en batch er irriterende. Forespørg
/account/creditsførst.
Webhook-integration
Inkludér webhook_url i din genereringsanmodning, og Arteza sender en POST til den, når opgaven er færdig.
{
"model": "seedance-2.0",
"prompt": "...",
"webhook_url": "https://yourapp.com/api/seedance/webhook"
}
Webhook-payload
{
"event": "task.completed",
"task_id": "task_abc123def456",
"status": "completed",
"result": {
"video_url": "https://cdn.arteza.ai/outputs/task_abc123def456.mp4",
"duration": 10,
"resolution": "1280x720",
"has_audio": true
},
"metadata": {
"campaign_id": "summer-2026",
"variant": "A"
},
"timestamp": "2026-04-10T14:31:28Z"
}
Webhook-anmodninger inkluderer en X-Seedance-Signature-header: en HMAC-SHA256-signatur af kroppen signeret med din webhook-hemmelighed. Verificér altid signaturen, inden du behandler hændelser.
Batchgenerering
Når du har brug for flere klip, indsender du dem som en batch og modtager én webhook, når alt er færdigt.
POST /v1/generate/batch
{
"tasks": [
{
"type": "text-to-video",
"model": "seedance-2.0",
"prompt": "Scene 1 description...",
"duration": 8
},
{
"type": "text-to-video",
"model": "seedance-2.0",
"prompt": "Scene 2 description...",
"duration": 10
},
{
"type": "image-to-video",
"model": "seedance-1.0-pro",
"image_url": "https://example.com/product.jpg",
"prompt": "Slow rotation revealing product details",
"duration": 6
}
],
"webhook_url": "https://yourapp.com/api/seedance/batch-complete"
}
Opgaver i en batch behandles parallelt op til din samtidige grænse.
Stop med at læse. Begynd at bygge.
Hvert minut brugt på at læse dokumentation er en video, din pipeline kunne have genereret. Gratis kreditter, intet kort påkrævet.
Kom i gang nuFire use cases, der er værd at bygge
1. Produktvideoer til e-handel i stor skala
Automatisér produktanimation for hele dit katalog. Gennemløb din produktdatabase, send et billede-til-video-kald pr. vare, og gem de resulterende URL'er ved siden af produktposten.
products = get_products_from_database()
for product in products:
task_id = generate_from_image(
image_path=product["hero_image"],
prompt=f"Slow 360 rotation of {product['name']}, studio lighting, white background",
model="seedance-1.0-pro",
duration=6,
)
save_task_mapping(product["id"], task_id)
Kombinér dette med guide til e-handelsvideo for tips til arbejdsgangen.
2. Automatiserede pipelines til sociale medier
Send populære emner ind i promptgeneratorer, generér daglig vertikal video, og push til en godkendelseskø:
for topic in get_trending_topics():
prompt = build_prompt(topic)
task_id = generate_video(prompt, duration=6, aspect_ratio="9:16")
queue_for_review(task_id, topic)
3. Marketing-A/B-test
Generér flere kreative varianter med metadatasporing:
variants = [
"Product hero shot with warm lighting, luxury feel",
"Product hero shot with bright lighting, energetic feel",
"Product hero shot with moody lighting, premium feel",
]
for i, variant in enumerate(variants):
generate_video(
prompt=variant,
duration=6,
metadata={"variant": chr(65 + i), "campaign": "spring-launch"},
)
Feltet metadata returneres i færdiggørelsespayloaden, så du automatisk kan sende resultater til den rette kampagnebøtte.
4. Interaktive applikationer
Byg videogenerering direkte ind i din egen app. En bruger skriver en prompt, din backend kalder API'en, og webhook'en leverer det færdige klip. Hele løkken tager ca. 90 sekunder.
Bundlinjen
Arteza API'en er enkel at integrere og produktionsklar. Simpel godkendelse, rene REST-semantikker, webhooks til asynkront arbejde og batch-endpoints til skalering. Har du brugt Stripe eller en anden moderne REST-API, vil du føle dig hjemme på ti minutter.
For priser og kreditoptimering, se prisoversigt. For den bredere produktoversigt, læs komplet guide til Seedance 2.0.
Klar til at begynde at bygge? Opret din gratis konto →
Læs videre: Komplet guide til Seedance 2.0 • Prisoversigt • Seedance 2.0 vs Seedance 1.0 • Seedance 2.0 vs Runway Gen-4
Prøv Seedance 2.0 - Lige nu
5 gratis generationer · Intet kreditkort påkrævet