API Seedance

Integrați generarea video direct în produsul dvs. cu Seedance 2.5 sau Seedance 2.0, sarcini asincrone, webhook-uri și facturare bazată pe credite.

URL de bază
https://api.seevio.ai
Pe această pagină

Introducere

API-ul vă permite să trimiteți programatic sarcini de generare video pentru Seedance 2.5 și Seedance 2.0. Seedance 2.5 este modelul recomandat și acceptă text-to-video, image-to-video (folosind prima cadru sau primul și ultimul cadru) și referințe multimodale (reference-to-video). Generarea este asincronă: creați o sarcină, primiți imediat un ID de sarcină, iar apoi obțineți videoclipul finalizat prin interogarea (polling) endpoint-ului de stare sau prin intermediul unui webhook.

Sarcini asincrone

Metoda de polling funcționează excelent pentru dezvoltare și integrări simple.

Pregătit pentru webhook

Webhook-urile sunt recomandate pentru mediile de producție, deoarece evită interogările repetate și vă notifică serviciul imediat ce o sarcină ajunge într-o stare finală.

Sistem bazat pe credite

Creditele sunt rezervate în momentul trimiterii. Sarcinile finalizate cu succes sunt facturate din această rezervare, iar cele eșuate sau expirate sunt rambursate automat.

Autentificare

Creați o cheie API în panoul de control și trimiteți-o ca token Bearer la fiecare solicitare. Cheia completă este afișată o singură dată, în 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 în sandbox, folosind același contract API.

401

Cheile lipsă, nevalide sau revocate returnează eroarea invalid_api_key cu codul HTTP 401.

Ghid rapid

Mai întâi, trimiteți o sarcină. După ce sarcina este acceptată, alegeți una dintre metodele de livrare a rezultatului: interogați periodic endpoint-ul sarcinii sau primiți rezultatul final prin intermediul unui webhook.

Trimiteți o sarcină

Creați o sarcină video asincronă și primiți instantaneu un ID de sarcină.

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

Interogați endpoint-ul de stare a sarcinii atunci când integrarea dvs. preferă interogări explicite.

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

Trimiteți parametrul callback_url la crearea sarcinii pentru a primi notificări la finalizarea sau eșecul acesteia și pentru a vă actualiza propria bază de date.

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

Crearea unei sarcini video

Creați o sarcină video printr-o solicitare POST la /v1/videos/generations. Corpul solicitării conține modelul la nivel superior, un parametru opțional callback_url și un obiect input cu setările pentru prompt și generare.

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

Moduri de generare

Parametrul generation_type controlează ce tipuri de fișiere media sunt acceptate și modul în care modelul le interpretează.

Capabilități Seedance 2.5
seedance-2-5

Setați parametrul model la seedance-2-5 pentru a genera videoclipuri cu rezoluție de 480p sau 720p și o durată de la 4 la 30 de secunde.

  • Text-to-video cu raport de aspect adaptiv, 16:9, 9:16, 1:1, 4:3, 3:4 sau 21:9
  • Image-to-video pornind de la o imagine pentru primul cadru sau două imagini pentru primul și ultimul cadru; raportul de aspect trebuie să fie setat pe adaptive
  • Reference-to-video cu până la 30 de imagini, 10 materiale video și 10 fișiere audio, cu o limită totală de maximum 50 de materiale
  • Fiecare referință video sau audio trebuie să aibă o durată de 2-30 de secunde; durata totală cumulată pentru video și audio nu trebuie să depășească 30 de secunde fiecare
  • Sunt acceptate referințele exclusiv audio și parametrul return_last_frame; parametrul seed nu este acceptat
