Seedance 2.0 API: hoe je programmatisch AI-video's genereert
Een ontwikkelaarsgids voor de Seedance 2.0 API: authenticatie, endpoints, aanvraagformaten, codevoorbeelden in Python en JavaScript, foutafhandeling en best practices.

Genereer een cinematische AI-video met één HTTP-verzoek. De Seedance 2.0 API is dezelfde generatiepijplijn als het webplatform, beschikbaar als een overzichtelijke REST-interface met Bearer-authenticatie, webhooks en batch-eindpunten. Als je een POST-verzoek kunt maken, kun je een videogeneratiepijplijn bouwen.
Deze gids behandelt alles wat je nodig hebt om Seedance 2.0 in je eigen applicaties te integreren: authenticatie, eindpunten, parameters, foutafhandeling en productieklare codevoorbeelden in Python en JavaScript.
TL;DR - API in één oogopslag
- Basis-URL:
https://api.arteza.ai/v1 - Authenticatie: Bearer-token in de
Authorization-header - Generatie: Asynchroon - dien een taak in, poll of gebruik webhooks voor voltooiing
- Snelheidslimieten: 60 verzoeken per minuut, 5 gelijktijdige generaties
- Modellen: Seedance 2.0, 1.0 Pro, 1.0 Lite, Seedream v3/v4.5/v5 allemaal in één API
- Creditkosten: Dezelfde dynamische prijs per seconde als de webinterface (19-351 credits voor 2.0)
5 gratis generaties · Geen creditcard nodig
Wat de API daadwerkelijk kan doen
Alles wat de webinterface doet, doet de API ook. Tekst-naar-video, afbeelding-naar-video, modelkeuze, duurregeling, beeldverhouding, audioschakelaar en toegang tot elk model op het platform. Batch-eindpunten voor het tegelijk genereren van meerdere clips. Webhook-meldingen zodat je niet hoeft te pollen. Aangepaste metadata die in de resultaten wordt teruggestuurd voor het bijhouden van A/B-tests of campagnevarianten.
Ondersteunde modellen
Alle modellen gebruiken dezelfde API-interface, maar met verschillende identificatoren.
| Model | API-identificator | Typische 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 |
Haal in 30 seconden een API-sleutel op
Maak een account aan, ga naar Instellingen → API-sleutels en je bent klaar om je eerste POST-verzoek te doen. Gratis credits inbegrepen.
Haal je API-sleutel opAuthenticatie in 30 seconden
Genereer een API-sleutel vanuit het dashboard onder Instellingen > API-sleutels. Stuur deze als Bearer-token:
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://api.arteza.ai/v1/account/credits
Antwoord:
{
"credits": 2750,
"tier": "popular"
}
Beveiligingsregels die ertoe doen:
- Zet je API-sleutel nooit in client-side code of openbare repositories
- Bewaar hem in omgevingsvariabelen (
SEEDANCE_API_KEY) - Vernieuw sleutels regelmatig vanuit het dashboard
- Elke sleutel erft het creditsaldo van het bovenliggende account
Het tekst-naar-video-eindpunt
Dit is het eindpunt dat je het vaakst zult gebruiken.
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
}
Parameterreferentie
| Parameter | Type | Verplicht | Omschrijving |
|---|---|---|---|
model | string | Ja | Modelidentificator (bijv. seedance-2.0) |
prompt | string | Ja | Scènebeschrijving, max. 500 tekens |
duration | integer | Nee | Videolengte in seconden (4-15 voor 2.0, standaard 8) |
aspect_ratio | string | Nee | 16:9, 9:16 of 1:1 (standaard 16:9) |
audio | boolean | Nee | Gesynchroniseerde audio toevoegen (standaard true, alleen 2.0) |
webhook_url | string | Nee | URL voor voltooiingsmelding |
metadata | object | Nee | Aangepaste sleutel-waardeparen die in resultaten worden teruggestuurd |
Succesvol antwoord
{
"task_id": "task_abc123def456",
"status": "queued",
"model": "seedance-2.0",
"credits_charged": 607,
"estimated_time": 120,
"created_at": "2026-04-10T14:30:00Z"
}
De generatie is asynchroon. Je ontvangt direct een task_id en peilt naar voltooiing (of gebruik webhooks).
Het afbeelding-naar-video-eindpunt
Animeer een bronafbeelding met een bewegingsprompt.
POST /v1/generate/image-to-video
Content-Type: multipart/form-data
| Veld | Type | Verplicht | Omschrijving |
|---|---|---|---|
model | string | Ja | Modelidentificator |
image | bestand | Ja | Bronafbeelding (JPEG, PNG, WebP; max. 10 MB) |
prompt | string | Ja | Bewegingsbeschrijving |
duration | integer | Nee | Videolengte in seconden |
aspect_ratio | string | Nee | Uitvoerbeeldverhouding |
audio | boolean | Nee | Audio toevoegen (alleen Seedance 2.0) |
webhook_url | string | Nee | Webhook-URL bij voltooiing |
Liever geen bestand uploaden? Geef in plaats daarvan een image_url mee:
{
"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"
}
Generatiestatus controleren
Poll het taakaindpunt om de voortgang te bekijken.
GET /v1/tasks/{task_id}
Antwoord bij verwerking
{
"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"
}
Antwoord bij voltooiing
{
"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"
}
Statuswaarden
| Status | Betekenis |
|---|---|
queued | Taak ontvangen, wacht op start |
processing | Generatie bezig |
completed | Video klaar op result.video_url |
failed | Generatie mislukt - zie het veld error |
cancelled | Taak geannuleerd door gebruiker |
Video-URL's verlopen na 24 uur. Download en sla ze snel op in je eigen infrastructuur.

