API di Seedance
Integra la generazione video nel tuo prodotto con Seedance 2.5 o Seedance 2.0, attività asincrone, webhook e fatturazione basata sui crediti.
https://api.seevio.aiIn questa pagina
Introduzione
L'API ti consente di inviare attività di generazione video con Seedance 2.5 e Seedance 2.0 in modo programmatico. Seedance 2.5 è il modello consigliato e supporta text-to-video, image-to-video (da primo fotogramma o da primo e ultimo fotogramma) e reference-to-video multimodale. La generazione è asincrona: crei un'attività, ricevi immediatamente un ID attività e poi ottieni il video finale interrogando l'endpoint dell'attività (polling) o tramite webhook.
Attività asincrone
Il polling è ideale per lo sviluppo e le integrazioni più semplici.
Pronto per i webhook
I webhook sono consigliati per gli ambienti di produzione perché evitano un polling troppo frequente e notificano il tuo servizio non appena un'attività raggiunge uno stato terminale.
Gestione crediti integrata
I crediti vengono prenotati al momento dell'invio. Le attività andate a buon fine vengono addebitate scalando l'importo da tale prenotazione; le attività fallite o scadute vengono rimborsate automaticamente.
Autenticazione
Crea una chiave API nella dashboard e inviala come token Bearer in ogni richiesta. La chiave completa viene mostrata solo una volta, al momento della creazione.
Authorization: Bearer sk_live_xxxxxxxxUsa le chiavi sk_live_ per il traffico di produzione.
Usa le chiavi sk_test_ per i test di integrazione in ambiente sandbox con lo stesso contratto API.
Le chiavi mancanti, non valide o revocate restituiscono invalid_api_key con stato HTTP 401.
Guida rapida
Invia prima un'attività. Una volta accettata, scegli come ricevere il risultato: interroga l'endpoint dell'attività (polling) o ricevi il risultato finale tramite un webhook.
Crea un'attività video asincrona e ricevi subito un ID attività.
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
}
}'Verifica lo stato dell'attività interrogando l'endpoint dedicato, se la tua integrazione preferisce un polling esplicito.
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Passa un parametro callback_url all'invio dell'attività per ricevere una chiamata di callback in caso di completamento o errore, e aggiornare i record del tuo database.
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 });
}Crea un'attività video
Crea un'attività di generazione video con una richiesta POST a /v1/videos/generations. Il corpo della richiesta deve contenere il parametro model a livello principale, un callback_url opzionale e un oggetto input contenente il prompt e i parametri di generazione.
/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
}
}'Modalità di generazione
Il parametro generation_type controlla quali file multimediali sono accettati in input e come vengono interpretati dal modello.
Imposta il parametro model su seedance-2-5 per generare video con risoluzione a 480p o 720p e una durata compresa tra 4 e 30 secondi.
- Text-to-video con proporzioni adattive, 16:9, 9:16, 1:1, 4:3, 3:4 o 21:9
- Image-to-video a partire da un'immagine per il primo fotogramma o da due immagini per il primo e l'ultimo fotogramma; le proporzioni devono essere impostate su adaptive
- Reference-to-video con un massimo di 30 immagini, 10 video e 10 file audio, per un limite totale di 50 elementi di riferimento
- Ogni video o audio di riferimento deve durare tra i 2 e i 30 secondi; la durata totale combinata dei video e quella degli audio non deve superare i 30 secondi ciascuna
- In questa modalità sono supportati i riferimenti solo audio e l'opzione return_last_frame; il parametro seed non è supportato
| Modalità | Media obbligatori | Media opzionali | Note |
|---|---|---|---|
text-to-video | prompt | duration, aspect_ratio, resolution, seed | Solo prompt di testo. Non è necessario specificare image_urls, video_urls o audio_urls. |
image-to-video | prompt + array image_urls (1-2 URL di immagini) | duration, aspect_ratio, resolution, seed | image_urls deve essere un array. Fornisci 1 URL di immagine per il primo fotogramma, o 2 URL per il primo e l'ultimo fotogramma. I video e gli audio vengono ignorati. |
reference-to-video | prompt + almeno un'immagine, un video o un audio di riferimento | immagini, video e audio entro i limiti consentiti | Seedance 2.5 supporta riferimenti solo audio. Per Seedance 2.0, inserisci almeno un'immagine o un video se fornisci un file audio. |
text-to-videoUsa la modalità text-to-video quando il testo del prompt è l'unico input creativo fornito.
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-videoUsa la modalità image-to-video quando input.image_urls contiene un array con 1 o 2 URL di immagini: un solo URL imposta il primo fotogramma, due URL impostano il primo e l'ultimo fotogramma. I riferimenti video e audio vengono ignorati in questa modalità.
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-videoUsa la modalità reference-to-video per un controllo creativo più avanzato tramite immagini, video e audio di riferimento. Seedance 2.5 supporta l'invio di file solo audio come riferimento; Seedance 2.0 richiede invece almeno un'immagine o un video quando viene fornito un file audio.
Limiti degli elementi di riferimento
- Seedance 2.5: fino a 30 immagini di riferimento
- Seedance 2.5: fino a 10 video di riferimento, ciascuno da 2-30 secondi e con durata totale <= 30 secondi
- Seedance 2.5: fino a 10 audio di riferimento, ciascuno da 2-30 secondi e con durata totale <= 30 secondi
- Seedance 2.5: massimo 50 elementi di riferimento totali tra tutti i tipi
- Le varianti di Seedance 2.0 mantengono i loro limiti attuali: 9 immagini, 3 video, 3 file audio e massimo 15 secondi per gruppo di video/audio
Combinazioni di input supportate
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 di richiesta
I nomi dei parametri, i valori enum, i percorsi degli endpoint e gli esempi fanno parte del contratto dell'API. Le descrizioni seguenti illustrano il comportamento di ciascun campo.
Intestazioni
| Intestazione | Obbligatorio | Descrizione | Esempio |
|---|---|---|---|
Authorization | Sì | Chiave API Bearer utilizzata per autenticare la richiesta. | Bearer sk_live_xxx |
Content-Type | Sì | Tutte le richieste di scrittura utilizzano il formato JSON. | application/json |
Campi di primo livello
| Campo | Tipo | Obbligatorio | Predefinito | Intervallo / Enum | Modalità | Esempio |
|---|---|---|---|---|---|---|
modelVariante del modello usata per la generazione. Usa seedance-2-5 per Seedance 2.5, seedance-2-0 per Seedance 2.0, seedance-2-0-fast per Seedance 2.0 Fast o seedance-2-0-mini per Seedance 2.0 Mini. | string | Sì | - | seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-mini | tutti | seedance-2-5 |
callback_urlEndpoint HTTPS che riceve le chiamate di callback in caso di completamento o fallimento dell'attività. | string | No | - | URL HTTPS, no reti private | tutti | https://your-domain.com/hook |
inputImpostazioni di generazione e riferimenti multimediali. | object | Sì | - | - | tutti | - |
input.* campi
| Campo | Tipo | Obbligatorio | Predefinito | Intervallo / Enum | Modalità | Esempio |
|---|---|---|---|---|---|---|
input.promptPrompt testuale che descrive il video da generare. | string | Sì | - | testo non vuoto | tutti | a cat surfing |
input.generation_typeModalità di generazione. Il valore predefinito è text-to-video. | string | No | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urlsURL pubblici delle immagini. Per image-to-video, invia 1 immagine per il primo fotogramma o 2 immagini per il primo e l'ultimo fotogramma. Per reference-to-video, Seedance 2.5 accetta fino a 30 immagini e Seedance 2.0 fino a 9. | string[] | Condizionale | [] | Image-to-video: 1 o 2 immagini. Reference-to-video: fino a 30 per Seedance 2.5; fino a 9 per Seedance 2.0. | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsURL pubblici dei video di riferimento, utilizzabili solo in modalità reference-to-video. Seedance 2.5 accetta fino a 10 video, ciascuno da 2-30 secondi con una durata totale combinata <= 30 secondi. Seedance 2.0 accetta fino a 3 video con durata totale <= 15 secondi. | string[] | No | [] | Seedance 2.5: fino a 10 video, ciascuno da 2-30 secondi, durata totale <= 30 secondi. Seedance 2.0: fino a 3, durata totale <= 15 secondi. | reference-to-video | [] |
input.audio_urlsURL pubblici dei file audio di riferimento, utilizzabili solo in modalità reference-to-video. Seedance 2.5 accetta fino a 10 file audio, ciascuno da 2-30 secondi con durata totale combinata <= 30 secondi, e consente l'uso di riferimenti solo audio. Seedance 2.0 accetta fino a 3 file con durata totale <= 15 secondi. | string[] | No | [] | Seedance 2.5: fino a 10 file audio, ciascuno da 2-30 secondi, durata totale <= 30 secondi. Seedance 2.0: fino a 3, durata totale <= 15 secondi. | reference-to-video | [] |
input.durationDurata del video finale in secondi. | int | No | 5 | Seedance 2.5: 4-30 secondi. Seedance 2.0: 4-15 secondi. | tutti | 5 |
input.aspect_ratioProporzioni del video finale. adaptive consente al servizio di calcolare le proporzioni ideali. La modalità image-to-video di Seedance 2.5 supporta esclusivamente adaptive. | string | No | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptive | tutti | 16:9 |
input.resolutionLivello di risoluzione del video finale. | string | No | 720p | Seedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (a seconda della variante). | tutti | 720p |
input.generate_audioSpecifica se il modello deve generare l'audio, se supportato. | boolean | No | true | true | false | tutti | true |
input.watermarkSpecifica se aggiungere una filigrana. | boolean | No | false | true | false | tutti | false |
input.web_searchSpecifica se abilitare la ricerca web per arricchire il prompt, se supportata. | boolean | No | false | true | false | tutti | false |
input.return_last_frameSpecifica se restituire l'URL dell'ultimo fotogramma, se disponibile. | boolean | No | false | true | false | tutti | false |
input.seedSeed deterministico per le varianti di Seedance 2.0. Questo campo non è supportato in Seedance 2.5; ometterlo. | int | No | -1 | -1 o 0-4294967295 | tutti | -1 |
Il costo in crediti varia in base a risoluzione, durata, modello e all'eventuale presenza di riferimenti video nella modalità reference-to-video. Il valore dei crediti restituito nella risposta di creazione rappresenta l'esatto importo prenotato per quella specifica attività.
Visualizza tariffe creditiRisposta
Questa è la risposta corretta restituita da POST /v1/videos/generations. Conferma che l'attività è stata accettata e che i relativi crediti sono stati prenotati. Usa il taskId restituito per interrogare l'endpoint GET /v1/tasks/:id (polling) o per associarlo a una callback di completamento o fallimento.
Risposta positiva per POST /v1/videos/generations
{
"taskId": "3f2aK9mR...",
"credits": 100
}Verifica stato attività
Usa GET /v1/tasks/:id per recuperare lo stato corrente dell'attività. Consigliamo di effettuare l'interrogazione non più di una volta ogni 10 secondi. Per i sistemi in produzione, è preferibile utilizzare i webhook.
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Risposta per attività completata
{
"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
}
}Risposta per attività fallita
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-5",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}| Valore | Significato |
|---|---|
status=queued | Attività accettata e in attesa di essere inviata o elaborata. |
status=generating | Il provider sta elaborando la generazione del video. |
status=completed | Video generato con successo. Il campo data.results contiene l'URL del file finale. |
status=failed | La generazione è fallita o è andata in timeout. |
billing_status=reserved | I crediti rimangono prenotati mentre l'attività è in corso. |
billing_status=charged | L'attività è stata completata con successo e la prenotazione dei crediti è stata contabilizzata. |
billing_status=refunded | L'attività è fallita o è andata in timeout e i crediti prenotati sono stati riaccreditati. |
billing_status=refund_failed | La transazione di rimborso è fallita e richiede una gestione manuale. |
Dopo la data indicata in video_expires_at, il campo data.results risulterà vuoto. Assicurati di scaricare e salvare il file prima della scadenza.
Webhook
Se viene specificato un callback_url, Seedance invierà una richiesta JSON al tuo endpoint non appena l'attività viene completata o fallisce, contenente i dettagli del risultato finale. Se il tuo endpoint risponde con uno stato diverso da 2xx o non risponde entro 15 secondi, verranno effettuati fino a 5 tentativi di invio successivi. I tentativi riutilizzano lo stesso task id, consentendoti di evitare duplicati. Rispondi con uno stato HTTP 200 non appena i dati della callback sono stati registrati in sicurezza nei tuoi sistemi.
Callback di completamento attività
{
"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
}
}Callback di fallimento attività
{
"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 });
}Verifica la struttura dei dati della callback, elimina eventuali duplicati tramite l'id, aggiorna i record dell'attività nel tuo sistema e rispondi tempestivamente.
Il callback_url deve utilizzare il protocollo HTTPS e non deve puntare a indirizzi IP privati, di loopback o link-local.
Errori
POST /v1/videos/generations e GET /v1/tasks/:id restituiscono questo formato di errore quando la richiesta API fallisce (ad esempio in caso di parametri non validi, chiave API non valida, crediti insufficienti, superamento dei limiti di frequenza o attività non trovata). Alcuni errori includono campi aggiuntivi come required, available o retry_after a seconda del contesto.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this task.",
"required": 100,
"available": 12
}
}| Codice | HTTP | Significato | Riprovare? |
|---|---|---|---|
invalid_request | 400 | Parametri mancanti o non validi. | No, correggi la richiesta prima di riprovare. |
invalid_api_key | 401 | La chiave API è mancante, non valida o è stata revocata. | No, usa una chiave valida. |
insufficient_credits | 402 | Crediti insufficienti. L'attività non viene accettata né tariffata. | Sì, dopo aver ricaricato i crediti. |
forbidden | 403 | La chiave API non dispone dei permessi necessari. | No. |
not_found | 404 | L'attività non esiste o non appartiene al proprietario della chiave API. | No. |
rate_limited | 429 | Limite di frequenza delle richieste superato. | Sì, rispettando l'intestazione Retry-After. |
internal_error | 500 | Errore interno del server. | Sì, riprova più tardi. |
Limiti di frequenza
I limiti di frequenza sono applicati per singola chiave API con un meccanismo a finestra mobile. La generazione di video prevede un limite predefinito di 100 richieste al minuto, mentre le interrogazioni sullo stato delle attività sono regolate da limiti più flessibili. Le risposte HTTP 429 includono l'intestazione Retry-After.
Generazione
100/min
Interrogazioni stato
Limiti più flessibili
Intestazione 429
Retry-After
Fatturazione e crediti
Il sistema di fatturazione dell'API prevede la prenotazione dei crediti all'invio, l'addebito effettivo al completamento e il rimborso automatico in caso di errore. Le pagine dei consumi nella dashboard mostrano lo storico dei crediti API, i log delle attività e le statistiche di utilizzo nel tempo.
Prenotati
I crediti vengono verificati e prenotati non appena l'attività viene accettata dai sistemi.
Addebitati
Le attività completate con successo confermano l'addebito definitivo dei crediti precedentemente prenotati.
Rimborsati
In caso di errore o timeout dell'attività, i crediti prenotati vengono riaccreditati in automatico.
Monitora i consumi dalla dashboard
Visualizza i log delle API, la cronologia delle attività, lo storico dei crediti e le metriche di utilizzo temporali.