ModMedia necesarMedia opționalNote
text-to-videopromptduration, aspect_ratio, resolution, seedDoar prompt text. Parametrii image_urls, video_urls și audio_urls nu sunt necesari.
image-to-videoprompt + array-ul image_urls (1-2 URL-uri de imagini)duration, aspect_ratio, resolution, seedimage_urls trebuie să fie un array. Trimiteți 1 URL de imagine pentru primul cadru, sau 2 URL-uri pentru primul și ultimul cadru. Fișierele video și audio sunt ignorate.
reference-to-videoprompt + cel puțin o referință de tip imagine, video sau audioimagini, videoclipuri și fișiere audio în limitele permise pentru materialeSeedance 2.5 acceptă referințe exclusiv audio. Pentru Seedance 2.0, adăugați cel puțin o imagine sau un videoclip atunci când includeți audio.
text-to-video

Utilizați text-to-video atunci când promptul text este singura resursă creativă furnizată.

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

Utilizați image-to-video atunci când input.image_urls este un array care conține 1 sau 2 URL-uri de imagini: un singur URL definește primul cadru, iar două URL-uri definesc primul și ultimul cadru. Referințele video și audio sunt ignorate în acest mod.

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

Utilizați reference-to-video pentru o direcție artistică mai detaliată folosind imagini, videoclipuri și fișiere audio de referință. Seedance 2.5 permite utilizarea audio ca unică referință; Seedance 2.0 necesită cel puțin o imagine sau un videoclip atunci când este furnizat un fișier audio.

Limite pentru materiale

  • Seedance 2.5: până la 30 de imagini de referință
  • Seedance 2.5: până la 10 videoclipuri de referință, fiecare de 2-30 de secunde, cu o durată totală cumulată de <= 30 de secunde
  • Seedance 2.5: până la 10 fișiere audio de referință, fiecare de 2-30 de secunde, cu o durată totală cumulată de <= 30 de secunde
  • Seedance 2.5: maximum 50 de materiale în total, indiferent de tip
  • Variantele Seedance 2.0 își păstrează limitele actuale: 9 imagini, 3 videoclipuri, 3 fișiere audio și maximum 15 secunde per grup video/audio

Combinații de input acceptate

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

Parametri de solicitare

Numele parametrilor, valorile de tip enum, căile endpoint-urilor și exemplele fac parte din contractul API. Descrierile de mai jos explică comportamentul fiecărui câmp în detaliu.

Antete

AntetObligatoriuDescriereExemplu
AuthorizationDaCheia API de tip Bearer utilizată pentru autentificarea solicitării.Bearer sk_live_xxx
Content-TypeDaToate solicitările de scriere utilizează formatul JSON.application/json

Câmpuri la nivel superior

CâmpTipObligatoriuImplicitInterval / EnumModuriExemplu
model

Varianta de model utilizată pentru generare. Utilizați seedance-2-5 pentru Seedance 2.5, seedance-2-0 pentru Seedance 2.0, seedance-2-0-fast pentru Seedance 2.0 Fast sau seedance-2-0-mini pentru Seedance 2.0 Mini.

stringDa-seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-minitoateseedance-2-5
callback_url

Endpoint HTTPS care primește notificări la finalizarea sau eșecul sarcinilor.

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

Setările de generare și referințele media.

objectDa--toate-

input.* câmpuri

CâmpTipObligatoriuImplicitInterval / EnumModuriExemplu
input.prompt

Promptul text care descrie videoclipul pe care doriți să îl creați.

stringDa-text nevidtoatea cat surfing
input.generation_type

Modul de generare. Valoarea implicită este text-to-video.

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

URL-uri publice de imagini. Pentru image-to-video, trimiteți o imagine pentru primul cadru sau două imagini pentru primul și ultimul cadru. Pentru reference-to-video, Seedance 2.5 acceptă până la 30 de imagini, iar Seedance 2.0 acceptă până la 9.

