Seedance 2.0 API
Bygg videogenerering inn i produktet ditt med asynkron opprettelse av oppgaver, status-polling, webhooks og kredittbevisst fakturering.
https://api.seedance2.aiPå denne siden
Introduksjon
API-et lar deg sende inn Seedance 2.0-videogenereringsoppgaver programmatisk. Genereringen er asynkron: opprett en oppgave, motta en oppgave-ID umiddelbart, og få deretter den ferdige videoen ved å polle oppgaveendepunktet eller ved å motta en webhook.
Asynkron oppgaver
Polling fungerer bra for utvikling og enkle integrasjoner.
Webhook klar
Webhooks anbefales for produksjon fordi de unngår aggressiv polling og varsler tjenesten din når en oppgave når en terminaltilstand.
Kredittbevisst
Kreditter reserveres ved innsending. Vellykkede oppgaver belastes fra den reservasjonen; mislykkede eller tidsavbrutte oppgaver refunderes automatisk.
Autentisering
Opprett en API-nøkkel i dashbordet og send den som et Bearer-token i hver forespørsel. Den fulle nøkkelen vises kun én gang ved oppretting.
Authorization: Bearer sk_live_xxxxxxxxBruk sk_live_-nøkler for produksjonstrafikk.
Bruk sk_test_-nøkler for sandkasseintegrasjonstesting med samme API-kontrakt.
Manglende, ugyldige eller tilbakekalte nøkler returnerer invalid_api_key med HTTP 401.
Lynstart
Send inn en oppgave først. Etter at oppgaven er akseptert, velger du én metode for resultatlevering: poll oppgaveendepunktet, eller motta terminalresultatet via en webhook.
Opprett en asynkron videooppgave og motta en oppgave-ID umiddelbart.
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
}
}'Hent oppgavestatusendepunktet når integrasjonen din foretrekker eksplisitt polling.
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Send callback_url ved innsending av oppgaven, og motta deretter ferdigstilling- eller feil-callbacks og oppdater din egen oppgavepost.
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 });
}Opprett en videooppgave
Opprett en videooppgave med POST /v1/videos/generations. Forespørselsteksten har en toppnivåmodell, en valgfri callback_url, og et inndataobjekt som inneholder prompt og genereringsinnstillinger.
/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
}
}'Genereringsmoduser
generation_type kontrollerer hvilke medieinndata som godtas og hvordan modellen tolker dem.
| Modus | Nødvendig media | Valgfritt media | Merknader |
|---|---|---|---|
text-to-video | prompt | varighet, sideforhold, oppløsning, seed | Kun tekstprompt. image_urls, video_urls og audio_urls er ikke nødvendig. |
image-to-video | prompt + image_urls-array (1-2 bilde-URL-er) | varighet, sideforhold, oppløsning, seed | image_urls må være en array. Oppgi 1 bilde-URL for den første rammen, eller 2 bilde-URL-er for den første og siste rammen. Video og lyd ignoreres. |
reference-to-video | prompt + minst ett bilde eller video | bilder, videoer og lyd innenfor materialegrensene | Lyd kan ikke brukes alene med tekst. Legg til minst ett bilde eller en video når lyd er oppgitt. |
text-to-videoBruk tekst-til-video når prompten er den eneste kreative inndataen. (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-videoBruk bilde-til-video når input.image_urls er en matrise med 1-2 bilde-URL-er: én URL angir den første rammen, og to URL-er angir den første og siste rammen. Video- og lydreferanser ignoreres i denne modusen. (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-videoBruk referanse-til-video for rikere retning med referansebilder, -videoer og -lyd. Lyd kan ikke brukes alene med tekst; inkluder minst ett bilde eller én video når lyd er oppgitt. (reference-to-video)
Materialegrenser
- Opptil 9 referansebilder
- Opptil 3 referansevideoer, total varighet <= 15 sekunder
- Opptil 3 referanselydfiler, total varighet <= 15 sekunder
- Maksimalt 12 materialer totalt på tvers av alle typer
Støttede inndatakombinasjoner
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"
}
}'Forespørselsparametere
Parameternavn, enum-verdier, endepunktstier og eksempler er en del av API-kontrakten. Beskrivelsene nedenfor forklarer hvordan hvert felt oppfører seg.
Topptekster
| Overskrift | Obligatorisk | Beskrivelse | Eksempel |
|---|---|---|---|
Authorization | Ja | Bearer API-nøkkel brukt til å autentisere forespørselen. | Bearer sk_live_xxx |
Content-Type | Ja | Alle skriveforespørsler bruker JSON. | application/json |
Toppnivåfelt
| Felt | Type | Obligatorisk | Standard | Område / Enum | Moduser | Eksempel |
|---|---|---|---|---|---|---|
modelModellvariant brukt for generering. | string | Ja | - | seedance-2-0 | seedance-2-0-fast | alle | seedance-2-0 |
callback_urlHTTPS-endepunkt som mottar callbacks for oppgavefullføring og feil. | string | Nei | - | HTTPS URL, ingen private nettverk | alle | https://your-domain.com/hook |
inputGenereringsinnstillinger og mediareferanser. | object | Ja | - | - | alle | - |
input.* felt
| Felt | Type | Obligatorisk | Standard | Område / Enum | Moduser | Eksempel |
|---|---|---|---|---|---|---|
input.promptTekstprompt som beskriver videoen som skal opprettes. | string | Ja | - | ikke-tom tekst | alle | a cat surfing |
input.generation_typeGenereringsmodus. Standard er tekst-til-video. (text-to-video) | string | Nei | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urlsOffentlig tilgjengelige bilde-URLer. For bilde-til-video, send 1 bilde for den første rammen eller 2 bilder for den første og siste rammen. For referanse-til-video, send opptil 9 bilder som visuelle referanser. (image-to-video) (reference-to-video) | string[] | Betinget | [] | Bilde-til-video: 1 eller 2 bilder. Referanse-til-video: opptil 9 bilder. (image-to-video) (reference-to-video) | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsOffentlig tilgjengelige referansevideoer kun for referanse-til-video. Du kan sende opptil 3 videofiler, og deres samlede avspillingstid må være 15 sekunder eller mindre. (reference-to-video) | string[] | Nei | [] | Opptil 3 videoer. Samlet videolengde må være 15 sekunder eller mindre. | reference-to-video | [] |
input.audio_urlsOffentlig tilgjengelige referanselydfiler kun for referanse-til-video. Du kan sende opptil 3 lydfiler, og deres samlede avspillingstid må være 15 sekunder eller mindre. (reference-to-video) | string[] | Nei | [] | Opptil 3 lydfiler. Samlet lydlengde må være 15 sekunder eller mindre. | reference-to-video | [] |
input.durationUtgangsvideolengde i sekunder. | int | Nei | 5 | 4-15 sekunder | alle | 5 |
input.aspect_ratioUtgangs sideforhold. adaptiv lar tjenesten slutte seg til det beste forholdet. | string | Nei | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptiv | alle | 16:9 |
input.resolutionUtgangsoppløsningsnivå. | string | Nei | 720p | 480p | 720p | 1080p | alle | 720p |
input.generate_audioOm modellen skal generere lyd når dette støttes. | boolean | Nei | true | sann | usann | alle | true |
input.watermarkOm vannmerke skal legges til. | boolean | Nei | false | sann | usann | alle | false |
input.web_searchOm nettsøksforsterkning skal tillates når dette støttes. | boolean | Nei | false | sann | usann | alle | false |
input.return_last_frameOm URL-en til siste ramme skal returneres når den er tilgjengelig. | boolean | Nei | false | sann | usann | alle | false |
input.seedDeterministisk seed. Bruk -1 for en tilfeldig seed. | int | Nei | -1 | -1 eller 0-4294967295 | alle | -1 |
Kreditter varierer etter oppløsning, varighet, modell, og om referanse-til-video inkluderer videoreferanser. Kredittverdien som returneres av opprettelsesforespørselen, er det faktiske reserverte beløpet for den oppgaven. (reference-to-video)
Se kredittpriserSvar
Dette er suksesssvaret fra POST /v1/videos/generations. Det betyr at oppgaven er akseptert og kreditter er reservert. Bruk taskId som returneres for å polle GET /v1/tasks/:id eller for å matche en ferdigstilling- eller feil-callback.
POST /v1/videos/generations suksesssvar
{
"taskId": "3f2aK9mR...",
"credits": 60
}Hent oppgavestatus
Bruk GET /v1/tasks/:id for å hente gjeldende oppgavestatus. Poll ikke mer enn én gang hvert 10. sekund. For produksjonssystemer, foretrekk webhooks.
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Fullført oppgavesvar
{
"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
}
}Mislykket oppgavesvar
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-0",
"billing_status": "refunded",
"credits": 60,
"failed_reason": "provider_failed"
}| Verdi | Betydning |
|---|---|
status=queued | Akseptert og venter på å bli sendt inn eller behandlet. |
status=generating | Leverandør behandler genereringen. |
status=completed | Video fullført og data.results inneholder resultat-URL-en. |
status=failed | Generering mislyktes eller tidsavbrutt. |
billing_status=reserved | Kreditter er reservert mens oppgaven pågår. |
billing_status=charged | Oppgaven lyktes og reservasjonen er avgjort. |
billing_status=refunded | Oppgaven mislyktes eller tidsavbrutt og kreditter ble returnert. |
billing_status=refund_failed | Refusjonstransaksjonen mislyktes og trenger manuell håndtering. |
Etter video_expires_at er data.results tom. Last ned og lagre filen før gyldighetsvinduet utløper.
Webhooks
Når callback_url er til stede, kaller Seedance endepunktet ditt når oppgaven er fullført eller mislyktes, og sender JSON-data som beskriver det endelige resultatet. Hvis endepunktet ditt returnerer en ikke-2xx-respons eller ikke svarer innen 15 sekunder, prøves leveringen opptil 5 ganger. Nye forsøk gjenbruker samme oppgave-ID, så avdupliser etter ID. Returner en 200-respons så snart du har registrert callback-dataene trygt.
Oppgavefullførings-callback
{
"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
}
}Oppgavefeil-callback
{
"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 });
}Valider callback-dataenes form, avdupliser etter ID, oppdater din egen oppgavepost, og svar raskt.
callback_url må være HTTPS og må ikke peke til private, loopback- eller link-local-nettverksområder.
Feil
POST /v1/videos/generations og GET /v1/tasks/:id returnerer denne feilformen når API-forespørselen i seg selv mislykkes, for eksempel ugyldige parametere, ugyldig API-nøkkel, utilstrekkelige kreditter, hastighetsbegrensning eller oppgave ikke funnet. Noen feil inkluderer ekstra felt som required, available eller retry_after avhengig av situasjonen.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this task.",
"required": 60,
"available": 12
}
}| Kode | HTTP | Betydning | Prøv igjen? |
|---|---|---|---|
invalid_request | 400 | Manglende eller ugyldige parametere. | Nei, korriger forespørselen. |
invalid_api_key | 401 | API-nøkkel mangler, er ugyldig eller tilbakekalt. | Nei, bruk en gyldig nøkkel. |
insufficient_credits | 402 | Ikke nok kreditter. Oppgaven er ikke akseptert eller belastet. | Etter påfylling. |
forbidden | 403 | API-nøkkelen mangler det nødvendige omfanget. | Nei. |
not_found | 404 | Oppgaven eksisterer ikke eller tilhører ikke nøkkeleieren. | Nei. |
rate_limited | 429 | Forespørselsfrekvens overskredet. | Ja, følg Retry-After. |
internal_error | 500 | Serverfeil. | Ja, prøv igjen senere. |
Hastighetsbegrensninger
Hastighetsbegrensninger brukes per API-nøkkel med et glidende vindu. Generering standardiseres til 60 forespørsler per minutt; statusforespørsler er mer lempelige. HTTP 429-svar inkluderer Retry-After.
Generering
60/min
Statusforespørsler
Mer lempelig
429-overskrift
Retry-After
Fakturering og kreditter
API-et bruker reserve ved innsending, belaste ved suksess, og refundere ved feil. Brukssider i dashbordet viser API-kredittlogg, oppgavelogger og tidsbasert bruksstatistikk.
Reservert
Kreditter sjekkes og reserveres når oppgaven aksepteres.
Belastet
Fullførte oppgaver avgjør den eksisterende reservasjonen.
Refundert
Mislykkede eller tidsavbrutte oppgaver returnerer de reserverte kredittene automatisk.
Inspiser bruk i dashbordet
Se API-logger, oppgave tidslinjer, kreditthistorikk og tidsbaserte bruksmålinger.