Seedance 2.5
Generează videoclipuri cu Seedance 2.5 folosind text, primul și ultimul cadru sau referințe multimodale. Această pagină acoperă întregul flux, de la solicitare până la rezultat.
ID model API: seedance-2-5
Generarea este asincronă. Salvează parametrul taskId returnat la crearea sarcinii, apoi interoghează statusul acesteia sau primește un webhook.
Funcționalități
| Funcție | Valori acceptate |
|---|---|
| Rezoluție de ieșire | 480p · 720p · 1080p |
| Durată de ieșire | 4–30 secunde |
| Raport de aspect | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive |
| Imagini de referință | Maxim 30 imagini |
| Videoclipuri de referință | Maxim 10 videoclipuri |
| Fișiere audio de referință | Maxim 10 fișiere audio |
| Toate referințele combinate | Maxim 50 fișiere de referință în total |
| Durată totală per grup video/audio | 30 secunde |
| seed | Neacceptat |
Tarife și credite
Generarea video este tarifată în credite, în funcție de durata facturabilă exprimată în secunde. În absența unui videoclip de intrare, durata facturabilă este egală cu durata videoclipului generat; în cazul utilizării unui videoclip de intrare, durata facturabilă include și durata videoclipului de referință.
Tabelul de mai jos prezintă creditele tarifate pe secundă, nu costul total al unei sarcini. Tariful depinde de model, de rezoluția de redare și de utilizarea videoclipurilor de referință în modul de conversie referință-video. Consultați formulele și exemplele de sub tabel pentru calculul costului total.
| Rezoluție de ieșire | Fără intrare video | Cu intrare video |
|---|---|---|
480p | 10 credite/secundă | 6 credite/secundă |
720p | 20 credite/secundă | 12 credite/secundă |
1080p | 30 credite/secundă | 20 credite/secundă |
- Fără intrare video: secunde de ieșire × tariful fără video.
- Cu intrare video: (secunde de ieșire + secunde măsurate ale videoclipului de referință) × tariful cu video. Serverul măsoară durata totală a videoclipului de referință și o rotunjește în plus la secunde întregi înainte de facturare.
- Referințele de tip imagine sau exclusiv audio folosesc tariful fără video. Tariful de facturare cu video de referință se aplică doar în modul referință-la-video, atunci când sunt furnizate referințe video.
Exemple de calcul al costurilor
Generare text-la-video de 5 secunde la 720p: 5 × 20 = 100 credite.
Generare de 5 secunde la 720p cu un videoclip de referință de 5 secunde: (5 + 5) × 12 = 120 credite.
Creditele sunt rezervate la trimiterea solicitării și sunt încasate doar în caz de succes. Sarcinile eșuate sau care au expirat intră în fluxul de rambursare. Statusul de facturare refund_failed înseamnă că rambursarea nu s-a putut finaliza; verifică jurnalele API sau contactează echipa de asistență.
Cum se tarifează creditele când durata este de -1
Când durata este setată la -1, durata finală a videoclipului nu este fixă, fiind determinată direct de model.
În majoritatea cazurilor, vă recomandăm să setați durata la lungimea exactă a videoclipului de care aveți nevoie, în loc de -1. Se recomandă utilizarea valorii -1 exclusiv pentru editarea video, nu și pentru alte scenarii de generare video.
| Materiale de referință | Cum se calculează costul | Exemplu |
|---|---|---|
| Cu videoclipuri de referință | Se adună duratele tuturor videoclipurilor de referință, iar totalul se rotunjește în plus la următoarea secundă întreagă (notată cu T). Costul este (T + T) × tariful aplicabil cu video: un T reprezintă durata estimată a videoclipului generat, iar celălalt T reprezintă durata videoclipurilor de referință furnizate. | 720p cu un videoclip de referință de 5 secunde: (5 + 5) × 12 = 120 credite. |
| Fără videoclipuri de referință (doar imagini sau audio) | Se folosește o durată estimată de 30 de secunde pentru videoclipul generat. Costul este 30 × tariful aplicabil fără video. | 720p fără videoclipuri de referință: 30 × 20 = 600 credite. |
Autentificare
Creează o cheie API în panoul de control. Cheia completă este afișată o singură dată. Păstreaz-o în siguranță pe serverul tău și trimite-o ca token Bearer la fiecare solicitare.
URL de bază
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonSetează variabila de mediu SEEVIO_API_KEY înainte de a rula aceste exemple. Exemplele în JavaScript rulează pe serverul tău cu Node.js; exemplele în Python utilizează pachetul requests.
Ghid rapid
Trimite această solicitare minimă, salvează valoarea taskId returnată, apoi folosește exemplul de interogare a sarcinii de mai jos. Valoarea creditelor din răspunsul de creare reprezintă suma rezervată.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
}
}'Exemplu de răspuns pentru crearea sarcinii
După acceptarea cererii de mai sus, API-ul returnează acest răspuns JSON. Valoarea taskId este identificatorul de sarcină utilizat pentru interogările ulterioare de stare, iar credits reprezintă numărul de credite rezervate pentru această sarcină. Acest răspuns confirmă crearea sarcinii, nu și faptul că videoclipul este gata. Trebuie să interogați periodic starea sarcinii (polling) sau să folosiți un Webhook pentru a primi rezultatele video.
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 100
}Creează o sarcină
POST https://api.seevio.ai/v1/videos/generationsTrimite un obiect JSON care să conțină model și input, plus un parametru opțional callback_url. Specifică întotdeauna ID-ul exact al modelului indicat pe această pagină; omiterea parametrului model va selecta automat seedance-2-0.
Corp solicitare
| Câmp | Tip | Obligatoriu | Descriere și constrângeri |
|---|---|---|---|
model | string | Da | ID model. Pentru a utiliza Seedance 2.5, setează acest câmp la seedance-2-5. |
callback_url | string | Nu | Endpoint HTTPS public pentru callback-urile de tip POST în caz de finalizare sau eșec. Rețelele private și localhost nu sunt permise. Exemplu: https://example.com/webhooks/seevio |
input | object | Da | Setările de generare. Trebuie să conțină un prompt completat. |
Parametri de intrare
Furnizați image_urls, video_urls și audio_urls ca liste de șiruri URL (string[]). Fiecare URL furnizat trebuie să fie accesibil public prin HTTPS, inclusiv fișierele media ignorate de modul selectat.
| Câmp | Tip | Obligatoriu | Valoare implicită | Descriere și constrângeri |
|---|---|---|---|---|
input.draft | boolean | Nu | false | Creează o previzualizare schiță la 480p. Disponibil doar pentru Seedance 2.5. Se exclude reciproc cu parametrul draft_task_id. Valori acceptate true | false |
input.draft_task_id | string | Nu | — | Creează o versiune finală la 1080p dintr-o schiță API deținută și finalizată, creată în urmă cu mai puțin de 7 zile. Furnizați valoarea taskId returnată de acest API și omiteți câmpurile de generare moștenite. Exemplu: 3f2aK9mR7xQp4TnZ8bLc6YwH |
input.output_format | string | Nu | mp4 | Containerul de ieșire video. Acceptă mp4 și mov, inclusiv pentru cererile de tip Draft și cele finale. Valori acceptate mp4 | mov |
input.prompt | string | Condiționat | — | Obligatoriu pentru generarea obișnuită și pentru crearea unei schițe. Nu îl trimiteți atunci când generați o versiune finală cu draft_task_id; promptul schiței este moștenit automat. Exemplu: A cat surfing at sunset |
input.generation_type | string | Nu | text-to-video | text-to-video folosește doar promptul; image-to-video folosește 1–2 imagini; reference-to-video folosește referințe de tip imagine, video și/sau audio. Valori acceptate text-to-video | image-to-video | reference-to-video |
input.image_urls | string[] | Condiționat | [] | image-to-video: 1 imagine pentru primul cadru, sau 2 imagini ordonate pentru primul și ultimul cadru. reference-to-video: până la 30 imagini. Ignorat în modul text-to-video. Exemplu: ["https://example.com/first-frame.jpg"] |
input.video_urls | string[] | Condiționat | [] | Transmis doar în modul reference-to-video; până la 10 videoclipuri și în limita a 30 secunde combinate. Ignorat în alte moduri. Exemplu: ["https://example.com/source.mp4"] |
input.audio_urls | string[] | Condiționat | [] | Transmis doar în modul reference-to-video; până la 10 fișiere audio și în limita a 30 secunde combinate. Ignorat în alte moduri. Exemplu: ["https://example.com/music.mp3"] |
input.duration | integer | Nu | 5 | Durata de ieșire: 4–30 de secunde, implicit 5. Valoarea duration=-1 este acceptată pentru schițe și în modul reference-to-video. Pentru o versiune finală, omiteți durata; aceasta este moștenită de la schiță. Valori acceptate -1 | 4–30Exemplu: 5 |
input.aspect_ratio | string | Nu | adaptive | Raportul de aspect al videoclipului generat. Valoarea adaptive permite modelului să determine raportul optim. Modul image-to-video acceptă doar valoarea adaptive; omite acest câmp sau setează-l pe adaptive. Valori acceptate 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptiveExemplu: adaptive |
input.resolution | string | Nu | 720p | Generarea obișnuită are rezoluția implicită 720p. Schițele acceptă doar 480p (valoarea implicită pentru Draft). Versiunile finale acceptă doar 1080p (valoarea implicită pentru final). Valori acceptate 480p | 720p | 1080pExemplu: 720p |
input.generate_audio | boolean | Nu | true | Solicită generarea unui sunet sincronizat. Valori acceptate true | falseExemplu: true |
input.watermark | boolean | Nu | false | Solicită aplicarea unui filigran AI pe videoclipul generat. Valori acceptate true | falseExemplu: false |
input.web_search | boolean | Nu | false | Permite căutarea pe web, atunci când această funcție este susținută de model. Valori acceptate true | falseExemplu: false |
input.return_last_frame | boolean | Nu | false | Solicită ultimul cadru generat. Rezultatul interogării va conține adresa în data.last_frame_url când cadrul este disponibil; în caz contrar, valoarea va fi null. Valori acceptate true | falseExemplu: true |
Câmpurile booleene trebuie să fie true sau false în format JSON, nu stringuri sau numere.
Răspuns creare
Codul HTTP 200 returnează taskId (string) și credits (număr). Acest lucru confirmă crearea sarcinii, nu și finalizarea ei. Suma de mai jos corespunde ghidului rapid pentru un clip de 5 secunde la 720p.
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 100
}Previzualizare schiță → Versiune finală 1080p
Seedance 2.5 oferă un flux de lucru în doi pași: generați o schiță (Draft) la 480p pentru a verifica aspectul vizual și mișcarea, apoi reutilizați-o pentru a crea versiunea finală la 1080p. Ambii pași folosesc POST /v1/videos/generations și generează sarcini separate, facturabile.
Modul Draft poate reduce costurile atunci când experimentați diverse idei. În loc să generați fiecare încercare direct la 1080p, puteți crea mai multe schițe la 480p cu costuri reduse, să o alegeți pe cea care vă place cel mai mult, iar apoi să folosiți acea schiță pentru a genera versiunea finală la 1080p. Acest lucru vă permite să explorați diverse rezultate la un preț accesibil înainte de a plăti pentru versiunea de înaltă definiție.
1. Generarea unei schițe la 480p
Setați input.draft=true și furnizați promptul obișnuit, referințele și setările de generare. În modul Draft, rezoluția implicită este 480p; alte rezoluții sunt respinse. Puteți activa return_last_frame pentru schiță, așa cum se arată mai jos.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"draft": true,
"duration": 5,
"resolution": "480p",
"return_last_frame": true
}
}'{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 50
}2. Așteptarea finalizării schiței
Salvați valoarea taskId din răspunsul de creare și interogați GET /v1/tasks/TASK_ID până când starea devine completed. Răspunsul interogării va avea is_draft=true; previzualizați videoclipul în data.results. Ultimul cadru solicitat se găsește în data.last_frame_url, dacă este disponibil.
De asemenea, puteți primi un Webhook atunci când schița este finalizată. Setați callback_url la nivelul principal al cererii de creare a schiței. Odată ce schița este gata, o notificare va fi trimisă la acel URL, iar serviciul dumneavoastră poate procesa apelul pentru a salva rezultatul, a actualiza starea sarcinii sau a declanșa acțiuni ulterioare. Consultați secțiunea Webhooks de pe această pagină pentru formatul apelului de callback.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"is_draft": true,
"draft_task_id": null,
"status": "completed",
"billing_status": "charged",
"credits": 50,
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": "https://cdn.seevio.ai/api/images/draft-last-frame.jpg",
"processing_time": 48
}
}3. Generarea versiunii finale la 1080p
Înlocuiți draft_task_id din acest exemplu cu valoarea taskId a schiței finalizate. Versiunea finală moștenește conținutul și durata schiței. Rezoluția implicită este 1080p și nu se acceptă nicio altă rezoluție. Parametrii output_format, watermark și return_last_frame pot fi setați independent pentru fiecare versiune finală; callback_url rămâne la nivelul principal al cererii.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"draft_task_id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"resolution": "1080p",
"output_format": "mp4",
"watermark": false,
"return_last_frame": true
}
}'Răspunsul conține un nou taskId pentru versiunea finală. Interogați acest nou ID sau așteptați webhook-ul corespunzător. Răspunsul de interogare pentru versiunea finală va avea is_draft=false, iar draft_task_id va fi egal cu ID-ul de sarcină API al schiței inițiale. Schița originală rămâne disponibilă. Fiecare cerere finală acceptată creează o nouă sarcină, facturată separat.
{
"taskId": "final_7mQx2pN8kR4vT9cL6bW3",
"credits": 150
}Facturarea schițelor și a versiunilor finale
Schițele utilizează tarifele 480p de mai sus, inclusiv inputul video de referință, dacă este cazul. Versiunile finale utilizează tariful exclusiv pentru ieșire la 1080p, adică 30 credite/secundă; videoclipul de referință nu mai este taxat din nou. De exemplu, o schiță de 5 secunde fără video de referință costă 50 de credite, iar versiunea sa finală de 5 secunde costă încă 150 de credite.
Dacă duration=-1, schița și versiunea sa finală rezervă fiecare credite pentru o durată de ieșire de până la 30 de secunde, plus videoclipul de referință doar pentru schiță. La finalizare, taxa este ajustată la durata reală a videoclipului generat (dacă aceasta poate fi determinată), iar creditele rezervate și neutilizate sunt returnate. O versiune finală rezervă până la 900 de credite.
Moduri de generare și exemple
Text în video
Generează pornind de la un prompt text. URL-urile media nu sunt transmise în acest mod.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
}
}'Primul cadru
Furnizează o imagine ca prim cadru, apoi descrie mișcarea dorită în prompt.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first-frame.jpg"
],
"aspect_ratio": "adaptive"
}
}'Primul și ultimul cadru
Furnizează două URL-uri de imagini în ordine: mai întâi primul cadru, apoi ultimul cadru. Acest exemplu solicită, de asemenea, ultimul cadru al videoclipului generat.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first-frame.jpg",
"https://example.com/last-frame.jpg"
],
"aspect_ratio": "adaptive",
"return_last_frame": true
}
}'Referință multimodală
Combină referințe de tip imagine, video și audio. Promptul text rămâne obligatoriu. Introducerea unui videoclip de referință modifică formula de facturare.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "Follow the reference camera movement and keep the character consistent. Use the audio for ambience.",
"duration": 5,
"resolution": "720p",
"generation_type": "reference-to-video",
"image_urls": [
"https://example.com/character.jpg"
],
"video_urls": [
"https://example.com/camera.mp4"
],
"audio_urls": [
"https://example.com/ambience.mp3"
],
"aspect_ratio": "adaptive"
}
}'Referință audio
Folosește audio ca singur tip de referință, alături de un prompt text obligatoriu care descrie videoclipul dorit.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "Create a coastal sunrise scene matching the rhythm of this audio.",
"duration": 5,
"resolution": "720p",
"generation_type": "reference-to-video",
"audio_urls": [
"https://example.com/music.mp3"
]
}
}'Editare video
Descrie modificările dorite și furnizează videoclipul sursă. Setează duration=-1 și folosește raportul de aspect adaptive. Folosește un clip sursă de cel puțin 4 secunde pentru acest flux de lucru. Regula de facturare pentru duration=-1 este prezentată mai sus.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "Edit the source video: change the character’s coat to blue and preserve the camera movement.",
"duration": -1,
"resolution": "720p",
"generation_type": "reference-to-video",
"video_urls": [
"https://example.com/source.mp4"
],
"aspect_ratio": "adaptive"
}
}'Extindere video
Descrie cum ar trebui să continue videoclipul sursă. Folosește raportul de aspect adaptive și setează o durată normală de ieșire, în limitele permise de model.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "Continue the camera movement from the source video, revealing a forest clearing.",
"duration": 8,
"resolution": "720p",
"generation_type": "reference-to-video",
"video_urls": [
"https://example.com/source.mp4"
],
"aspect_ratio": "adaptive"
}
}'Interoghează o sarcină
GET https://api.seevio.ai/v1/tasks/{taskId}Înlocuiește ID-ul din exemplu cu valoarea taskId returnată la crearea sarcinii. Interogările returnează doar sarcinile asociate utilizatorului cheii API; ID-urile inaccesibile sau necunoscute returnează HTTP 404.
Ca punct de pornire, interoghează la fiecare 10–20 secunde, redu frecvența în caz de HTTP 429 și oprește interogarea când statusul devine completed sau failed. Pentru mediile de producție, recomandăm utilizarea webhookurilor. Fiecare exemplu de cod de mai jos efectuează o singură interogare.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Status | Descriere și constrângeri |
|---|---|
queued | Acceptat și în așteptare pentru procesare. |
generating | Generarea este în curs de desfășurare. |
completed | Succes. Descarcă elementele din data.results înainte de expirare. |
failed | Eșec definitiv. Inspectează failed_reason și billing_status. |
| Câmp | Tip | Descriere și constrângeri |
|---|---|---|
id | string | Identificatorul sarcinii. Acesta reprezintă valoarea taskId din răspunsul de creare. |
created_at | number | Data creării sarcinii, exprimată în secunde Unix. |
model | string | ID-ul public al modelului utilizat pentru această sarcină. |
is_draft | boolean | Valoarea true pentru o schiță la 480p; false pentru o versiune finală sau un videoclip obișnuit. |
draft_task_id | string | null | ID-ul de sarcină API al schiței sursă pentru o versiune finală; null pentru schițe și videoclipuri obișnuite. |
billing_status | string | statusul facturării: reserved, charged, refunded sau refund_failed. |
credits | number | Credite rezervate pentru această sarcină. Această valoare este păstrată după o rambursare; inspectează billing_status pentru a determina rezultatul final al facturării. |
failed_reason | string | null | Motivul eșecului pentru sarcinile eșuate; în caz contrar, are valoarea null. Răspunsurile de interogare eșuate nu conțin obiectul data. |
data | object | Prezent în interogările sarcinilor care nu au eșuat. Conține detalii despre rezultat și procesare. |
data.results | string[] | Array cu URL-urile videoclipurilor generate. Rămâne gol până la finalizare sau după ce videoclipul a expirat. |
data.video_expires_at | string | null | Expirarea videoclipului ca timestamp ISO 8601 sau null înainte ca acesta să fie disponibil. Salvează rezultatul înainte de acest termen. |
data.last_frame_url | string | null | URL-ul ultimului cadru când este solicitat și disponibil, în caz contrar null. |
data.processing_time | number | null | Durata de procesare la furnizor în secunde, când este disponibilă, în caz contrar null. |
Sarcină finalizată: răspuns la interogare cu rezultatele video
Atunci când interogarea returnează status=completed, generarea videoclipului s-a încheiat. Citiți URL-urile videoclipurilor din data.results și descărcați-le înainte de data.video_expires_at. billing_status=charged indică faptul că au fost debitate creditele rezervate.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"is_draft": false,
"draft_task_id": null,
"status": "completed",
"billing_status": "charged",
"credits": 100,
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Sarcină eșuată: răspuns la interogare cu detalii despre eroare și facturare
Atunci când interogarea returnează status=failed, procesul de generare s-a încheiat fără succes. Consultați failed_reason pentru a afla cauza și billing_status pentru rezultatul rambursării. În acest exemplu, refunded înseamnă că toate creditele au fost returnate. Parametrul credits păstrează valoarea inițială rezervată, iar răspunsul nu include obiectul data.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"is_draft": false,
"draft_task_id": null,
"status": "failed",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}Webhookuri
Setează parametrul callback_url în solicitarea de creare pentru a primi un POST JSON atunci când sarcina se finalizează sau eșuează. Returnează un răspuns de tip 2xx în decurs de 15 secunde. Livrările eșuate vor fi reîncercate; procesează livrările repetate în mod idempotent pe baza ID-ului sarcinii.
Endpoint-ul dumneavoastră de callback trebuie să accepte solicitări de tip POST cu un corp de solicitare JSON (Content-Type: application/json).
Creează o sarcină cu callback
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
},
"callback_url": "https://example.com/webhooks/seevio"
}'Sarcină finalizată: payload de callback reușit
Atunci când generarea reușește, callback-ul conține status=completed. Utilizați id pentru a identifica sarcina și data.results pentru a prelua URL-urile videoclipurilor. Descărcați și salvați rezultatele înainte de data.video_expires_at.
created_at este momentul creării evenimentului; task_created_at este momentul creării sarcinii, în secunde Unix. Exemplele arată câmpurile recomandate; răspunsurile pot conține câmpuri suplimentare.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652848,
"model": "seedance-2-5",
"status": "completed",
"task_created_at": 1788652800,
"billing_status": "charged",
"credits": 100,
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Sarcină eșuată: payload de callback eșuat
Atunci când generarea eșuează, callback-ul conține status=failed. Utilizați id pentru a identifica sarcina, failed_reason pentru motivul eșecului și credits_refunded pentru numărul de credite returnate.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652848,
"model": "seedance-2-5",
"status": "failed",
"task_created_at": 1788652800,
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed",
"credits_refunded": 100
}Exemplu de receptor
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrls = callbackData.data.results;
// Save the video URLs and mark this task as completed in your application.
console.log(callbackData.id, videoUrls);
}
if (callbackData.status === "failed") {
const { failed_reason, credits_refunded } = callbackData;
// Record the failure reason and refunded credits for this task.
console.error(callbackData.id, failed_reason, credits_refunded);
}
return new Response(null, { status: 200 });
}Acest exemplu de Next.js citește corpul JSON al callback-ului și gestionează direct sarcinile finalizate și cele eșuate. Adăugați persistență și deduplicare a ID-urilor de sarcini pentru aplicația dumneavoastră; puneți în coadă procesele lente înainte de a confirma callback-ul.
Cerințe și limitări media
- Toate URL-urile pentru fișierele media și cele de callback trebuie să fie adrese HTTPS publice. Evită localhost, IP-urile private și fișierele care necesită cookie-uri sau autentificare. URL-urile pentru videoclipurile/fișierele audio de referință trebuie să returneze direct fluxul media.
- În modul reference-to-video, furnizează cel puțin o referință, fără a depăși 30 imagini, 10 videoclipuri, 10 fișiere audio și în total maximum 50 elemente combinate. Durata video totală și durata audio totală trebuie să fie de maximum 30 secunde fiecare.
- Modul text-to-video ignoră toate referințele media. Modul image-to-video transmite doar imaginile pentru primul/ultimul cadru și ignoră referințele video și audio. Folosește modul reference-to-video pentru a combina mai multe tipuri de fișiere media.
- Fiecare videoclip și fișier audio de referință trebuie să aibă o durată cuprinsă între 2 și 30 de secunde. Pentru exemplele de editare video, folosește clipuri sursă de cel puțin 4 secunde.
Cerințe privind imaginile
- Fiecare imagine trebuie să aibă o dimensiune mai mică de 30 MB.
- Formate acceptate: jpeg, png, webp, bmp, tiff, gif.
- Raport de aspect (lățime ÷ înălțime): între 0,4 și 2,5, inclusiv.
- Atât lățimea, cât și înălțimea trebuie să fie între 300 și 6.000 de pixeli, inclusiv.
Cerințe privind videoclipurile
- Formate acceptate: mp4, mov.
- Fiecare videoclip nu trebuie să depășească 100 MB.
- Frecvență cadre: între 24 și 60 FPS, inclusiv.
- Raport de aspect (lățime ÷ înălțime): între 0,4 și 2,5, inclusiv.
- Număr total de pixeli (lățime × înălțime): între 407.696 și 8.295.044, inclusiv. De exemplu, 614 × 664 = 407.696 și 3.326 × 2.494 = 8.295.044. Acestea sunt exemple de număr de pixeli, nu cerințe fixe pentru lățime și înălțime.
Cerințe privind fișierele audio
- Formate acceptate: wav, mp3.
- Fiecare fișier audio nu trebuie să depășească 15 MB.
Erori
Erorile HTTP conțin un obiect error cu proprietățile code și message. O sarcină acceptată cu succes poate eșua ulterior; interoghează sarcina sau gestionează callback-ul de eșec primit.
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | Câmp | Soluție recomandată |
|---|---|---|
| 400 | invalid_request | Corectează codul JSON, promptul lipsă, limitele parametrilor sau URL-ul media înainte de a reîncerca. |
| 401 | invalid_api_key | Verifică tokenul Bearer și dacă cheia API este activă. |
| 402 | insufficient_credits | Adaugă credite sau redu costul sarcinii. Răspunsul poate include sumele necesare și cele disponibile. |
| 403 | forbidden | Verificați restricția la nivel de cont descrisă în mesajul de eroare. |
| 404 | not_found | Verifică ID-ul sarcinii și asigură-te că cheia aparține utilizatorului care a creat sarcina. |
| 429 | rate_limited | Așteaptă intervalul indicat în antetul Retry-After înainte de a reîncerca. |
| 500 | internal_error | Inspectează mesajul de eroare și jurnalele API. Reîncearcă cu atenție; retrimiterea unei solicitări de creare poate genera o nouă sarcină facturabilă. |
Limite de rată
Crearea de sarcini: în mod implicit, fiecare cheie API permite maximum 100 de solicitări pe minut. Limitele personalizate de rată nu sunt disponibile în prezent.
Interogarea sarcinilor: în mod implicit, fiecare cheie API permite maximum 120 de solicitări pe minut. Solicitările de interogare și cele de creare a sarcinilor sunt contorizate separat.