Seedance 2.0 API

Bygg videogenerering inn i produktet ditt med asynkron opprettelse av oppgaver, status-polling, webhooks og kredittbevisst fakturering.

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

Bruk sk_live_-nøkler for produksjonstrafikk.

sk_test_

Bruk sk_test_-nøkler for sandkasseintegrasjonstesting med samme API-kontrakt.

401

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.

Send inn en oppgave

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
    }
  }'
Alternativ for resultat: Polling

Hent oppgavestatusendepunktet når integrasjonen din foretrekker eksplisitt polling.

curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"
Alternativ for resultat: Webhook

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.

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
    }
  }'

Genereringsmoduser

generation_type kontrollerer hvilke medieinndata som godtas og hvordan modellen tolker dem.

ModusNødvendig mediaValgfritt mediaMerknader
text-to-videopromptvarighet, sideforhold, oppløsning, seedKun tekstprompt. image_urls, video_urls og audio_urls er ikke nødvendig.
image-to-videoprompt + image_urls-array (1-2 bilde-URL-er)varighet, sideforhold, oppløsning, seedimage_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-videoprompt + minst ett bilde eller videobilder, videoer og lyd innenfor materialegrenseneLyd kan ikke brukes alene med tekst. Legg til minst ett bilde eller en video når lyd er oppgitt.
text-to-video

Bruk 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-video

Bruk 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-video

Bruk 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

Tekst + bilde
Tekst + video
Tekst + bilde + video
Tekst + bilde + lyd
Tekst + video + lyd
Tekst + bilde + video + lyd
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

OverskriftObligatoriskBeskrivelseEksempel
AuthorizationJaBearer API-nøkkel brukt til å autentisere forespørselen.Bearer sk_live_xxx
Content-TypeJaAlle skriveforespørsler bruker JSON.application/json

Toppnivåfelt

FeltTypeObligatoriskStandardOmråde / EnumModuserEksempel
model

Modellvariant brukt for generering.

stringJa-seedance-2-0 | seedance-2-0-fastalleseedance-2-0
callback_url

HTTPS-endepunkt som mottar callbacks for oppgavefullføring og feil.

stringNei-HTTPS URL, ingen private nettverkallehttps://your-domain.com/hook
input

Genereringsinnstillinger og mediareferanser.

objectJa--alle-

input.* felt

FeltTypeObligatoriskStandardOmråde / EnumModuserEksempel
input.prompt

Tekstprompt som beskriver videoen som skal opprettes.

stringJa-ikke-tom tekstallea cat surfing
input.generation_type

Genereringsmodus. Standard er tekst-til-video. (text-to-video)

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

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

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

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

Utgangsvideolengde i sekunder.

intNei54-15 sekunderalle5
input.aspect_ratio

Utgangs sideforhold. adaptiv lar tjenesten slutte seg til det beste forholdet.

stringNeiadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptivalle16:9
input.resolution

Utgangsoppløsningsnivå.

stringNei720p480p | 720p | 1080palle720p
input.generate_audio

Om modellen skal generere lyd når dette støttes.

booleanNeitruesann | usannalletrue
input.watermark

Om vannmerke skal legges til.

booleanNeifalsesann | usannallefalse
input.web_search

Om nettsøksforsterkning skal tillates når dette støttes.

booleanNeifalsesann | usannallefalse
input.return_last_frame

Om URL-en til siste ramme skal returneres når den er tilgjengelig.

booleanNeifalsesann | usannallefalse
input.seed

Deterministisk seed. Bruk -1 for en tilfeldig seed.

intNei-1-1 eller 0-4294967295alle-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 kredittpriser

Svar

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"
}
VerdiBetydning
status=queuedAkseptert og venter på å bli sendt inn eller behandlet.
status=generatingLeverandør behandler genereringen.
status=completedVideo fullført og data.results inneholder resultat-URL-en.
status=failedGenerering mislyktes eller tidsavbrutt.
billing_status=reservedKreditter er reservert mens oppgaven pågår.
billing_status=chargedOppgaven lyktes og reservasjonen er avgjort.
billing_status=refundedOppgaven mislyktes eller tidsavbrutt og kreditter ble returnert.
billing_status=refund_failedRefusjonstransaksjonen 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
  }
}
KodeHTTPBetydningPrøv igjen?
invalid_request400Manglende eller ugyldige parametere.Nei, korriger forespørselen.
invalid_api_key401API-nøkkel mangler, er ugyldig eller tilbakekalt.Nei, bruk en gyldig nøkkel.
insufficient_credits402Ikke nok kreditter. Oppgaven er ikke akseptert eller belastet.Etter påfylling.
forbidden403API-nøkkelen mangler det nødvendige omfanget.Nei.
not_found404Oppgaven eksisterer ikke eller tilhører ikke nøkkeleieren.Nei.
rate_limited429Forespørselsfrekvens overskredet.Ja, følg Retry-After.
internal_error500Serverfeil.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.

API-logger