Seedance 2.0 API
Bygg in videogenerering i din produkt med asynkron uppgiftsskapandning, statusavfrågning, webhooks och kreditmedveten fakturering.
https://api.seedance2.aiPå denna sida
Introduktion
API:et låter dig programmatiskt skicka in Seedance 2.0-videogenereringsuppgifter. Genereringen är asynkron: skapa en uppgift, få ett uppgifts-ID omedelbart, få sedan den färdiga videon genom att avfråga uppgiftsslutpunkten eller genom att ta emot en webhook.
Asynkrona uppgifter
Avfrågning fungerar bra för utveckling och enkla integrationer.
Webhook redo
Webhooks rekommenderas för produktion eftersom de undviker aggressiv avfrågning och meddelar din tjänst när en uppgift når ett terminaltillstånd.
Kreditmedveten
Krediter reserveras vid inskickning. Lyckade uppgifter debiteras från denna reservation; misslyckade eller tidsbegränsade uppgifter återbetalas automatiskt.
Autentisering
Skapa en API-nyckel i instrumentpanelen och skicka den som en Bearer-token vid varje begäran. Den fullständiga nyckeln visas endast en gång vid skapandet.
Authorization: Bearer sk_live_xxxxxxxxAnvänd sk_live_-nycklar för produktionstrafik.
Använd sk_test_-nycklar för sandbox-integrationstestning med samma API-kontrakt.
Saknade, ogiltiga eller återkallade nycklar returnerar invalid_api_key med HTTP 401.
Snabbstart
Skicka in en uppgift först. När uppgiften är accepterad väljer du en leveransmetod för resultatet: avfråga uppgiftsslutpunkten, eller ta emot terminalresultatet via en webhook.
Skapa en asynkron videouppgift och få ett uppgifts-ID omedelbart.
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
}
}'Hämta uppgiftsstatus-slutpunkten när din integration föredrar explicit avfrågning.
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Skicka callback_url vid inskickning av uppgiften, ta sedan emot callbacks för slutförande eller misslyckande och uppdatera din egen uppgiftslogg.
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 });
}Skapa en videouppgift
Skapa en videouppgift med POST /v1/videos/generations. Begärandekroppen har en modell på högsta nivån, en valfri callback_url och ett inputobjekt som innehåller prompt- och genereringsinställningar.
/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
}
}'Genereringslägen
generation_type styr vilka medieinmatningar som accepteras och hur modellen tolkar dem.
| Läge | Obligatoriskt media | Valfritt media | Anmärkningar |
|---|---|---|---|
text-to-video | prompt | duration, aspect_ratio, resolution, seed | Endast textprompt. image_urls, video_urls och audio_urls behövs inte. |
image-to-video | prompt + image_urls array (1-2 bild-URL:er) | duration, aspect_ratio, resolution, seed | image_urls måste vara en array. Ange 1 bild-URL för den första ramen, eller 2 bild-URL:er för den första och sista ramen. Video och ljud ignoreras. |
reference-to-video | prompt + minst en bild eller video | bilder, videor och ljud inom materialgränserna | Ljud kan inte användas ensamt med text. Lägg till minst en bild eller video när ljud anges. |
text-to-videoAnvänd text-till-video när prompten är den enda kreativa inmatningen. (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-videoAnvänd bild-till-video när input.image_urls är en array med 1-2 bild-URL:er: en URL ställer in den första ramen, och två URL:er ställer in den första och sista ramen. Video- och ljudreferenser ignoreras i detta läge. (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-videoAnvänd referens-till-video för rikare riktning med referensbilder, videor och ljud. Ljud kan inte användas ensamt med text; inkludera minst en bild eller video när ljud tillhandahålls. (reference-to-video)
Materialbegränsningar
- Upp till 9 referensbilder
- Upp till 3 referensvideor, total varaktighet <= 15 sekunder
- Upp till 3 referensljud, total varaktighet <= 15 sekunder
- Maximalt 12 material totalt över alla typer
Stödda kombinationer av inmatningar
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"
}
}'Begärandeparametrar
Parameternamn, enum-värden, slutpunktsvägar och exempel är en del av API-kontraktet. Beskrivningarna nedan förklarar hur varje fält beter sig.
Rubriker
| Rubrik | Obligatorisk | Beskrivning | Exempel |
|---|---|---|---|
Authorization | Ja | Bearer API-nyckel som används för att autentisera begäran. | Bearer sk_live_xxx |
Content-Type | Ja | Alla skrivförfrågningar använder JSON. | application/json |
Fält på översta nivån
| Fält | Typ | Obligatorisk | Standard | Intervall / Enum | Lägen | Exempel |
|---|---|---|---|---|---|---|
modelModellvariant som används för generering. | string | Ja | - | seedance-2-0 | seedance-2-0-fast | alla | seedance-2-0 |
callback_urlHTTPS-slutpunkt som tar emot callbacks för uppgiftsföljelse och misslyckanden. | string | Nej | - | HTTPS URL, inga privata nätverk | alla | https://your-domain.com/hook |
inputGenereringsinställningar och mediereferenser. | object | Ja | - | - | alla | - |
input.* fält
| Fält | Typ | Obligatorisk | Standard | Intervall / Enum | Lägen | Exempel |
|---|---|---|---|---|---|---|
input.promptTextprompt som beskriver videon som ska skapas. | string | Ja | - | icke-tom text | alla | a cat surfing |
input.generation_typeGenereringsläge. Standard är text-till-video. (text-to-video) | string | Nej | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urlsPublikt åtkomliga bild-URL:er. För bild-till-video, skicka 1 bild för den första ramen eller 2 bilder för den första och sista ramen. För referens-till-video, skicka upp till 9 bilder som visuella referenser. (image-to-video) (reference-to-video) | string[] | Villkorlig | [] | Bild-till-video: 1 eller 2 bilder. Referens-till-video: upp till 9 bilder. (image-to-video) (reference-to-video) | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsPublikt åtkomliga referensvideor endast för referens-till-video. Du kan skicka upp till 3 videofiler, och deras sammanlagda uppspelningstid måste vara 15 sekunder eller mindre. (reference-to-video) | string[] | Nej | [] | Upp till 3 videor. Sammanlagd videolängd måste vara 15 sekunder eller mindre. | reference-to-video | [] |
input.audio_urlsPublikt åtkomliga referensljudfiler endast för referens-till-video. Du kan skicka upp till 3 ljudfiler, och deras sammanlagda uppspelningstid måste vara 15 sekunder eller mindre. (reference-to-video) | string[] | Nej | [] | Upp till 3 ljudfiler. Sammanlagd ljudlängd måste vara 15 sekunder eller mindre. | reference-to-video | [] |
input.durationUtgående videolängd i sekunder. | int | Nej | 5 | 4-15 sekunder | alla | 5 |
input.aspect_ratioUtgående bildförhållande. adaptiv låter tjänsten härleda det bästa förhållandet. | string | Nej | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptiv | alla | 16:9 |
input.resolutionUtgående upplösning. | string | Nej | 720p | 480p | 720p | 1080p | alla | 720p |
input.generate_audioOm modellen ska generera ljud när det stöds. | boolean | Nej | true | true | false | alla | true |
input.watermarkOm en vattenstämpel ska läggas till. | boolean | Nej | false | true | false | alla | false |
input.web_searchOm webbsökningsförstärkning ska tillåtas när det stöds. | boolean | Nej | false | true | false | alla | false |
input.return_last_frameOm URL till sista ramen ska returneras när den är tillgänglig. | boolean | Nej | false | true | false | alla | false |
input.seedDeterministisk frö. Använd -1 för ett slumpmässigt frö. | int | Nej | -1 | -1 eller 0-4294967295 | alla | -1 |
Krediter varierar beroende på upplösning, varaktighet, modell och om referens-till-video inkluderar videoreferenser. Kreditvärdet som returneras av skapelsesvaret är det faktiska reserverade beloppet för den uppgiften. (reference-to-video)
Visa kreditpriserSvar
Detta är framgångsrespektet från POST /v1/videos/generations. Det betyder att uppgiften har accepterats och krediter har reserverats. Använd det returnerade taskId för att avfråga GET /v1/tasks/:id eller för att matcha en callback för slutförande eller misslyckande.
POST /v1/videos/generations framgångsrikt svar
{
"taskId": "3f2aK9mR...",
"credits": 60
}Hämta uppgiftsstatus
Använd GET /v1/tasks/:id för att hämta den aktuella uppgiftsstatusen. Avfråga inte mer än en gång var 10:e sekund. För produktionssystem, föredra webhooks.
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Slutförd uppgiftsrespons
{
"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
}
}Misslyckad uppgiftsrespons
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-0",
"billing_status": "refunded",
"credits": 60,
"failed_reason": "provider_failed"
}| Värde | Betydelse |
|---|---|
status=queued | Accepterad och väntar på att skickas in eller bearbetas. |
status=generating | Leverantör bearbetar genereringen. |
status=completed | Videon är klar och data.results innehåller resultatlänken. |
status=failed | Generering misslyckades eller tidsöverskreds. |
billing_status=reserved | Krediter är reserverade medan uppgiften pågår. |
billing_status=charged | Uppgiften lyckades och reservationen har reglerats. |
billing_status=refunded | Uppgiften misslyckades eller tidsöverskreds och krediter återbetalades. |
billing_status=refund_failed | Återbetalningstransaktionen misslyckades och kräver manuell hantering. |
Efter video_expires_at är data.results tom. Ladda ner och lagra filen innan giltighetsperioden upphör.
Webhooks
När callback_url finns anropar Seedance din slutpunkt när uppgiften är slutförd eller misslyckad, och skickar JSON-data som beskriver det slutliga resultatet. Om din slutpunkt returnerar en icke-2xx-respons eller inte svarar inom 15 sekunder, återförsöks leveransen upp till 5 gånger. Återförsöken återanvänder samma uppgifts-ID, så avdubblera per ID. Returnera en 200-respons så snart du säkert har registrerat callback-data.
Callback vid uppgiftsföljning
{
"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 vid uppgiftsfel
{
"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 });
}Validera callback-datastrukturen, avdubblera med ID, uppdatera din egen uppgiftslogg och svara snabbt.
callback_url måste vara HTTPS och får inte peka på privata, loopback- eller länk-lokala nätverksområden.
Fel
POST /v1/videos/generations och GET /v1/tasks/:id returnerar denna felstruktur när API-förfrågan i sig misslyckas, till exempel ogiltiga parametrar, ogiltig API-nyckel, otillräckliga krediter, hastighetsbegränsning, eller att uppgiften inte hittades. Vissa fel inkluderar extra fält som required, available, eller retry_after beroende på situationen.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this task.",
"required": 60,
"available": 12
}
}| Kod | HTTP | Betydelse | Försök igen? |
|---|---|---|---|
invalid_request | 400 | Saknade eller ogiltiga parametrar. | Nej, justera begäran. |
invalid_api_key | 401 | API-nyckeln saknas, är ogiltig eller återkallad. | Nej, använd en giltig nyckel. |
insufficient_credits | 402 | Otillräckliga krediter. Uppgiften accepteras eller debiteras inte. | Efter laddning. |
forbidden | 403 | API-nyckeln saknar den nödvändiga omfattningen. | Nej. |
not_found | 404 | Uppgiften existerar inte eller tillhör inte nyckelägaren. | Nej. |
rate_limited | 429 | Begärandehastigheten överskreds. | Ja, följ Retry-After. |
internal_error | 500 | Serverfel. | Ja, försök igen senare. |
Hastighetsbegränsningar
Hastighetsbegränsningar tillämpas per API-nyckel med ett glidande fönster. Generering är som standard 60 förfrågningar per minut; statusförfrågningar är mer överseende. HTTP 429-svar inkluderar Retry-After.
Generering
60/min
Statusförfrågningar
Mer överseende
429-huvud
Retry-After
Fakturering & krediter
API:et använder reservation vid inskickning, debitering vid framgång och återbetalning vid misslyckande. Användningssidor på instrumentpanelen visar API-kredithistorik, uppgiftsloggar och tidsbaserad användningsstatistik.
Reserverad
Krediter kontrolleras och reserveras när uppgiften accepteras.
Debiterad
Slutförda uppgifter reglerar den befintliga reservationen.
Återbetald
Misslyckade eller tidsbegränsade uppgifter återlämnar de reserverade krediterna automatiskt.
Inspektera användning i instrumentpanelen
Visa API-loggar, uppgiftsöversikter, kredoithistorik och tidsbaserade användningsmått.