string[]Condiționat[]Image-to-video: 1 sau 2 imagini. Reference-to-video: până la 30 pentru Seedance 2.5; până la 9 pentru Seedance 2.0.image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Videoclipuri de referință accesibile public, exclusiv pentru modul reference-to-video. Seedance 2.5 acceptă până la 10 videoclipuri, fiecare de 2-30 de secunde, cu o durată cumulată de <= 30 de secunde. Seedance 2.0 acceptă până la 3 videoclipuri, cu o durată cumulată de <= 15 secunde.

string[]Nu[]Seedance 2.5: până la 10 videoclipuri, fiecare de 2-30 secunde, lungime cumulată <= 30 secunde. Seedance 2.0: până la 3 videoclipuri, lungime cumulată <= 15 secunde.reference-to-video[]
input.audio_urls

Fișiere audio de referință accesibile public, exclusiv pentru modul reference-to-video. Seedance 2.5 acceptă până la 10 fișiere audio, fiecare de 2-30 de secunde, cu o durată cumulată de <= 30 de secunde, și permite referințe exclusiv audio. Seedance 2.0 acceptă până la 3 fișiere audio, cu o durată cumulată de <= 15 secunde.

string[]Nu[]Seedance 2.5: până la 10 fișiere audio, fiecare de 2-30 secunde, lungime cumulată <= 30 secunde. Seedance 2.0: până la 3 fișiere audio, lungime cumulată <= 15 secunde.reference-to-video[]
input.duration

Durata videoclipului generat, în secunde.

intNu5Seedance 2.5: 4-30 de secunde. Seedance 2.0: 4-15 secunde.toate5
input.aspect_ratio

Raportul de aspect al videoclipului. Opțiunea adaptive permite serviciului să deducă cel mai potrivit raport. Modul image-to-video din Seedance 2.5 acceptă doar valoarea adaptive.

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

Nivelul de rezoluție al videoclipului generat.

stringNu720pSeedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (în funcție de variantă).toate720p
input.generate_audio

Specifică dacă modelul ar trebui să genereze și audio, atunci când funcționalitatea este acceptată.

booleanNutruetrue | falsetoatetrue
input.watermark

Specifică dacă se aplică un watermark pe videoclip.

booleanNufalsetrue | falsetoatefalse
input.web_search

Specifică dacă se permite extinderea contextului prin căutare web, atunci când opțiunea este disponibilă.

booleanNufalsetrue | falsetoatefalse
input.return_last_frame

Specifică dacă se returnează URL-ul ultimului cadru generat, atunci când acesta este disponibil.

booleanNufalsetrue | falsetoatefalse
input.seed

Seed determinist pentru variantele Seedance 2.0. Modelul Seedance 2.5 nu acceptă acest câmp; vă rugăm să îl omiteți.

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

Costul în credite variază în funcție de rezoluție, durată, model și dacă referințele includ sau nu fișiere video. Valoarea creditelor returnată în răspunsul la crearea sarcinii reprezintă suma exactă rezervată pentru sarcina respectivă.

Consultați prețurile în credite

Răspuns

Acesta este răspunsul de succes primit la solicitarea POST /v1/videos/generations. Acesta indică faptul că sarcina a fost acceptată și creditele au fost rezervate. Utilizați valoarea taskId returnată pentru a interoga endpoint-ul GET /v1/tasks/:id sau pentru a o asocia cu datele primite prin webhook în caz de succes sau eșec.

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

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

Verificarea stării sarcinii

Utilizați GET /v1/tasks/:id pentru a obține starea curentă a sarcinii. Se recomandă interogarea la intervale de cel puțin 10 secunde. Pentru sistemele de producție, se recomandă utilizarea webhook-urilor.

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

Răspuns pentru sarcină finalizată cu succes

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

