Seedance 2.0 API

Integrează generarea de videoclipuri în produsul tău cu crearea asincronă de sarcini, interogarea stării, webhook-uri și facturare bazată pe credite.

URL-ul de bază
https://api.seedance2.ai
Pe această pagină

Introducere

API-ul vă permite să trimiteți sarcini de generare video Seedance 2.0 în mod programatic. Generarea este asincronă: creați o sarcină, primiți un ID de sarcină imediat, apoi obțineți videoclipul finalizat prin interogarea endpoint-ului sarcinii sau prin primirea unui webhook.

Sarcini asincrone

Interogarea funcționează bine pentru dezvoltare și integrări simple.

Gata de webhook

Webhook-urile sunt recomandate pentru producție, deoarece evită interogarea agresivă și notifică serviciul dvs. atunci când o sarcină atinge o stare finală.

Conștient de credite

Creditele sunt rezervate la trimitere. Sarcinile reușite sunt taxate din acea rezervare; sarcinile eșuate sau care au expirat sunt rambursate automat.

Autentificare

Creează o cheie API în tabloul de bord și trimite-o ca token Bearer la fiecare cerere. Cheia completă este afișată o singură dată la momentul creării.

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

Utilizați cheile sk_live_ pentru traficul de producție.

sk_test_

Utilizați cheile sk_test_ pentru testarea integrării sandbox cu același contract API.

401

Cheile lipsă, invalide sau revocate returnează invalid_api_key cu HTTP 401.

Ghid rapid

Trimiteți o sarcină mai întâi. După ce sarcina este acceptată, alegeți o metodă de livrare a rezultatului: interogați endpoint-ul sarcinii sau primiți rezultatul final printr-un webhook.

Trimite o sarcină

Creează o sarcină video asincronă și primește un ID de sarcină imediat.

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
    }
  }'
Opțiune de rezultat: interogare

Extrageți endpoint-ul de stare a sarcinii atunci când integrarea dvs. preferă interogarea explicită.

curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"
Opțiune de rezultat: Webhook

Transmiteți callback_url la trimiterea sarcinii, apoi primiți callback-uri de finalizare sau eșec și actualizați-vă propria înregistrare a sarcinii.

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 });
}

Creează o sarcină video

Creați o sarcină video cu POST /v1/videos/generations. Corpul cererii are un model de nivel superior, un callback_url opțional și un obiect de intrare care conține setări de prompt și de generare.

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

Moduri de generare

generation_type controlează ce intrări media sunt acceptate și cum le interpretează modelul.

ModMedia necesarăMedia opționalăNote
text-to-videopromptdurată, raport de aspect, rezoluție, seedDoar prompt text. image_urls, video_urls și audio_urls nu sunt necesare.
image-to-videoprompt + array image_urls (1-2 URL-uri imagine)durată, raport de aspect, rezoluție, seedimage_urls trebuie să fie un array. Furnizați 1 URL de imagine pentru primul cadru, sau 2 URL-uri de imagine pentru primul și ultimul cadru. Video și audio sunt ignorate.
reference-to-videoprompt + cel puțin o imagine sau un videoclipimagini, videoclipuri și audio în limitele materialuluiAudio nu poate fi utilizat singur cu text. Adăugați cel puțin o imagine sau un videoclip atunci când este furnizat audio.
text-to-video

Utilizați text-to-video atunci când prompt-ul este singura intrare creativă.

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

Utilizați image-to-video atunci când input.image_urls este un array cu 1-2 URL-uri de imagine: un URL setează primul cadru, iar două URL-uri setează primul și ultimul cadru. Referințele video și audio sunt ignorate în acest mod.

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

Utilizați reference-to-video pentru o direcție mai bogată cu imagini, videoclipuri și audio de referință. Audio nu poate fi utilizat singur cu text; includeți cel puțin o imagine sau un videoclip atunci când este furnizat audio.

Limite de material

  • Până la 9 imagini de referință
  • Până la 3 videoclipuri de referință, durată totală <= 15 secunde
  • Până la 3 fișiere audio de referință, durată totală <= 15 secunde
  • Maxim 12 materiale în total, pentru toate tipurile

Combinații de intrare acceptate

