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

Generer en cinematic AI-video med et enkelt HTTP-request. Seedance 2.0 API'et bruger den samme generationspipeline som webplatformen, eksponeret som en ren REST-interface med Bearer-godkendelse, webhooks og batch-endpoints. Hvis du kan lave en POST-request, kan du bygge en videogeneringspipeline.
Denne guide dækker alt, hvad du skal vide for at integrere Seedance 2.0 i dine egne applikationer - godkendelse, endpoints, parametre, fejlhåndtering og produktionsklar kodeksempler i Python og JavaScript.
TL;DR - API i et øjekast
- Base URL:
https://api.arteza.ai/v1 - Godkendelse: Bearer-token i headeren
Authorization - Generering: Asynkron - indsend en opgave, poll eller webhook for fuldførelse
- Hastighedsbegrænsninger: 60 requests/minut, 5 samtidige genereringer
- Modeller: Seedance 2.0, 1.0 Pro, 1.0 Lite, Seedream v3/v4.5/v5 alt i et API
- Kreditomkostning: Samme dynamiske pricing per sekund som web-UI'et (~243-910 credits for 2.0)
5 gratis generationer · Intet kreditkort påkrævet
Hvad API'et faktisk kan gøre
Alt det, webinterfacet kan, kan API'et også. Tekst-til-video, billede-til-video, modelvalg, varlighedskontrol, billedformat, lydafmeldinger og adgang til hver model på platformen. Batch-endpoints til at generere mange klip på én gang. Webhooknotifikationer, så du ikke behøver at poll'e. Brugerdefinerede metadata, der gentages i resultater til sporing af A/B-test eller kampagnevarianter.
Understøttede modeller
Alle modeller bruger den samme API-overflade, blot med forskellige identifikatorer.
| Model | API-identifikator | Typiske credits |
|---|---|---|
| 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
Tilmeld dig, gå til Indstillinger → API-nøgler, og du er klar til at lave dit første POST-request. 50 gratis credits er inkluderet.
Få din API-nøgleGodkendelse på 30 sekunder
Generer en API-nøgle fra dashboardet under Indstillinger > API-nøgler. Send den som en Bearer-token:
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://api.arteza.ai/v1/account/credits
Svar:
{
"credits": 2750,
"tier": "popular"
}
Sikkerhedsregler, der betyder noget:
- Send aldrig din API-nøgle i client-side-kode eller offentlige lagre
- Gem den i miljøvariabler (
SEEDANCE_API_KEY) - Roter nøgler regelmæssigt fra dashboardet
- Hver nøgle arver kreditbalancen fra sin overordnede konto
Tekst-til-video-endepunktet
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 | string | Ja | Model-identifikator (f.eks. seedance-2.0) |
prompt | string | Ja | Scenebeskrivelse, maks 500 karakterer |
duration | integer | Nej | Videolængde i sekunder (4-15 for 2.0, standard 8) |
aspect_ratio | string | Nej | 16:9, 9:16 eller 1:1 (standard 16:9) |
audio | boolean | Nej | Inkluder synkroniseret lyd (standard true, kun 2.0) |
webhook_url | string | Nej | URL til at modtage fuldførelsesnotifikation |
metadata | object | Nej | Brugerdefinerede nøgle-værdi-par gentaget i resultater |
Succesfuld respons
{
"task_id": "task_abc123def456",
"status": "queued",
"model": "seedance-2.0",
"credits_charged": 607,
"estimated_time": 120,
"created_at": "2026-04-10T14:30:00Z"
}
Generingen er asynkron. Du får en task_id med det samme og kan poll'e for fuldførelse (eller bruge webhooks).
Billede-til-video-endepunktet
Animér et billede med en bevægelsesprompt.
POST /v1/generate/image-to-video
Content-Type: multipart/form-data
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
model | string | Ja | Model-identifikator |
image | fil | Ja | Kildebillede (JPEG, PNG, WebP; maks 10MB) |
prompt | string | Ja | Bevægelsebeskrivelse |
duration | integer | Nej | Videolængde i sekunder |
aspect_ratio | string | Nej | Output-billedformat |
audio | boolean | Nej | Inkluder lyd (kun Seedance 2.0) |
webhook_url | string | Nej | Webhook URL til fuldførelse |
Foretrækker 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"
}
Kontrol af genereringsstatus
Poll taskendepunktet for at kontrollere fremskridt.
GET /v1/tasks/{task_id}
Igangværende respons
{
"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"
}
Fuldført respons
{
"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 på result.video_url |
failed | Generering mislykkedes - se error-felt |
cancelled | Opgave annulleret af bruger |
Video-URL'er udløber om 24 timer. Download og gem dem på din egen infrastruktur omgående.

Vil du generere output som dette programmatisk? Du er 30 sekunder væk fra dit første API-kald. Få din API-nøgle gratis →
Produktionsklar Python-eksempel
Her er et komplet script, der indsender en generering, poll'er for fuldfø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"):
"""Submit a text-to-video task. Returns 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 until the task finishes. Returns 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 the video to 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
Det samme arbejdsflow 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`);
}
// Usage
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 kildebillede, skal du bruge multipart/form-data:
def generate_from_image(image_path, prompt, model="seedance-2.0", duration=8):
"""Generate video from a local image file."""
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 ikke kollapser
API'et bruger standard HTTP-statuskoder med strukturerede fejltekster.
| Status | Betydning | Almindelig årsag |
|---|---|---|
| 400 | Dårlig anmodning | Ugyldige parametre, prompt for lang |
| 401 | Uautoriseret | Manglende eller ugyldig API-nøgle |
| 402 | Betaling påkrævet | Utilstrækkelige credits |
| 404 | Ikke fundet | Ugyldig opgave-id |
| 429 | For mange anmodninger | Hastighedsbegrænsning overskredet |
| 500 | Intern serverfejl | Server-side problem - retry med backoff |
Fejlrespons form
{
"error": {
"code": "insufficient_credits",
"message": "Your account has 150 credits but this generation requires 607 credits.",
"required_credits": 607,
"available_credits": 150
}
}
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']}")
# Redirect the user to /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
Hastighedsbegrænsninger og produktionsbest practices
Grænserne
| Grænse | Værdi |
|---|---|
| Requests per minut | 60 |
| Samtidige genereringer | 5 |
| Maks promptlængde | 500 karakterer |
| Maks billedupload | 10 MB |
Fem praksis, der betyder noget i produktion
- Brug webhooks, ikke polling, i skala. Polling spilder API-kald. Webhooks fyres præcis én gang.
- Implementer eksponentiel backoff på 429-svar. Retry'et ikke øjeblikkeligt.
- Download video-URL'er omgående. De udløber om 24 timer. Gem dem på dine egne CDN.
- Valider input client-side. Fang promptlængde- og filstørrelsesproblemer før du ramler API'et.
- Kontroller kreditbalance før batch-job. En 402 midt i batch er irriterende. Query
/account/creditsførst.
Webhook-integration
Inkluder webhook_url i din generingsanmodning, og Arteza vil POST'e til den, når opgaven er fuldført.
{
"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 bodyen signeret med din webhook-hemmelighed. Verificer altid signaturen, før du behandler events.
Batch-generering
Når du har brug for flere klip, indsend dem som en batch og få é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 samtidigt op til din samtidighedsgrænse.
Stop med at læse. Start med at skibbe.
Hvert minut brugt på at læse docs er en video, din pipeline kunne generere. 50 gratis credits, intet kort påkrævet.
Start med at bygge nuFire use cases værd at bygge
1. E-commerce-produktvideoer i skala
Automatiser produktanimation for hele dit katalog. Loop over din produktdatabase, affyr et billede-til-video-kald pr. vare, 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)
Parring dette med e-handel videovejledning for arbejdsflowstips.
2. Automatiserede sociale medier-pipelines
Feed trending topics ind i prompt-generatorer, generer daglig vertical video, push til reviewkø:
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
Generer flere kreative varianter med metadata-sporing:
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 gentages i fuldførelse-payloaden, så du kan automatisk sende resultater til den rigtige kampagnespand.
4. Interaktive applikationer
Byg videogenerering direkte ind i din egen app. En bruger skriver en prompt, din backend kalder API'et, webhooken leverer det færdige klip. Hele løkken tager ~90 sekunder.
Konklusion
Arteza API'et er ligetil at integrere og produktionsklar. Simpel godkendelse, ren REST-semantik, webhooks til asynkront arbejde og batch-endpoints til skalering. Hvis du har brugt Stripe eller et hvilket som helst modernt REST API, vil du føle dig hjemme på ti minutter.
For prisoverslag og kreditoptimering, se prisguide. For det bredere produktoverblik, læs komplet Seedance 2.0-guide.
Klar til at starte med at bygge? Opret din gratis konto →
Fortsæt læsning: Komplet Seedance 2.0-guide • Prisguide • Seedance 2.0 vs Seedance 1.0 • Seedance 2.0 vs Runway Gen-4
Try Seedance 2.0 - Right Now
5 free generations · No credit card needed