Seedance 2.0 API
Bouw videogeneratie in uw product met het maken van asynchrone taken, status polling, webhooks en credit-gebaseerde facturatie.
https://api.seedance2.aiOp deze pagina
Introductie
De API stelt u in staat om Seedance 2.0 videogeneratietaken programmatisch in te dienen. Generatie is asynchroon: creëer een taak, ontvang onmiddellijk een taak-ID, en verkrijg vervolgens de voltooide video door het taakeindpunt te peilen of door een webhook te ontvangen.
Asynchrone taken
Polling werkt goed voor ontwikkeling en eenvoudige integraties.
Webhook klaar
Webhooks worden aanbevolen voor productie omdat ze agressieve polling vermijden en uw service op de hoogte stellen wanneer een taak een terminalstatus bereikt.
Credietbewust
Credits worden gereserveerd bij inzending. Succesvolle taken worden van die reservering afgeschreven; mislukte of time-out taken worden automatisch terugbetaald.
Authenticatie
Maak een API-sleutel aan in het dashboard en stuur deze als een Bearer token bij elk verzoek. De volledige sleutel wordt slechts eenmaal getoond bij aanmaak.
Authorization: Bearer sk_live_xxxxxxxxGebruik sk_live_-sleutels voor productieverkeer.
Gebruik sk_test_-sleutels voor sandbox integratietests met hetzelfde API-contract.
Ontbrekende, ongeldige of ingetrokken sleutels retourneren invalid_api_key met HTTP 401.
Snelstart
Dien eerst een taak in. Nadat de taak is geaccepteerd, kiest u een methode voor het leveren van resultaten: peil het taakeindpunt, of ontvang het terminale resultaat via een webhook.
Maak een asynchrone videotask aan en ontvang onmiddellijk een taak-ID.
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cat surfing on a neon wave, cinematic lighting",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false,
"seed": -1
}
}'Haal het taakstatus-eindpunt op wanneer uw integratie expliciete polling verkiest.
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Geef callback_url door bij het indienen van de taak, en ontvang vervolgens voltooiings- of mislukte callbacks en update uw eigen taakrecord.
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrl = callbackData.data.results[0];
// Save the video URL or update your own task record here.
}
if (callbackData.status === "failed") {
const errorMessage = callbackData.data.failed_reason;
// Mark your own task record as failed here.
}
return new Response(null, { status: 200 });
}Een videotask aanmaken
Creëer een videotask met POST /v1/videos/generations. De request body heeft een top-level model, een optionele callback_url, en een input object met prompt en generatie-instellingen.
/v1/videos/generationscurl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cat surfing on a neon wave, cinematic lighting",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false,
"seed": -1
}
}'Generatiemodi
generation_type bepaalt welke mediainvoer wordt geaccepteerd en hoe het model deze interpreteert.
| Modus | Vereiste media | Optionele media | Opmerkingen |
|---|---|---|---|
text-to-video | prompt | duur, beeldverhouding, resolutie, seed | Alleen tekstprompt. image_urls, video_urls en audio_urls zijn niet nodig. |
image-to-video | prompt + image_urls array (1-2 afbeeldings-URL's) | duur, beeldverhouding, resolutie, seed | image_urls moet een array zijn. Geef 1 afbeeldings-URL op voor het eerste frame, of 2 afbeeldings-URL's voor het eerste en laatste frame. Video en audio worden genegeerd. |
reference-to-video | prompt + ten minste één afbeelding of video | afbeeldingen, video's en audio binnen materiële limieten | Audio kan niet alleen met tekst worden gebruikt. Voeg ten minste één afbeelding of video toe wanneer audio wordt geleverd. |
text-to-videoGebruik tekst-naar-video wanneer de prompt de enige creatieve invoer is. (text-to-video)
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cinematic drone shot over a futuristic coastal city at sunrise",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false,
"seed": -1
}
}'image-to-videoGebruik afbeelding-naar-video wanneer input.image_urls een array is met 1-2 afbeeldings-URL's: één URL stelt het eerste frame in, en twee URL's stellen het eerste en laatste frame in. Video- en audio-referenties worden in deze modus genegeerd. (image-to-video)
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"input": {
"prompt": "the subject turns toward camera, soft studio motion",
"generation_type": "image-to-video",
"image_urls": ["https://your.cdn.com/first-frame.jpg"],
"duration": 5,
"resolution": "720p"
}
}'reference-to-videoGebruik referentie-naar-video voor rijkere sturing met referentieafbeeldingen, -video's en -audio. Audio kan niet alleen met tekst worden gebruikt; voeg ten minste één afbeelding of video toe wanneer audio wordt geleverd. (reference-to-video)
Materiële limieten
- Tot 9 referentieafbeeldingen
- Tot 3 referentievideo's, totale duur <= 15 seconden
- Tot 3 referentieaudiobestanden, totale duur <= 15 seconden
- Maximaal 12 materialen in totaal over alle typen
Ondersteunde invoercombinaties
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"input": {
"prompt": "use the product from image 1 and the camera motion from the reference video",
"generation_type": "reference-to-video",
"image_urls": ["https://your.cdn.com/product.jpg"],
"video_urls": ["https://your.cdn.com/camera-motion.mp4"],
"audio_urls": [],
"duration": 8,
"resolution": "1080p"
}
}'Verzoekparameters
Parameternamen, opsommingswaarden, eindpuntpaden en voorbeelden maken deel uit van het API-contract. De onderstaande beschrijvingen leggen uit hoe elk veld zich gedraagt.
Headers
| Header | Vereist | Beschrijving | Voorbeeld |
|---|---|---|---|
Authorization | Ja | Bearer API-sleutel gebruikt om het verzoek te authentiseren. | Bearer sk_live_xxx |
Content-Type | Ja | Alle schrijfverzoeken gebruiken JSON. | application/json |
Top-level velden
| Veld | Type | Vereist | Standaard | Bereik / Opsomming | Modi | Voorbeeld |
|---|---|---|---|---|---|---|
modelModelvariant gebruikt voor generatie. | string | Ja | - | seedance-2-0 | seedance-2-0-fast | alle | seedance-2-0 |
callback_urlHTTPS-eindpunt dat task voltooiings- en mislukte callbacks ontvangt. | string | Nee | - | HTTPS URL, geen privénetwerken | alle | https://your-domain.com/hook |
inputGeneratie-instellingen en mediareferenties. | object | Ja | - | - | alle | - |
input.* velden
| Veld | Type | Vereist | Standaard | Bereik / Opsomming | Modi | Voorbeeld |
|---|---|---|---|---|---|---|
input.promptTekstprompt die de te maken video beschrijft. | string | Ja | - | niet-lege tekst | alle | a cat surfing |
input.generation_typeGeneratiemodus. Standaard tekst-naar-video. (text-to-video) | string | Nee | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urlsOpenbaar bereikbare afbeeldings-URL's. Voor afbeelding-naar-video, stuur 1 afbeelding voor het eerste frame of 2 afbeeldingen voor het eerste en laatste frame. Voor referentie-naar-video, stuur tot 9 afbeeldingen als visuele referenties. (image-to-video) (reference-to-video) | string[] | Conditioneel | [] | Afbeelding-naar-video: 1 of 2 afbeeldingen. Referentie-naar-video: tot 9 afbeeldingen. (image-to-video) (reference-to-video) | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsOpenbaar bereikbare referentievideo's alleen voor referentie-naar-video. U kunt tot 3 videobestanden verzenden, en hun gecombineerde afspeeltijd moet 15 seconden of minder zijn. (reference-to-video) | string[] | Nee | [] | Tot 3 video's. Gecombineerde videolengte moet 15 seconden of minder zijn. | reference-to-video | [] |
input.audio_urlsOpenbaar bereikbare referentie audiobestanden alleen voor referentie-naar-video. U kunt tot 3 audiobestanden verzenden, en hun gecombineerde afspeeltijd moet 15 seconden of minder zijn. (reference-to-video) | string[] | Nee | [] | Tot 3 audiobestanden. Gecombineerde audiolengte moet 15 seconden of minder zijn. | reference-to-video | [] |
input.durationOutput videolengte in seconden. | int | Nee | 5 | 4-15 seconden | alle | 5 |
input.aspect_ratioOutput beeldverhouding. adaptive laat de service de beste verhouding afleiden. | string | Nee | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptief | alle | 16:9 |
input.resolutionOutput resolutieniveau. | string | Nee | 720p | 480p | 720p | 1080p | alle | 720p |
input.generate_audioOf het model audio moet genereren wanneer ondersteund. | boolean | Nee | true | true | false | alle | true |
input.watermarkOf een watermerk moet worden toegevoegd. | boolean | Nee | false | true | false | alle | false |
input.web_searchOf webzoekopdrachtaugmentatie moet worden toegestaan wanneer ondersteund. | boolean | Nee | false | true | false | alle | false |
input.return_last_frameOf de URL van het laatste frame moet worden geretourneerd wanneer beschikbaar. | boolean | Nee | false | true | false | alle | false |
input.seedDeterministische seed. Gebruik -1 voor een willekeurige seed. | int | Nee | -1 | -1 of 0-4294967295 | alle | -1 |
Credits variëren per resolutie, duur, model en of referentie-naar-video videoreferenties bevat. De creditwaarde die wordt geretourneerd door de aanmaakrespons is het daadwerkelijke gereserveerde bedrag voor die taak. (reference-to-video)
Bekijk creditprijzenAntwoord
Dit is de succesrespons van POST /v1/videos/generations. Het betekent dat de taak is geaccepteerd en credits zijn gereserveerd. Gebruik de geretourneerde taskId om GET /v1/tasks/:id te peilen of om een voltooiings- of mislukte callback te matchen.
POST /v1/videos/generations succesrespons
{
"taskId": "3f2aK9mR...",
"credits": 60
}Taskstatus ophalen
Gebruik GET /v1/tasks/:id om de huidige taakstatus op te halen. Peil niet meer dan eens per 10 seconden. Voor productiesystemen, geef de voorkeur aan webhooks.
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Voltooide taakrespons
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-0",
"billing_status": "charged",
"credits": 60,
"failed_reason": null,
"data": {
"results": ["https://cdn.seedance2.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Mislukte taakrespons
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-0",
"billing_status": "refunded",
"credits": 60,
"failed_reason": "provider_failed"
}| Waarde | Betekenis |
|---|---|
status=queued | Geaccepteerd en wachtend om te worden ingediend of verwerkt. |
status=generating | Provider verwerkt de generatie. |
status=completed | Video voltooid en data.results bevat de resultaat-URL. |
status=failed | Generatie mislukt of time-out. |
billing_status=reserved | Credits zijn gereserveerd terwijl de taak bezig is. |
billing_status=charged | Taak geslaagd en de reservering is afgehandeld. |
billing_status=refunded | Taak mislukt of time-out en credits zijn teruggestort. |
billing_status=refund_failed | Terugstortingstransactie mislukt en vereist handmatige afhandeling. |
Na video_expires_at is data.results leeg. Download en sla het bestand op voordat de geldigheidsperiode afloopt.
Webhooks
Wanneer callback_url aanwezig is, roept Seedance uw eindpunt aan wanneer de taak is voltooid of mislukt, en stuurt JSON-gegevens die het uiteindelijke resultaat beschrijven. Als uw eindpunt een niet-2xx-respons retourneert of niet binnen 15 seconden reageert, wordt de levering maximaal 5 keer opnieuw geprobeerd. Nieuwe pogingen gebruiken dezelfde taak-ID, dus dedupliceer op ID. Retourneer een 200-respons zodra u de callback-gegevens veilig hebt opgeslagen.
Callback voor taakvoltooiing
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-0",
"data": {
"results": ["https://cdn.seedance2.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Callback voor taakfout
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-0",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 60
}
}export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrl = callbackData.data.results[0];
// Save the video URL or update your own task record here.
}
if (callbackData.status === "failed") {
const errorMessage = callbackData.data.failed_reason;
// Mark your own task record as failed here.
}
return new Response(null, { status: 200 });
}Valideer de callback-gegevensstructuur, dedupliceer op ID, werk uw eigen taakrecord bij en reageer snel.
callback_url moet HTTPS zijn en mag niet verwijzen naar privé-, loopback- of link-lokale netwerkbereiken.
Fouten
POST /v1/videos/generations en GET /v1/tasks/:id retourneren deze foutstructuur wanneer de API-aanvraag zelf mislukt, zoals ongeldige parameters, ongeldige API-sleutel, onvoldoende credits, rate limiting, of taak niet gevonden. Sommige fouten bevatten extra velden zoals required, available, of retry_after, afhankelijk van de situatie.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this task.",
"required": 60,
"available": 12
}
}| Code | HTTP | Betekenis | Opnieuw proberen? |
|---|---|---|---|
invalid_request | 400 | Ontbrekende of ongeldige parameters. | Nee, corrigeer het verzoek. |
invalid_api_key | 401 | API-sleutel ontbreekt, is ongeldig of is ingetrokken. | Nee, gebruik een geldige sleutel. |
insufficient_credits | 402 | Niet genoeg credits. De taak wordt niet geaccepteerd of in rekening gebracht. | Na opladen. |
forbidden | 403 | API-sleutel mist de vereiste scope. | Nee. |
not_found | 404 | Taak bestaat niet of behoort niet toe aan de sleuteleigenaar. | Nee. |
rate_limited | 429 | Verzoekfrequentie overschreden. | Ja, volg Retry-After. |
internal_error | 500 | Serverfout. | Ja, probeer later opnieuw. |
Rate limits
Rate limits worden per API-sleutel toegepast met een sliding window. Generatie is standaard 60 verzoeken per minuut; statusvragen zijn toleranter. HTTP 429-antwoorden bevatten Retry-After.
Generatie
60/min
Statusvragen
Toleranter
429 header
Retry-After
Facturering & credits
De API gebruikt reserve met submit, charge op succes, en refund bij mislukking. Dashboard gebruikslogboeken tonen API-credithistorie, taaklogs en tijdsgebonden gebruiksstatistieken.
Gereserveerd
Credits worden gecontroleerd en gereserveerd wanneer de taak wordt geaccepteerd.
In rekening gebracht
Voltooide taken verrekenen de bestaande reservering.
Terugbetaald
Mislukte of getimede taken retourneren de gereserveerde credits automatisch.
Gebruik controleren in het dashboard
Bekijk API-logs, taaktijdlijnen, credithistorie en tijdsgebonden gebruiksstatistieken.