Seedance API

Bygg in videogenerering i din produkt med Seedance 2.5 eller Seedance 2.0, asynkrona uppgifter, webhooks och kreditsaldo-hantering.

Bas-URL
https://api.seevio.ai
På 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_xxxxxxxx
sk_live_

Använd sk_live_-nycklar för produktionstrafik.

sk_test_

Använd sk_test_-nycklar för integrationstester i en sandbox-miljö med exakt samma API-kontrakt.

401

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.

Skicka in en uppgift

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
    }
  }'
Alternativ för resultat: Polling

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"
Alternativ för resultat: Webhook

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.

POST
/v1/videos/generations
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
    }
  }'

Genereringslägen

generation_type styr vilka mediaindata som accepteras och hur modellen tolkar dem.

Funktioner i Seedance 2.5
seedance-2-5

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ägeObligatoriskt indataValfritt indataAnteckningar
text-to-videopromptduration, aspect_ratio, resolution, seedEnbart textprompt. image_urls, video_urls och audio_urls behövs inte.
image-to-videoprompt + arrayen image_urls (1–2 bild-URL:er)duration, aspect_ratio, resolution, seedimage_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-videoprompt + minst en bild-, video- eller ljudreferensbilder, videor och ljud inom gränserna för materialSeedance 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-video

Anvä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-video

Anvä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-video

Anvä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

Text + Bild
Text + Video
Text + Ljud (Seedance 2.5)
Text + Bild + Video
Text + Bild + Ljud
Text + Video + Ljud
Text + Bild + Video + Ljud
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

HeaderObligatoriskBeskrivningExempel
AuthorizationJaBearer API-nyckel som används för att autentisera anropet.Bearer sk_live_xxx
Content-TypeJaAlla skrivförfrågningar använder JSON.application/json

Fält på toppnivå

FältTypObligatoriskStandardIntervall / EnumLägenExempel
model

Modellvariant 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.

stringJa-seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-miniallaseedance-2-5
callback_url

HTTPS-slutpunkt som tar emot anrop vid slutförda uppgifter eller fel.

stringNej-HTTPS-URL, inga privata nätverkallahttps://your-domain.com/hook
input

Genereringsinställningar och mediereferenser.

objectJa--alla-

input.* fält

FältTypObligatoriskStandardIntervall / EnumLägenExempel
input.prompt

Textprompt som beskriver videon som ska skapas.

stringJa-icke-tom textsträngallaa cat surfing
input.generation_type

Genereringsläge. Standard är text-to-video.

stringNejtext-to-videotext-to-video | image-to-video | reference-to-video-image-to-video
input.image_urls

Offentligt 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_urls

Offentligt 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_urls

Offentligt 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.duration

Den färdiga videons längd i sekunder.

intNej5Seedance 2.5: 4–30 sekunder. Seedance 2.0: 4–15 sekunder.alla5
input.aspect_ratio

Den 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.

stringNejadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptivealla16:9
input.resolution

Upplösningsnivå för videon.

stringNej720pSeedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (beroende på modellvariant).alla720p
input.generate_audio

Anger om modellen ska generera ljud när detta stöds.

booleanNejtruetrue | falseallatrue
input.watermark

Anger om en vattenstämpel ska läggas till.

booleanNejfalsetrue | falseallafalse
input.web_search

Anger om sökning på webben får användas för att förbättra resultatet när detta stöds.

booleanNejfalsetrue | falseallafalse
input.return_last_frame

Anger om URL:en till den sista bildrutan ska returneras när den är tillgänglig.

booleanNejfalsetrue | falseallafalse
input.seed

Deterministisk seed för Seedance 2.0-varianter. Seedance 2.5 stöder inte detta fält och det bör utelämnas.

intNej-1-1 eller 0-4294967295alla-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ättning

Svar

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ärdeInnebörd
status=queuedMottagen och väntar på att skickas vidare eller bearbetas.
status=generatingLeverantören bearbetar genereringen.
status=completedVideon är klar och data.results innehåller URL:en till resultatet.
status=failedGenereringen misslyckades eller tog för lång tid (timeout).
billing_status=reservedKrediter är reserverade så länge uppgiften pågår.
billing_status=chargedUppgiften lyckades och reservationen har debiterats.
billing_status=refundedUppgiften 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
  }
}
KodHTTPInnebördFörsök igen?
invalid_request400Parametrar saknas eller är ogiltiga.Nej, korrigera anropet.
invalid_api_key401API-nyckeln saknas, är ogiltig eller har återkallats.Nej, använd en giltig nyckel.
insufficient_credits402Inte tillräckligt med krediter. Uppgiften tas inte emot eller debiteras.Efter påfyllning.
forbidden403API-nyckeln saknar de behörigheter som krävs.Nej.
not_found404Uppgiften finns inte eller tillhör inte ägaren av API-nyckeln.Nej.
rate_limited429Anropshastigheten har överskridits.Ja, följ värdet i Retry-After.
internal_error500Serverfel.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.

API-loggar