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.
https://api.seevio.aiPe 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_xxxxxxxxUtilizați cheile sk_live_ pentru traficul de producție.
Utilizați cheile sk_test_ pentru testarea integrării în sandbox, folosind același contract API.
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.
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
}
}'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"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.
/v1/videos/generationscurl 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ă.
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
| Mod | Media necesar | Media opțional | Note |
|---|---|---|---|
text-to-video | prompt | duration, aspect_ratio, resolution, seed | Doar prompt text. Parametrii image_urls, video_urls și audio_urls nu sunt necesari. |
image-to-video | prompt + array-ul image_urls (1-2 URL-uri de imagini) | duration, aspect_ratio, resolution, seed | image_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-video | prompt + cel puțin o referință de tip imagine, video sau audio | imagini, videoclipuri și fișiere audio în limitele permise pentru materiale | Seedance 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-videoUtilizaț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-videoUtilizaț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-videoUtilizaț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
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
| Antet | Obligatoriu | Descriere | Exemplu |
|---|---|---|---|
Authorization | Da | Cheia API de tip Bearer utilizată pentru autentificarea solicitării. | Bearer sk_live_xxx |
Content-Type | Da | Toate solicitările de scriere utilizează formatul JSON. | application/json |
Câmpuri la nivel superior
| Câmp | Tip | Obligatoriu | Implicit | Interval / Enum | Moduri | Exemplu |
|---|---|---|---|---|---|---|
modelVarianta 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. | string | Da | - | seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-mini | toate | seedance-2-5 |
callback_urlEndpoint HTTPS care primește notificări la finalizarea sau eșecul sarcinilor. | string | Nu | - | URL HTTPS, exclusiv rețele private | toate | https://your-domain.com/hook |
inputSetările de generare și referințele media. | object | Da | - | - | toate | - |
input.* câmpuri
| Câmp | Tip | Obligatoriu | Implicit | Interval / Enum | Moduri | Exemplu |
|---|---|---|---|---|---|---|
input.promptPromptul text care descrie videoclipul pe care doriți să îl creați. | string | Da | - | text nevid | toate | a cat surfing |
input.generation_typeModul de generare. Valoarea implicită este text-to-video. | string | Nu | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urlsURL-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_urlsVideoclipuri 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_urlsFiș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.durationDurata videoclipului generat, în secunde. | int | Nu | 5 | Seedance 2.5: 4-30 de secunde. Seedance 2.0: 4-15 secunde. | toate | 5 |
input.aspect_ratioRaportul 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. | string | Nu | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptive | toate | 16:9 |
input.resolutionNivelul de rezoluție al videoclipului generat. | string | Nu | 720p | Seedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (în funcție de variantă). | toate | 720p |
input.generate_audioSpecifică dacă modelul ar trebui să genereze și audio, atunci când funcționalitatea este acceptată. | boolean | Nu | true | true | false | toate | true |
input.watermarkSpecifică dacă se aplică un watermark pe videoclip. | boolean | Nu | false | true | false | toate | false |
input.web_searchSpecifică dacă se permite extinderea contextului prin căutare web, atunci când opțiunea este disponibilă. | boolean | Nu | false | true | false | toate | false |
input.return_last_frameSpecifică dacă se returnează URL-ul ultimului cadru generat, atunci când acesta este disponibil. | boolean | Nu | false | true | false | toate | false |
input.seedSeed determinist pentru variantele Seedance 2.0. Modelul Seedance 2.5 nu acceptă acest câmp; vă rugăm să îl omiteți. | int | Nu | -1 | -1 sau 0-4294967295 | toate | -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 crediteRă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"
}| Valoare | Semnificație |
|---|---|
status=queued | Acceptată și în așteptare pentru a fi trimisă spre procesare. |
status=generating | Furnizorul procesează în prezent generarea video. |
status=completed | Generarea s-a finalizat, iar data.results conține URL-ul videoclipului rezultat. |
status=failed | Generarea a eșuat sau a expirat timpul de așteptare. |
billing_status=reserved | Creditele sunt rezervate pe parcursul procesării sarcinii. |
billing_status=charged | Sarcina s-a finalizat cu succes, iar rezervarea de credite a fost încasată. |
billing_status=refunded | Sarcina a eșuat sau a expirat, iar creditele rezervate au fost returnate. |
billing_status=refund_failed | Tranzacț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
}
}| Cod | HTTP | Semnificație | Reîncercați? |
|---|---|---|---|
invalid_request | 400 | Parametri lipsă sau nevalizi. | Nu, corectați solicitarea. |
invalid_api_key | 401 | Cheia API lipsește, este nevalidă sau a fost revocată. | Nu, utilizați o cheie validă. |
insufficient_credits | 402 | Credite insuficiente. Sarcina nu a putut fi acceptată sau facturată. | După reîncărcarea contului. |
forbidden | 403 | Cheia API nu are permisiunile (scope) necesare. | Nu. |
not_found | 404 | Sarcina nu există sau nu aparține deținătorului cheii API. | Nu. |
rate_limited | 429 | Limita de solicitări a fost depășită. | Da, respectând valoarea din Retry-After. |
internal_error | 500 | Eroare 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.