Seedance 2.0 API

Bygg in videogenerering i din produkt med asynkron uppgiftsskapandning, statusavfrågning, webhooks och kreditmedveten fakturering.

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

Använd sk_live_-nycklar för produktionstrafik.

sk_test_

Använd sk_test_-nycklar för sandbox-integrationstestning med samma API-kontrakt.

401

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.

Skicka in en uppgift

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
    }
  }'
Resultatalternativ: Avfrågning

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"
Resultatalternativ: Webhook

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.

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

Genereringslägen

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

LägeObligatoriskt mediaValfritt mediaAnmärkningar
text-to-videopromptduration, aspect_ratio, resolution, seedEndast textprompt. image_urls, video_urls och audio_urls behövs inte.
image-to-videoprompt + image_urls array (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 ramen, eller 2 bild-URL:er för den första och sista ramen. Video och ljud ignoreras.
reference-to-videoprompt + minst en bild eller videobilder, videor och ljud inom materialgränsernaLjud kan inte användas ensamt med text. Lägg till minst en bild eller video när ljud anges.
text-to-video

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

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

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

Text + Bild
Text + Video
Text + Bild + Video
Text + Bild + Ljud
Text + Video + Ljud
Text + Bild + Video + Ljud
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

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

Fält på översta nivån

FältTypObligatoriskStandardIntervall / EnumLägenExempel
model

Modellvariant som används för generering.

stringJa-seedance-2-0 | seedance-2-0-fastallaseedance-2-0
callback_url

HTTPS-slutpunkt som tar emot callbacks för uppgiftsföljelse och misslyckanden.

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 textallaa cat surfing
input.generation_type

Genereringsläge. Standard är text-till-video. (text-to-video)

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

Publikt å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_urls

Publikt å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_urls

Publikt å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.duration

Utgående videolängd i sekunder.

intNej54-15 sekunderalla5
input.aspect_ratio

Utgående bildförhållande. adaptiv låter tjänsten härleda det bästa förhållandet.

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

Utgående upplösning.

stringNej720p480p | 720p | 1080palla720p
input.generate_audio

Om modellen ska generera ljud när det stöds.

booleanNejtruetrue | falseallatrue
input.watermark

Om en vattenstämpel ska läggas till.

booleanNejfalsetrue | falseallafalse
input.web_search

Om webbsökningsförstärkning ska tillåtas när det stöds.

booleanNejfalsetrue | falseallafalse
input.return_last_frame

Om URL till sista ramen ska returneras när den är tillgänglig.

booleanNejfalsetrue | falseallafalse
input.seed

Deterministisk frö. Använd -1 för ett slumpmässigt frö.

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

Svar

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ärdeBetydelse
status=queuedAccepterad och väntar på att skickas in eller bearbetas.
status=generatingLeverantör bearbetar genereringen.
status=completedVideon är klar och data.results innehåller resultatlänken.
status=failedGenerering misslyckades eller tidsöverskreds.
billing_status=reservedKrediter är reserverade medan uppgiften pågår.
billing_status=chargedUppgiften lyckades och reservationen har reglerats.
billing_status=refundedUppgiften 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
  }
}
KodHTTPBetydelseFörsök igen?
invalid_request400Saknade eller ogiltiga parametrar.Nej, justera begäran.
invalid_api_key401API-nyckeln saknas, är ogiltig eller återkallad.Nej, använd en giltig nyckel.
insufficient_credits402Otillräckliga krediter. Uppgiften accepteras eller debiteras inte.Efter laddning.
forbidden403API-nyckeln saknar den nödvändiga omfattningen.Nej.
not_found404Uppgiften existerar inte eller tillhör inte nyckelägaren.Nej.
rate_limited429Begärandehastigheten överskreds.Ja, följ Retry-After.
internal_error500Serverfel.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.

API-loggar