Text + Imagine
Text + Video
Text + Imagine + Video
Text + Imagine + Audio
Text + Video + Audio
Text + Imagine + Video + Audio
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"
    }
  }'

Parametri cerere

Numele parametrilor, valorile enumerate, căile endpoint-urilor și exemplele fac parte din contractul API. Descrierile de mai jos explică cum se comportă fiecare câmp.

Anteturi

AntetObligatoriuDescriereExemplu
AuthorizationDaCheia API Bearer utilizată pentru autentificarea cererii.Bearer sk_live_xxx
Content-TypeDaToate cererile de scriere utilizează JSON.application/json

Câmpuri de nivel superior

CâmpTipObligatoriuImplicitInterval / EnumModuriExemplu
model

Varianta modelului utilizată pentru generare.

stringDa-seedance-2-0 | seedance-2-0-fasttoateseedance-2-0
callback_url

Endpoint HTTPS care primește callback-uri de finalizare și eșec a sarcinilor.

stringNu-URL HTTPS, fără rețele privatetoatehttps://your-domain.com/hook
input

Setări de generare și referințe media.

objectDa--toate-

input.* câmpuri

CâmpTipObligatoriuImplicitInterval / EnumModuriExemplu
input.prompt

Prompt text care descrie videoclipul de creat.

stringDa-text nevidtoatea cat surfing
input.generation_type

Mod de generare. Implicit text-to-video.

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

URL-uri de imagini accesibile public. Pentru imagine-la-video, trimiteți 1 imagine pentru primul cadru sau 2 imagini pentru primul și ultimul cadru. Pentru referință-la-video, trimiteți până la 9 imagini ca referințe vizuale. (image-to-video) (reference-to-video)

string[]Condițional[]Imagine-la-video: 1 sau 2 imagini. Referință-la-video: până la 9 imagini. (image-to-video) (reference-to-video)image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Videoclipuri de referință accesibile public doar pentru referință-la-video. Puteți trimite până la 3 fișiere video, iar timpul lor de redare combinat trebuie să fie de 15 secunde sau mai puțin. (reference-to-video)

string[]Nu[]Până la 3 videoclipuri. Lungimea combinată a videoclipurilor trebuie să fie de 15 secunde sau mai puțin.reference-to-video[]
input.audio_urls

Fișiere audio de referință accesibile public doar pentru referință-la-video. Puteți trimite până la 3 fișiere audio, iar timpul lor de redare combinat trebuie să fie de 15 secunde sau mai puțin. (reference-to-video)

string[]Nu[]Până la 3 fișiere audio. Lungimea combinată a fișierelor audio trebuie să fie de 15 secunde sau mai puțin.reference-to-video[]
input.duration

Lungimea videoclipului de ieșire în secunde.

intNu54-15 secundetoate5
input.aspect_ratio

Raportul de aspect al ieșirii. adaptiv permite serviciului să deducă cel mai bun raport.

stringNuadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptivtoate16:9
input.resolution

Nivelul de rezoluție al ieșirii.

stringNu720p480p | 720p | 1080ptoate720p
input.generate_audio

Dacă modelul ar trebui să genereze audio atunci când este acceptat.

booleanNutruetrue | falsetoatetrue
input.watermark

Dacă să adăugați un filigran.

booleanNufalsetrue | falsetoatefalse
input.web_search

Dacă să permiteți augmentarea căutării web atunci când este acceptată.

booleanNufalsetrue | falsetoatefalse
input.return_last_frame

Dacă să returnați URL-ul ultimului cadru când este disponibil.

booleanNufalsetrue | falsetoatefalse
input.seed

Seed determinist. Utilizați -1 pentru un seed aleatoriu.

intNu-1-1 sau 0-4294967295toate-1

Creditele variază în funcție de rezoluție, durată, model și dacă referința-la-video include referințe video. Valoarea creditelor returnată de răspunsul de creare este suma reală rezervată pentru acea sarcină. (reference-to-video)

Vezi prețurile creditelor

Răspuns

Acesta este răspunsul de succes de la POST /v1/videos/generations. Înseamnă că sarcina a fost acceptată și creditele au fost rezervate. Utilizați taskId returnat pentru a interoga GET /v1/tasks/:id sau pentru a se potrivi cu un callback de finalizare sau eșec.

POST /v1/videos/generations răspuns de succes