Wil je dit soort uitvoer programmatisch genereren? Je bent 30 seconden verwijderd van je eerste API-aanroep. Ontvang je gratis API-sleutel →
Productieklaar Python-voorbeeld
Hier is een compleet script dat een generatie indient, op voltooiing peilt en het resultaat downloadt.
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"):
"""Dien een tekst-naar-video-taak in. Geeft task_id terug."""
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 totdat de taak klaar is. Geeft resultaat-dict terug."""
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 de video naar schijf."""
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)-voorbeeld
Dezelfde werkwijze in modern Node.js met 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`);
}
// Gebruik
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}`);
Afbeelding-naar-video in Python
Wanneer je een bronafbeelding moet uploaden, gebruik je multipart/form-data:
def generate_from_image(image_path, prompt, model="seedance-2.0", duration=8):
"""Genereer video vanuit een lokaal afbeeldingsbestand."""
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"]
Foutafhandeling die niet omvalt
De API gebruikt standaard HTTP-statuscodes met gestructureerde foutberichten.
| Status | Betekenis | Veelvoorkomende oorzaak |
|---|---|---|
| 400 | Ongeldig verzoek | Ongeldige parameters, prompt te lang |
| 401 | Niet geautoriseerd | Ontbrekende of ongeldige API-sleutel |
| 402 | Betaling vereist | Onvoldoende credits |
| 404 | Niet gevonden | Ongeldige taak-ID |
| 429 | Te veel verzoeken | Snelheidslimiet overschreden |
| 500 | Interne serverfout | Probleem aan serverzijde - opnieuw proberen met backoff |
Foutantwoordstructuur
{
"error": {
"code": "insufficient_credits",
"message": "Your account has 8 credits but this generation requires 24 credits.",
"required_credits": 24,
"available_credits": 8
}
}
Aanbevolen patroon
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']}")
# Stuur de gebruiker door naar /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
Snelheidslimieten en best practices voor productie
De limieten
| Limiet | Waarde |
|---|---|
| Verzoeken per minuut | 60 |
| Gelijktijdige generaties | 5 |
| Maximale promptlengte | 500 tekens |
| Maximale afbeeldingsupload | 10 MB |
Vijf praktijken die in productie ertoe doen
- Gebruik webhooks, geen polling, op schaal. Polling verspilt API-aanroepen. Webhooks worden precies één keer geactiveerd.
- Implementeer exponentiële backoff bij 429-antwoorden. Probeer niet direct opnieuw.
- Download video-URL's snel. Ze verlopen na 24 uur. Sla ze op in je eigen CDN.
- Valideer invoer aan de clientzijde. Vang problemen met promptlengte en bestandsgrootte op voordat je de API aanroept.
- Controleer het creditsaldo vóór batchtaken. Een 402 halverwege een batch is vervelend. Raadpleeg eerst
/account/credits.
Webhook-integratie
Voeg webhook_url toe aan je generatieverzoek en Arteza stuurt een POST-verzoek zodra de taak voltooid is.
{
"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-verzoeken bevatten een X-Seedance-Signature-header: een HMAC-SHA256-handtekening van de body, ondertekend met je webhookgeheim. Verifieer altijd de handtekening voordat je gebeurtenissen verwerkt.
Batchgeneratie
Wanneer je meerdere clips nodig hebt, dien je ze als batch in en ontvang je één webhook wanneer alles klaar is.
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"
}
Taken in een batch worden gelijktijdig verwerkt tot aan je gelijktijdigheidslimiet.
Stop met lezen. Begin met bouwen.
Elke minuut die je aan documentatie besteedt, is een video die je pijplijn al had kunnen genereren. Gratis credits, geen creditcard vereist.
Begin nu met bouwenVier gebruiksscenario's die de moeite waard zijn om te bouwen
1. E-commerce productvideo's op schaal
Automatiseer productanimatie voor je hele catalogus. Loop door je productdatabase, stuur per item een afbeelding-naar-video-aanroep en sla de resulterende URL's op naast het productrecord.
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)
Combineer dit met de gids voor e-commercevideo's voor tips over de werkwijze.
2. Geautomatiseerde sociale-mediapijplijnen
Voer trending onderwerpen in prompt-generators en genereer dagelijks verticale video's voor een beoordelingswachtrij:
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-testen
Genereer meerdere creatieve varianten met metadatatracering:
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"},
)
Het veld metadata wordt teruggestuurd in de voltooiingspayload, zodat je resultaten automatisch naar het juiste campagnesegment kunt routeren.
4. Interactieve applicaties
Verwerk videogeneratie rechtstreeks in je eigen app. Een gebruiker typt een prompt, je backend roept de API aan en de webhook levert de afgewerkte clip. De hele cyclus duurt ongeveer 90 seconden.
De conclusie
De Arteza API is eenvoudig te integreren en productieklaar. Eenvoudige authenticatie, duidelijke REST-semantiek, webhooks voor asynchroon werk en batch-eindpunten voor schaal. Als je Stripe of een andere moderne REST API hebt gebruikt, voel je je binnen tien minuten thuis.
Voor prijzen en creditoptimalisatie, zie de prijzengids. Voor een breder productoverzicht, lees de complete Seedance 2.0-gids.
Klaar om te beginnen met bouwen? Maak je gratis account aan →
Lees verder: Complete Seedance 2.0-gids • Prijzengids • Seedance 2.0 vs Seedance 1.0 • Seedance 2.0 vs Runway Gen-4
Seedance 2.0 uitproberen - Nu!
5 gratis generaties · Geen creditcard nodig