Răspuns pentru sarcină eșuată

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed"
}
ValoareSemnificație
status=queuedAcceptată și în așteptare pentru a fi trimisă spre procesare.
status=generatingFurnizorul procesează în prezent generarea video.
status=completedGenerarea s-a finalizat, iar data.results conține URL-ul videoclipului rezultat.
status=failedGenerarea a eșuat sau a expirat timpul de așteptare.
billing_status=reservedCreditele sunt rezervate pe parcursul procesării sarcinii.
billing_status=chargedSarcina s-a finalizat cu succes, iar rezervarea de credite a fost încasată.
billing_status=refundedSarcina a eșuat sau a expirat, iar creditele rezervate au fost returnate.
billing_status=refund_failedTranzacția de rambursare a eșuat și necesită intervenție manuală.

După depășirea termenului indicat de video_expires_at, obiectul data.results va fi gol. Descărcați și salvați fișierul înainte de expirarea acestei perioade de valabilitate.

Webhook-uri

Atunci când parametrul callback_url este configurat, Seedance vă va apela endpoint-ul imediat ce sarcina s-a finalizat sau a eșuat, trimițând date în format JSON cu rezultatul final. Dacă endpoint-ul dvs. returnează un cod diferit de 2xx sau nu răspunde în termen de 15 secunde, transmiterea se va reîncerca de până la 5 ori. Reîncercările folosesc același task id, deci asigurați-vă că faceți deduplicarea în funcție de ID. Returnați un răspuns HTTP 200 imediat ce ați înregistrat cu succes datele primite prin webhook.

Webhook pentru finalizarea cu succes a sarcinii

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

Webhook pentru eșecul sarcinii

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

Validați structura datelor din callback, deduplicați-le în funcție de ID, actualizați starea sarcinii în sistemul dvs. și răspundeți rapid.

Adresa callback_url trebuie să folosească protocolul HTTPS și nu trebuie să trimită către rețele private, loopback sau adrese link-local.

Erori

Solicitările POST /v1/videos/generations și GET /v1/tasks/:id returnează această structură de eroare atunci când solicitarea API în sine eșuează (de exemplu: parametri nevalizi, cheie API incorectă, credite insuficiente, depășirea limitelor de trafic sau sarcină negăsită). Anumite erori pot conține câmpuri suplimentare precum required, available sau retry_after, în funcție de situație.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 100,
    "available": 12
  }
}
CodHTTPSemnificațieReîncercați?
invalid_request400Parametri lipsă sau nevalizi.Nu, corectați solicitarea.
invalid_api_key401Cheia API lipsește, este nevalidă sau a fost revocată.Nu, utilizați o cheie validă.
insufficient_credits402Credite insuficiente. Sarcina nu a putut fi acceptată sau facturată.După reîncărcarea contului.
forbidden403Cheia API nu are permisiunile (scope) necesare.Nu.
not_found404Sarcina nu există sau nu aparține deținătorului cheii API.Nu.
rate_limited429Limita de solicitări a fost depășită.Da, respectând valoarea din Retry-After.
internal_error500Eroare internă de server.Da, reîncercați mai târziu.

Limite de utilizare

Limitele de utilizare se aplică per cheie API folosind o fereastră glisantă. Pentru generare, limita implicită este de 100 de solicitări pe minut; interogările de stare au limite mai permisive. Răspunsurile HTTP 429 includ antetul Retry-After.

Generare

100/min

Interogări de stare

Mai permisive

Antet 429

Retry-After

Facturare și credite

API-ul funcționează pe principiul: rezervare la trimitere, taxare la finalizarea cu succes și rambursare în caz de eșec. Paginile dedicate din panoul de control afișează istoricul creditelor API, jurnalul de sarcini și statistici de utilizare în timp.

Rezervat

Creditele sunt verificate și rezervate în momentul în care sarcina este acceptată.

Facturat

Sarcinile finalizate cu succes decontează definitiv creditele rezervate anterior.

Rambursat

Sarcinile care eșuează sau expiră returnează automat creditele rezervate.

Analizați consumul în panoul de control

Vizualizați jurnalele API, istoricul de execuție al sarcinilor, evoluția creditelor și statisticile de utilizare în timp.

Jurnale API