{
  "taskId": "3f2aK9mR...",
  "credits": 60
}

Obține starea sarcinii

Utilizați GET /v1/tasks/:id pentru a prelua starea curentă a sarcinii. Nu interogați mai des de o dată la 10 secunde. Pentru sistemele de producție, preferați webhook-urile.

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

Răspuns sarcină finalizată

{
  "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
  }
}

Răspuns sarcină eșuată

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "billing_status": "refunded",
  "credits": 60,
  "failed_reason": "provider_failed"
}
ValoareSemnificație
status=queuedAcceptată și în așteptarea trimiterii sau procesării.
status=generatingFurnizorul procesează generarea.
status=completedVideoclipul a fost finalizat și data.results conține URL-ul rezultatului.
status=failedGenerarea a eșuat sau a expirat.
billing_status=reservedCreditele sunt rezervate în timp ce sarcina este în curs.
billing_status=chargedSarcina a reușit și rezervarea este decontată.
billing_status=refundedSarcina a eșuat sau a expirat și creditele au fost returnate.
billing_status=refund_failedTranzacția de rambursare a eșuat și necesită gestionare manuală.

După video_expires_at, data.results este gol. Descărcați și stocați fișierul înainte de expirarea ferestrei de valabilitate.

Webhook-uri

Când callback_url este prezent, Seedance vă apelează endpoint-ul atunci când sarcina este finalizată sau a eșuat și trimite date JSON care descriu rezultatul final. Dacă endpoint-ul dvs. returnează un răspuns non-2xx sau nu răspunde în 15 secunde, livrarea este reîncercată de până la 5 ori. Reîncercările reutilizează același ID de sarcină, deci deduplicați după ID. Returnați un răspuns 200 imediat ce ați înregistrat în siguranță datele callback.

Callback de finalizare a sarcinii

{
  "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 de eșec a sarcinii

{
  "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 });
}

Validați forma datelor callback, deduplicați după ID, actualizați-vă propria înregistrare a sarcinii și răspundeți rapid.

callback_url trebuie să fie HTTPS și nu trebuie să indice intervale de rețea private, loopback sau link-local.

Erori

POST /v1/videos/generations și GET /v1/tasks/:id returnează această formă de eroare atunci când cererea API în sine eșuează, cum ar fi parametri invalizi, cheie API invalidă, credite insuficiente, limitare a ratei sau sarcină negăsită. Unele erori includ câmpuri suplimentare, cum ar fi required, available sau retry_after, în funcție de situație.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 60,
    "available": 12
  }
}
CodHTTPSemnificațieReîncearcă?
invalid_request400Parametri lipsă sau invalizi.Nu, corectați cererea.
invalid_api_key401Cheia API lipsește, este invalidă sau revocată.Nu, utilizați o cheie validă.
insufficient_credits402Credite insuficiente. Sarcina nu este acceptată sau taxată.După reîncărcare.
forbidden403Cheia API nu are domeniul de aplicare necesar.Nu.
not_found404Sarcina nu există sau nu aparține proprietarului cheii.Nu.
rate_limited429Rata cererilor a fost depășită.Da, urmați Retry-After.
internal_error500Eroare de server.Da, reîncercați mai târziu.

Limite de rată

Limitele de rată sunt aplicate per cheie API cu o fereastră glisantă. Generarea este limitată la 60 de cereri pe minut; interogările de stare sunt mai îngăduitoare. Răspunsurile HTTP 429 includ Retry-After.

Generare

60/min

Interogări stare

Mai îngăduitor

Antet 429

Retry-After

Facturare & credite

API-ul utilizează rezervare la trimitere, taxare la succes și rambursare la eșec. Paginile de utilizare din tabloul de bord afișează istoricul creditelor API, jurnalele de sarcini și statisticile de utilizare bazate pe timp.

Rezervat

Creditele sunt verificate și rezervate la acceptarea sarcinii.

Taxat

Sarcinile finalizate reglează rezervarea existentă.

Rambursat

Sarcinile eșuate sau care au expirat returnează creditele rezervate automat.

Inspectați utilizarea în tabloul de bord

Vizualizați jurnalele API, cronologiile sarcinilor, istoricul creditelor și metricile de utilizare bazate pe timp.

Jurnale API