Seedance API
Bygg in videogenerering i din produkt med Seedance 2.5 eller Seedance 2.0, asynkrona uppgifter, webhooks och kreditsaldo-hantering.
https://api.seevio.aiPå den här sidan
Introduktion
Med detta API kan du skicka in videogenereringsuppgifter för Seedance 2.5 och Seedance 2.0 programmatiskt. Seedance 2.5 är den rekommenderade modellen och stöder text-till-video, bild-till-video (med första bildrutan eller första och sista bildrutan) samt multimodal referens-till-video. Genereringen sker asynkront: du skapar en uppgift, får direkt ett uppgifts-ID och hämtar sedan den färdiga videon antingen genom att polla uppgiftens slutpunkt eller via en webhook.
Asynkrona uppgifter
Polling fungerar utmärkt för utveckling och enkla integrationer.
Webhook-stöd
Webhooks rekommenderas för produktionsmiljöer eftersom du slipper aggressiv polling och din tjänst meddelas direkt när en uppgift når sitt sluttillstånd.
Kreditsaldo-hantering
Krediter reserveras när uppgiften skickas in. Slutförda uppgifter debiteras från reservationen, medan misslyckade eller avbrutna uppgifter återbetalas automatiskt.
Autentisering
Skapa en API-nyckel i instrumentpanelen och skicka med den som en Bearer-token i varje begäran. Hela nyckeln visas bara en gång i samband med att den skapas.
Authorization: Bearer sk_live_xxxxxxxxAnvänd sk_live_-nycklar för produktionstrafik.
Använd sk_test_-nycklar för integrationstester i en sandbox-miljö med exakt samma API-kontrakt.
Om en nyckel saknas, är ogiltig eller har återkallats returneras invalid_api_key med HTTP-status 401.
Snabbstart
Börja med att skicka in en uppgift. När uppgiften har godkänts väljer du hur du vill ta emot resultatet: antingen genom att polla uppgiftens slutpunkt eller genom att ta emot det slutliga resultatet via en webhook.
Skapa en asynkron videouppgift och få ett uppgifts-ID direkt.
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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
}
}'Anropa slutpunkten för uppgiftsstatus när din integration föredrar explicit polling.
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Ange callback_url när du skickar in uppgiften för att få ett anrop vid slutförande eller fel, och uppdatera sedan din egen uppgiftshistorik.
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. Anropets body innehåller model på toppnivå, en valfri callback_url och ett input-objekt med prompt och genereringsinställningar.
/v1/videos/generationscurl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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
}
}'Genereringslägen
generation_type styr vilka mediaindata som accepteras och hur modellen tolkar dem.
Sätt model till seedance-2-5 för att generera i 480p eller 720p med en längd på 4 till 30 sekunder.
- Text-till-video med bildformaten anpassad (adaptive), 16:9, 9:16, 1:1, 4:3, 3:4 eller 21:9
- Bild-till-video från en bild (första bildrutan) eller två bilder (första och sista bildrutan); bildformatet måste vara anpassat (adaptive)
- Referens-till-video med upp till 30 bilder, 10 videor och 10 ljudfiler, med totalt max 50 material
- Varje video- eller ljudreferens måste vara 2–30 sekunder lång; den sammanlagda speltiden för video respektive ljud får inte överstiga 30 sekunder
- Stöd för enbart ljud som referens samt return_last_frame; seed stöds inte
| Läge | Obligatoriskt indata | Valfritt indata | Anteckningar |
|---|---|---|---|
text-to-video | prompt | duration, aspect_ratio, resolution, seed | Enbart textprompt. image_urls, video_urls och audio_urls behövs inte. |
image-to-video | prompt + arrayen image_urls (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 bildrutan, eller 2 bild-URL:er för den första och sista bildrutan. Video och ljud ignoreras. |
reference-to-video | prompt + minst en bild-, video- eller ljudreferens | bilder, videor och ljud inom gränserna för material | Seedance 2.5 stöder referenser med enbart ljud. För Seedance 2.0 måste du lägga till minst en bild eller video om ljud skickas med. |
text-to-videoAnvänd text-till-video när prompten är det enda kreativa indata som behövs.
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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
}
}'image-to-videoAnvänd bild-till-video när input.image_urls är en array med 1–2 bild-URL:er: en URL anger den första bildrutan, och två URL:er anger den första och sista bildrutan. Video- och ljudreferenser ignoreras i detta läge.
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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 mer detaljerad styrning med referensbilder, videor och ljud. Seedance 2.5 accepterar enbart ljud som referens; Seedance 2.0 kräver minst en bild eller video om ljud skickas med.
Gränser för material
- Seedance 2.5: upp till 30 referensbilder
- Seedance 2.5: upp till 10 referensvideor, 2–30 sekunder styck och total längd <= 30 sekunder
- Seedance 2.5: upp till 10 referensljudfiler, 2–30 sekunder styck och total längd <= 30 sekunder
- Seedance 2.5: max 50 material totalt för alla typer
- Seedance 2.0-varianterna behåller sina befintliga gränser: 9 bilder, 3 videor, 3 ljudfiler samt 15 sekunder per video-/ljudgrupp
Kombinationer av indata som stöds
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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": "720p"
}
}'Anropsparametrar
Parameternamn, enum-värden, slutpunktssökvägar och exempel är en del av API-kontraktet. Beskrivningarna nedan förklarar hur varje fält fungerar.
Headers
| Header | Obligatorisk | Beskrivning | Exempel |
|---|---|---|---|
Authorization | Ja | Bearer API-nyckel som används för att autentisera anropet. | Bearer sk_live_xxx |
Content-Type | Ja | Alla skrivförfrågningar använder JSON. | application/json |
Fält på toppnivå
| Fält | Typ | Obligatorisk | Standard | Intervall / Enum | Lägen | Exempel |
|---|---|---|---|---|---|---|
modelModellvariant som används för generering. Använd seedance-2-5 för Seedance 2.5, seedance-2-0 för Seedance 2.0, seedance-2-0-fast för Seedance 2.0 Fast eller seedance-2-0-mini för Seedance 2.0 Mini. | string | Ja | - | seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-mini | alla | seedance-2-5 |
callback_urlHTTPS-slutpunkt som tar emot anrop vid slutförda uppgifter eller fel. | 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 textsträng | alla | a cat surfing |
input.generation_typeGenereringsläge. Standard är text-to-video. | string | Nej | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urlsOffentligt tillgängliga bild-URL:er. För bild-till-video skickar du 1 bild för den första bildrutan eller 2 bilder för den första och sista bildrutan. För referens-till-video stöder Seedance 2.5 upp till 30 bilder och Seedance 2.0 upp till 9. | string[] | Villkorlig | [] | Bild-till-video: 1 eller 2 bilder. Referens-till-video: upp till 30 för Seedance 2.5; upp till 9 för Seedance 2.0. | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsOffentligt tillgängliga referensvideor för enbart referens-till-video. Seedance 2.5 stöder upp till 10 videor, 2–30 sekunder styck med en sammanlagd speltid på <= 30 sekunder. Seedance 2.0 stöder upp till 3 med en sammanlagd speltid på <= 15 sekunder. | string[] | Nej | [] | Seedance 2.5: upp till 10 videor, 2–30 sekunder styck, sammanlagd längd <= 30 sekunder. Seedance 2.0: upp till 3, sammanlagd längd <= 15 sekunder. | reference-to-video | [] |
input.audio_urlsOffentligt tillgängliga ljudreferenser för enbart referens-till-video. Seedance 2.5 stöder upp till 10 ljudfiler, 2–30 sekunder styck med en sammanlagd speltid på <= 30 sekunder, och tillåter även enbart ljud som referens. Seedance 2.0 stöder upp till 3 med en sammanlagd speltid på <= 15 sekunder. | string[] | Nej | [] | Seedance 2.5: upp till 10 ljudfiler, 2–30 sekunder styck, sammanlagd längd <= 30 sekunder. Seedance 2.0: upp till 3, sammanlagd längd <= 15 sekunder. | reference-to-video | [] |
input.durationDen färdiga videons längd i sekunder. | int | Nej | 5 | Seedance 2.5: 4–30 sekunder. Seedance 2.0: 4–15 sekunder. | alla | 5 |
input.aspect_ratioDen färdiga videons bildformat. Med adaptive väljer tjänsten det bästa formatet automatiskt. Bild-till-video i Seedance 2.5 stöder endast adaptive. | string | Nej | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptive | alla | 16:9 |
input.resolutionUpplösningsnivå för videon. | string | Nej | 720p | Seedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (beroende på modellvariant). | alla | 720p |
input.generate_audioAnger om modellen ska generera ljud när detta stöds. | boolean | Nej | true | true | false | alla | true |
input.watermarkAnger om en vattenstämpel ska läggas till. | boolean | Nej | false | true | false | alla | false |
input.web_searchAnger om sökning på webben får användas för att förbättra resultatet när detta stöds. | boolean | Nej | false | true | false | alla | false |
input.return_last_frameAnger om URL:en till den sista bildrutan ska returneras när den är tillgänglig. | boolean | Nej | false | true | false | alla | false |
input.seedDeterministisk seed för Seedance 2.0-varianter. Seedance 2.5 stöder inte detta fält och det bör utelämnas. | int | Nej | -1 | -1 eller 0-4294967295 | alla | -1 |
Kreditkostnaden varierar beroende på upplösning, längd, modell och om referens-till-video innehåller videoreferenser. Det kreditvärde som returneras i create-svaret är det exakta belopp som reserverats för den specifika uppgiften.
Visa kreditprissättningSvar
Detta är det lyckade svaret från POST /v1/videos/generations. Det innebär att uppgiften har tagits emot och att krediter har reserverats. Använd det returnerade taskId för att polla GET /v1/tasks/:id eller för att matcha mot ett webhook-anrop vid slutförande eller fel.
Lyckat svar för POST /v1/videos/generations
{
"taskId": "3f2aK9mR...",
"credits": 100
}Hämta uppgiftsstatus
Använd GET /v1/tasks/:id för att hämta aktuell uppgiftsstatus. Polla inte oftare än var 10:e sekund. För produktionssystem rekommenderas webhooks.
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Svar för slutförd uppgift
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-5",
"billing_status": "charged",
"credits": 100,
"failed_reason": null,
"data": {
"results": ["https://cdn.seevio.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Svar för misslyckad uppgift
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-5",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}| Värde | Innebörd |
|---|---|
status=queued | Mottagen och väntar på att skickas vidare eller bearbetas. |
status=generating | Leverantören bearbetar genereringen. |
status=completed | Videon är klar och data.results innehåller URL:en till resultatet. |
status=failed | Genereringen misslyckades eller tog för lång tid (timeout). |
billing_status=reserved | Krediter är reserverade så länge uppgiften pågår. |
billing_status=charged | Uppgiften lyckades och reservationen har debiterats. |
billing_status=refunded | Uppgiften misslyckades eller tog för lång tid, och krediterna återbetalades. |
billing_status=refund_failed | Återbetalningen misslyckades och kräver manuell hantering. |
Efter tidpunkten i video_expires_at är data.results tom. Ladda ner och spara filen innan giltighetstiden går ut.
Webhooks
När callback_url har angetts anropar Seedance din slutpunkt så snart uppgiften har slutförts eller misslyckats, och skickar JSON-data med det slutgiltiga resultatet. Om din slutpunkt returnerar ett svar som inte är 2xx, eller inte svarar inom 15 sekunder, görs upp till 5 nya försök. Vid nya försök används samma task id, så se till att rensa dubbletter baserat på id. Returnera svaret 200 så snart du har sparat callback-datan på ett säkert sätt.
Callback vid slutförd uppgift
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-5",
"data": {
"results": ["https://cdn.seevio.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Callback vid misslyckad uppgift
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-5",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 100
}
}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 strukturen på callback-datan, rensa dubbletter med id, uppdatera din egen uppgiftshistorik och svara snabbt.
callback_url måste använda HTTPS och får inte peka på privata nätverk, loopback- eller länk-lokala nätverksintervall.
Fel
POST /v1/videos/generations och GET /v1/tasks/:id returnerar detta felformat när själva API-begäran misslyckas – exempelvis vid ogiltiga parametrar, ogiltig API-nyckel, otillräckligt kreditsaldo, hastighetsbegränsning eller om uppgiften inte hittas. Vissa fel innehåller extra fält som required, available eller retry_after beroende på situationen.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this task.",
"required": 100,
"available": 12
}
}| Kod | HTTP | Innebörd | Försök igen? |
|---|---|---|---|
invalid_request | 400 | Parametrar saknas eller är ogiltiga. | Nej, korrigera anropet. |
invalid_api_key | 401 | API-nyckeln saknas, är ogiltig eller har återkallats. | Nej, använd en giltig nyckel. |
insufficient_credits | 402 | Inte tillräckligt med krediter. Uppgiften tas inte emot eller debiteras. | Efter påfyllning. |
forbidden | 403 | API-nyckeln saknar de behörigheter som krävs. | Nej. |
not_found | 404 | Uppgiften finns inte eller tillhör inte ägaren av API-nyckeln. | Nej. |
rate_limited | 429 | Anropshastigheten har överskridits. | Ja, följ värdet i Retry-After. |
internal_error | 500 | Serverfel. | Ja, försök igen senare. |
Hastighetsbegränsningar
Hastighetsbegränsningar tillämpas per API-nyckel med ett glidande tidsfönster. För videogenerering är standardgränsen 100 anrop per minut; statusförfrågningar har mer generösa gränser. Svar med HTTP 429 innehåller en Retry-After-header.
Generering
100/min
Statusförfrågningar
Mer generös
429-header
Retry-After
Fakturering & krediter
API:et tillämpar principen reservera vid inskick, debitera vid framgång och återbetala vid misslyckande. Sidorna för förbrukning i instrumentpanelen visar din transaktionshistorik för krediter, loggar för uppgifter samt tidsbaserad användningsstatistik.
Reserverat
Krediter kontrolleras och reserveras när uppgiften tas emot.
Debiterat
När uppgiften har slutförts dras beloppet från den befintliga reservationen.
Återbetalat
Om uppgiften misslyckas eller avbryts återförs de reserverade krediterna automatiskt.
Följ din förbrukning i instrumentpanelen
Visa API-loggar, tidslinjer för uppgifter, kredithistorik och tidsbaserad användningsstatistik.