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

Genereer een cinematografische AI-video met één HTTP-verzoek. De Seedance 2.0 API is dezelfde generatiepijplijn die het webplatform gebruikt, blootgesteld als een schone REST-interface met Bearer-authenticatie, webhooks en batcheindpunten. Als je een POST-verzoek kunt doen, 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 productierijpe codevoorbeelden in Python en JavaScript.
TL;DR - API in een oogopslag
- Base URL:
https://api.arteza.ai/v1 - Authenticatie: Bearer-token in de
Authorization-header - Generatie: Asynchroon: dien een taak in, poll of webhook voor voltooiing
- Snelheidslimieten: 60 verzoeken/minuut, 5 gelijktijdige generaties
- Modellen: Seedance 2.0, 1.0 Pro, 1.0 Lite, Seedream v3/v4.5/v5 allemaal in één API
- Kredietkosten: Dezelfde dynamische prijsstelling per seconde als de webgebruikersinterface (ongeveer 243-910 krediet voor 2.0)
5 gratis generaties · Geen creditcard nodig
Wat de API echt kan doen
Alles wat de webinterface kan, kan de API ook. Tekst-naar-video, afbeelding-naar-video, modelkeuze, duurcontrole, beeldverhouding, audioinschakeling en toegang tot elk model op het platform. Batcheindpunten voor het genereren van veel clips tegelijk. Webhookberichten zodat je niet hoeft te pollen. Aangepaste metagegevens die in resultaten worden teruggekaatst voor tracking van A/B-tests of campagnevarianten.
Ondersteunde modellen
Alle modellen gebruiken hetzelfde API-oppervlak, alleen met verschillende identifiers.
| Model | API-identifier | Typische krediet |
|---|---|---|
| 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 |
Grab an API key in 30 seconds
Sign up, go to Settings → API Keys, and you're ready to make your first POST request. 50 free credits included.
Get Your API KeyAuthenticatie in 30 seconden
Genereer een API-sleutel uit het dashboard onder Instellingen > API-sleutels. Stuur het als een Bearer-token:
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://api.arteza.ai/v1/account/credits
Antwoord:
{
"credits": 2750,
"tier": "popular"
}
Beveiligingsregels die belangrijk zijn:
- Zend je API-sleutel nooit in code aan de client-kant of openbare repositories
- Sla het op in omgevingsvariabelen (
SEEDANCE_API_KEY) - Roteer sleutels periodiek uit het dashboard
- Elke sleutel erft het kredietaldo van de bovenliggende account
Het tekst-naar-video-eindpunt
Dit is het eindpunt dat je het meest 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
}
Parameterverwijzing
| Parameter | Type | Vereist | Beschrijving |
|---|---|---|---|
model | string | Ja | Model-identifier (bijvoorbeeld seedance-2.0) |
prompt | string | Ja | Scènebeschrijving, max 500 tekens |
duration | integer | Nee | Videoduur 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 | Synchrone audio opnemen (standaard true, alleen 2.0) |
webhook_url | string | Nee | URL om voltooiingsmelding te ontvangen |
metadata | object | Nee | Aangepaste sleutelwaardeparen die in resultaten worden teruggekaatst |
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 krijgt onmiddellijk een task_id en poll voor 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 | Vereist | Beschrijving |
|---|---|---|---|
model | string | Ja | Model-identifier |
image | file | Ja | Bronafbeelding (JPEG, PNG, WebP; max 10MB) |
prompt | string | Ja | Bewegingsbeschrijving |
duration | integer | Nee | Videoduur in seconden |
aspect_ratio | string | Nee | Uitvoerbeeldverhouding |
audio | boolean | Nee | Audio opnemen (alleen Seedance 2.0) |
webhook_url | string | Nee | Voltooing webhook-URL |
Geef je liever geen bestand op? Geef in plaats daarvan een image_url door:
{
"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 taakeindpunt om de voortgang te controleren.
GET /v1/tasks/{task_id}
Antwoord in uitvoering
{
"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"
}
Voltooid antwoord
{
"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 om te starten |
processing | Generatie in uitvoering |
completed | Video klaar op result.video_url |
failed | Generatie mislukt: zie error-veld |
cancelled | Taak geannuleerd door gebruiker |
Video-URL's verlopen na 24 uur. Download en bewaar ze onmiddellijk op je eigen infrastructuur.

Wil je output als deze programmatisch genereren? Je bent 30 seconden verwijderd van je eerste API-aanroep. Krijg gratis je API-sleutel ->
Productierijp Python-voorbeeld
Hier is een volledig script dat een generatie indient, pollt op voltooiing 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"):
"""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) voorbeeld
Dezelfde workflow 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`);
}
// 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}`);
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):
"""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"]
Foutafhandeling die niet omvalt
De API gebruikt standaard HTTP-statuscodes met gestructureerde foutlichamen.
| Status | Betekenis | Veelvoorkomende oorzaak |
|---|---|---|
| 400 | Slecht verzoek | Ongeldige parameters, prompt te lang |
| 401 | Niet geautoriseerd | Ontbrekende of ongeldige API-sleutel |
| 402 | Betaling vereist | Onvoldoende krediet |
| 404 | Niet gevonden | Ongeldige taak-ID |
| 429 | Te veel verzoeken | Snelheidslimiet overschreden |
| 500 | Interne serverfout | Serverzijdige probleem: opnieuw proberen met backoff |
Foutantwoordvorm
{
"error": {
"code": "insufficient_credits",
"message": "Your account has 150 credits but this generation requires 607 credits.",
"required_credits": 607,
"available_credits": 150
}
}
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']}")
# 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
Snelheidslimieten en best practices voor productie
De limieten
| Limiet | Waarde |
|---|---|
| Verzoeken per minuut | 60 |
| Gelijktijdige generaties | 5 |
| Max promptlengte | 500 tekens |
| Max afbeeldingupload | 10 MB |
Vijf praktijken die ertoe doen in productie
- Gebruik webhooks, niet polling, op schaal. Polling verspilt API-aanroepen. Webhooks vuren precies eenmaal af.
- Implementeer exponentiële backoff op 429-reacties. Probeer niet onmiddellijk opnieuw.
- Download video-URL's snel. Ze verlopen na 24 uur. Sla ze op op je eigen CDN.
- Valideer invoer aan de client-kant. Vang problemen met promptlengte en bestandsgrootte op voordat je de API raakt.
- Controleer kredietaldo vóór batchklussen. Een 402 in het midden van een batch is vervelend. Query
/account/creditseerst.
Webhookintegratie
Voeg webhook_url toe aan je generatieverzoek en Arteza zal ernaar POST'en wanneer de taak is voltooid.
{
"model": "seedance-2.0",
"prompt": "...",
"webhook_url": "https://yourapp.com/api/seedance/webhook"
}
Webhookpayload
{
"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"
}
Webhookverzoeken bevatten een X-Seedance-Signature-header: een HMAC-SHA256-handtekening van de body ondertekend met je webhooksecret. Verifieer altijd de handtekening voordat je evenementen verwerkt.
Batchgeneratie
Wanneer je meerdere clips nodig hebt, dien ze in als een batch en krijg 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 je gelijktijdigheidslimiet.
Stop reading. Start shipping.
Every minute spent reading docs is a video your pipeline could be generating. 50 free credits, no card required.
Start Building NowVier gebruiksscenario's die het waard zijn om te bouwen
1. E-commerce productvideos op schaal
Automatiseer productanimatie voor je volledige catalogus. Loop over je productdatabase, fire een afbeelding-naar-video-aanroep per item, sla de resulterende URL's op naast de 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)
Koppel dit aan de e-commerce videogids voor workflowtips.
2. Geautomatiseerde social media pijplijnen
Feed trendende onderwerpen in promptgenerators, genereer dagelijkse verticale video, push naar 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-tests
Genereer meerdere creatieve varianten met metagegevenstracering:
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 metadata-veld wordt teruggekaatst in de voltooiingspayload, zodat je resultaten automatisch naar de juiste campagnebucket kunt routeren.
4. Interactieve applicaties
Bouw videogeneratie rechtstreeks in je eigen app. Een gebruiker typt een prompt, je backend roept de API aan, de webhook levert de afgewerkte clip. De hele loop duurt ongeveer 90 seconden.
De bodem
De Arteza API is eenvoudig in te integreren en productierijp. Eenvoudige authenticatie, schone REST-semantiek, webhooks voor asynchroon werk en batcheindpunten voor schaal. Als je Stripe of een ander modern REST API hebt gebruikt, voel je je in tien minuten thuis.
Voor prijsstelling en kredietoptimalisatie, zie de prijsgids. Voor het bredere productoverzicht, lees de complete Seedance 2.0-gids.
Klaar om te gaan bouwen? Maak je gratis account ->
Blijf lezen: Complete Seedance 2.0-gids • Prijsgids • 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