Vai alla documentazione
In questa pagina

Seedance 2.0

Genera video con Seedance 2.0 partendo da testo, dal primo e dall'ultimo fotogramma o usando riferimenti multimodali. Questa pagina descrive l'intero flusso di lavoro, dalla richiesta al risultato finale.

ID del modello API: seedance-2-0

La generazione è asincrona. Salva il taskId restituito alla creazione del task, quindi interroga lo stato o ricevi un webhook.

Funzionalità

FunzionalitàValori supportati
Risoluzione video480p · 720p · 1080p · 4k
Durata video4–15 secondi
Proporzioni16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Immagini di riferimentoFino a 9 immagini
Video di riferimentoFino a 3 video
File audio di riferimentoFino a 3 file audio
Tutti i riferimenti combinatiFino a 12 file di riferimento in totale
Durata totale per gruppo video/audio15 secondi
seed-1 a 4294967295

Prezzi e crediti

La generazione di video viene tariffata in crediti in base alla durata fatturabile in secondi. Senza un video di input, la durata fatturabile corrisponde alla durata del video generato; in presenza di un video di input, include anche la durata del video di riferimento.

La tabella seguente mostra i crediti addebitati al secondo e non il costo totale di un'operazione. La tariffa varia a seconda del modello, della risoluzione finale e dell'eventuale inserimento di video di riferimento nella modalità reference-to-video. Per il calcolo del costo totale, consulta le formule e gli esempi riportati sotto la tabella.

Risoluzione videoSenza video in inputCon video in input
480p6 crediti al secondo4 crediti al secondo
720p12 crediti al secondo8 crediti al secondo
1080p30 crediti al secondo20 crediti al secondo
4k70 crediti al secondo40 crediti al secondo
  • Senza video in input: secondi generati × tariffa senza video.
  • Con video in input: (secondi generati + secondi effettivi del video di riferimento) × tariffa con video. Il server calcola la durata totale del video di riferimento arrotondandola al secondo superiore prima dell'addebito.
  • I soli riferimenti di immagini o audio utilizzano la tariffa senza video. La tariffa con video si applica esclusivamente nella modalità da riferimento a video quando vengono forniti video come input.

Esempi di calcolo dei costi

Video da testo a video da 5 secondi a 720p: 5 × 12 = 60 crediti.

Video generato da 5 secondi a 720p con video di riferimento da 5 secondi: (5 + 5) × 8 = 80 crediti.

I crediti vengono prenotati all'invio e addebitati solo a completamento avvenuto. I task falliti o andati in timeout avviano la procedura di rimborso. Lo stato di fatturazione refund_failed indica che il rimborso non è andato a buon fine; verifica i log delle API o contatta l'assistenza.

Autenticazione

Crea una chiave API nella dashboard. La chiave completa viene mostrata una sola volta. Conservala sul tuo server e inviala come token Bearer in ogni richiesta.

URL di base

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Imposta la variabile d'ambiente SEEVIO_API_KEY prima di eseguire questi esempi. Gli esempi in JavaScript vengono eseguiti sul server con Node.js; gli esempi in Python utilizzano la libreria requests.

Avvio rapido

Invia questa richiesta minima, salva il taskId restituito e usa l'esempio di query del task riportato di seguito. Il valore dei crediti nella risposta di creazione corrisponde all'importo prenotato.

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-0",
  "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
  }
}'

Esempio di risposta alla creazione del task

Una volta accettata la richiesta precedente, l'API restituisce questa risposta JSON. taskId è l'identificativo del task da utilizzare per le successive verifiche sullo stato; credits indica il numero di crediti riservati a questo task. Questa risposta conferma la corretta creazione del task, non che il video sia pronto. Sarà necessario monitorare periodicamente lo stato del task o utilizzare un Webhook per ricevere il video finale.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 60
}

Crea un task

POST https://api.seevio.ai/v1/videos/generations

Invia un oggetto JSON contenente model e input, insieme a un callback_url opzionale. Specifica sempre l'ID del modello indicato in questa pagina; se omesso, verrà selezionato seedance-2-0.

Corpo della richiesta

CampoTipoObbligatorioDescrizione e vincoli
model
string

ID modello. Per utilizzare Seedance 2.0, imposta questo campo su seedance-2-0.

callback_url
stringNo

Endpoint HTTPS pubblico per le chiamate POST di callback in caso di completamento o errore. Non sono consentiti host locali o reti private.

Esempio: https://example.com/webhooks/seevio
input
object

Impostazioni di generazione. Deve contenere un prompt non vuoto.

Parametri di input

image_urls è obbligatorio in image-to-video. reference-to-video richiede almeno un riferimento a scelta tra image_urls, video_urls e audio_urls.

Fornisci image_urls, video_urls e audio_urls sotto forma di array di stringhe URL (string[]). Ogni URL fornito deve essere accessibile pubblicamente tramite HTTPS, inclusi i contenuti multimediali ignorati dalla modalità selezionata.

CampoTipoObbligatorioPredefinitoDescrizione e vincoli
input.prompt
string

È necessario inserire un prompt in qualsiasi modalità. Può contenere al massimo 10.000 caratteri (spazi esclusi) e non può essere composto unicamente da spazi vuoti.

Esempio: A cat surfing at sunset
input.generation_type
stringNotext-to-video

text-to-video utilizza solo il prompt; image-to-video utilizza 1–2 immagini; reference-to-video utilizza riferimenti di immagini, video e/o audio.

Valori supportati
text-to-video | image-to-video | reference-to-video
input.image_urls
string[]Condizionale[]

image-to-video: 1 immagine per il primo fotogramma, o 2 immagini ordinate per il primo e l'ultimo fotogramma. reference-to-video: fino a 9 immagini. Ignorato in text-to-video.

Esempio: ["https://example.com/first-frame.jpg"]
input.video_urls
string[]Condizionale[]

Inoltrato solo in reference-to-video; fino a 3 video e 15 secondi complessivi. Ignorato nelle altre modalità.

Esempio: ["https://example.com/source.mp4"]
input.audio_urls
string[]Condizionale[]

Inoltrato solo in reference-to-video; fino a 3 file audio e 15 secondi complessivi. Ignorato nelle altre modalità. Non è possibile utilizzare un file audio come unico materiale di riferimento per questo modello. Se fornisci degli audio_urls, devi includere anche almeno un'immagine di riferimento in image_urls o un video di riferimento in video_urls.

Esempio: ["https://example.com/music.mp3"]
input.duration
integerNo5

Durata intera del video generato da 4 a 15 secondi.

Valori supportati
4–15
Esempio: 5
input.aspect_ratio
stringNoadaptive

Proporzioni del video generato. adaptive consente al modello di determinare le proporzioni ottimali.

Valori supportati
16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Esempio: adaptive
input.resolution
stringNo720p

Usa una delle risoluzioni supportate elencate qui.

Valori supportati
480p | 720p | 1080p | 4k
Esempio: 720p
input.generate_audio
booleanNotrue

Richiede la generazione di audio sincronizzato.

Valori supportati
true | false
Esempio: true
input.watermark
booleanNofalse

Richiede l'applicazione di un watermark AI sul video generato.

Valori supportati
true | false
Esempio: false
input.web_search
booleanNofalse

Abilita la ricerca web, se supportata dal modello.

Valori supportati
true | false
Esempio: false
input.return_last_frame
booleanNofalse

Richiede il fotogramma finale. Il risultato della query conterrà data.last_frame_url quando disponibile, altrimenti sarà null.

Valori supportati
true | false
Esempio: true
input.seed
integerNo-1

Valore intero compreso tra -1 e 4294967295. Il valore -1 seleziona un seed casuale.

Valori supportati
-1 a 4294967295
Esempio: 42

I campi booleani devono essere impostati su true o false in formato JSON, non come stringhe o numeri.

Risposta di creazione

La risposta HTTP 200 restituisce taskId (stringa) e credits (numero). Questo conferma la creazione del task, non il suo completamento. L'importo indicato sotto corrisponde all'avvio rapido a 720p di 5 secondi.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 60
}

Modalità di generazione ed esempi

Sostituisci gli URL di esempio con i tuoi file HTTPS accessibili pubblicamente. Gli URL di esempio servono solo a illustrare la struttura della richiesta e non sono risorse scaricabili.

Da testo a video

Genera a partire da un prompt testuale. Gli URL dei file multimediali non vengono considerati in questa modalità.

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-0",
  "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
  }
}'

Primo fotogramma

Fornisci un'immagine come primo fotogramma e descrivi il movimento nel 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-0",
  "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"
  }
}'

Primo e ultimo fotogramma

Fornisci due URL di immagini in ordine: primo fotogramma, poi ultimo fotogramma. Questo esempio richiede anche il fotogramma finale del video generato.

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-0",
  "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
  }
}'

Riferimento multimodale

Combina riferimenti immagine, video e audio. Il prompt rimane obbligatorio. L'inserimento di un video di riferimento modifica la formula di fatturazione.

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-0",
  "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"
  }
}'

Interroga un task

GET https://api.seevio.ai/v1/tasks/{taskId}

Sostituisci l'ID di esempio con il taskId restituito alla creazione. Le query restituiscono solo i task associati all'utente della chiave API; ID non accessibili o inesistenti restituiscono HTTP 404.

Come punto di partenza, effettua un polling ogni 10–20 secondi, rallenta le richieste in caso di HTTP 429 e interrompi quando lo stato diventa completed o failed. Per gli ambienti di produzione, consigliamo l'uso dei webhook. Ogni esempio di codice seguente esegue una singola query.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
StatoDescrizione e vincoli
queuedAccettato e in attesa di elaborazione.
generatingGenerazione in corso.
completedCompletato con successo. Scarica il file da data.results prima della scadenza.
failedErrore definitivo. Verifica failed_reason e billing_status.
CampoTipoDescrizione e vincoli
idstring
Identificatore del task. Corrisponde al taskId della risposta di creazione.
created_atnumber
Data e ora di creazione del task in formato Unix timestamp (secondi).
modelstring
L'ID pubblico del modello utilizzato per questo task.
billing_statusstring
Stato di fatturazione: reserved, charged, refunded o refund_failed.
creditsnumber
Crediti prenotati per questo task. Questo valore viene conservato anche dopo un rimborso; verifica billing_status per determinare l'esito finanziario.
failed_reasonstring | null
Causa del problema per i task falliti; null in caso contrario. Le query fallite omettono la sezione data.
dataobject
Presente nelle query dei task non falliti. Contiene i dettagli di output ed elaborazione.
data.resultsstring[]
Array di URL dei video. Vuoto fino al completamento o dopo la scadenza del video.
data.video_expires_atstring | null
Scadenza del video in formato ISO 8601, oppure null prima che sia disponibile. Salva il file prima di questa data.
data.last_frame_urlstring | null
URL dell'ultimo fotogramma quando richiesto e disponibile, altrimenti null.
data.processing_timenumber | null
Durata dell'elaborazione da parte del provider in secondi, se disponibile, altrimenti null.

Task completato: risposta alla query con i risultati video

Quando la query restituisce status=completed, la generazione del video è terminata. Puoi trovare gli URL del video in data.results; assicurati di scaricarli prima della data indicata in data.video_expires_at. Lo stato billing_status=charged indica che i crediti prenotati sono stati effettivamente addebitati.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-0",
  "status": "completed",
  "billing_status": "charged",
  "credits": 60,
  "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
  }
}

Task fallito: risposta alla query con dettagli sul fallimento e sulla fatturazione

Se la query restituisce status=failed, significa che la generazione non è andata a buon fine. Consulta failed_reason per conoscerne il motivo e billing_status per l'esito del rimborso. In questo esempio, lo stato refunded indica che i crediti sono stati riaccreditati. La voce credits mostra la quota inizialmente prenotata e la risposta non include la chiave data.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-0",
  "status": "failed",
  "billing_status": "refunded",
  "credits": 60,
  "failed_reason": "provider_failed"
}

Webhook

Imposta callback_url nella richiesta di creazione per ricevere una richiesta POST JSON al completamento o al fallimento del task. Restituisci una risposta 2xx entro 15 secondi. Gli invii non riusciti verranno riprovati; gestisci le notifiche duplicate in modo idempotente tramite l'ID del task.

L'endpoint di callback deve accettare richieste POST con un corpo in formato JSON (Content-Type: application/json).

Crea un task con 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-0",
  "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"
}'

I payload dei webhook differiscono dalle risposte alle query sui task: omettono billing_status e credits; i dettagli sugli errori si trovano all'interno di data.failed_reason e data.credits_refunded. Il valore created_at del webhook indica il timestamp dell'evento in formato Unix (secondi).

Attività completata: payload di callback riuscito

In caso di generazione riuscita, la callback conterrà lo stato status=completed. Utilizza id per identificare l'attività e data.results per recuperare gli URL dei video. Assicurati di scaricare e salvare i risultati prima della scadenza indicata in data.video_expires_at.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-0",
  "status": "completed",
  "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
  }
}

Attività non riuscita: payload di callback fallito

In caso di errore durante la generazione, la callback conterrà lo stato status=failed. Utilizza id per identificare l'attività, data.failed_reason per conoscere il motivo del fallimento e data.credits_refunded per verificare il numero di crediti riaccreditati.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-0",
  "status": "failed",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 60
  }
}

Esempio di ricevitore

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.data;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

  return new Response(null, { status: 200 });
}

Questo esempio in Next.js legge il corpo JSON della callback e gestisce direttamente le attività completate e fallite. Ti consigliamo di aggiungere logiche di persistenza e deduplicazione dei task-ID per la tua applicazione, e di accodare i processi più lenti prima di confermare la callback.

Requisiti e limitazioni dei media

  • Tutti i media e gli URL di callback devono essere URL HTTPS pubblici. Evita l'uso di localhost, IP privati o file che richiedono cookie o autenticazione. Gli URL dei file video/audio di riferimento devono indirizzare a file multimediali leggibili direttamente.
  • In reference-to-video, fornisci almeno un riferimento, con un limite massimo di 9 immagini, 3 video, 3 file audio e 12 elementi multimediali complessivi. La durata totale dei video e quella degli audio non devono superare i 15 secondi ciascuna.
  • La modalità text-to-video ignora tutti i riferimenti multimediali. La modalità image-to-video considera solo le immagini del primo e dell'ultimo fotogramma, ignorando i riferimenti video e audio. Usa la modalità reference-to-video per combinare più formati.
  • Per i modelli Seedance 2.0, associa l'audio ad almeno un'immagine o a un video per garantire la compatibilità. Gli esempi di solo audio sono disponibili nella pagina di Seedance 2.5.

Requisiti delle immagini

  • Ogni immagine deve avere una dimensione inferiore a 30 MB.
  • Formati supportati: jpeg, png, webp, bmp, tiff, gif.
  • Rapporto d'aspetto (larghezza ÷ altezza): compreso tra 0,4 e 2,5.
  • Larghezza e altezza devono essere comprese tra 300 e 6.000 pixel.

Requisiti dei video

  • Formati supportati: mp4, mov.
  • Ogni video non deve superare i 100 MB.
  • Frequenza fotogrammi: compresa tra 24 e 60 fps.
  • Rapporto d'aspetto (larghezza ÷ altezza): compreso tra 0,4 e 2,5.
  • Pixel totali (larghezza × altezza): compresi tra 407.696 e 8.295.044. Ad esempio, 614 × 664 = 407.696 e 3.326 × 2.494 = 8.295.044. Questi sono solo esempi di calcolo dei pixel, non requisiti fissi per larghezza e altezza.

Requisiti dei file audio

  • Formati supportati: wav, mp3.
  • Ogni file audio non deve superare i 15 MB.

Errori

Gli errori HTTP contengono un oggetto error con code e message. Un task accettato correttamente può comunque fallire in una fase successiva; interroga lo stato del task o gestisci la chiamata di callback per l'errore.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTPCampoCosa fare
400invalid_request
Correggi il formato JSON, il prompt mancante, l'intervallo dei parametri o l'URL del file multimediale prima di riprovare.
401invalid_api_key
Controlla il token Bearer e verifica che la chiave API sia attiva.
402insufficient_credits
Aggiungi crediti o riduci il costo del task. La risposta potrebbe indicare i crediti richiesti e quelli effettivamente disponibili.
403forbidden
Verifica le limitazioni a livello di account descritte nel messaggio di errore.
404not_found
Verifica l'ID del task e accertati che la chiave appartenga all'utente che ha avviato il task.
429rate_limited
Attendi l'intervallo indicato in Retry-After prima di effettuare un nuovo tentativo.
500internal_error
Verifica il messaggio d'errore e i log delle API. Riprova con attenzione: l'invio ripetuto di una richiesta di creazione può generare un nuovo task addebitabile.

Limiti di frequenza

Creazione task: per impostazione predefinita, ciascuna chiave API consente fino a 100 richieste al minuto. Al momento non sono disponibili limiti di frequenza personalizzati.

Interrogazione task: per impostazione predefinita, ciascuna chiave API consente fino a 120 richieste al minuto. Le richieste di interrogazione e quelle di creazione dei task vengono conteggiate separatamente.

La risposta HTTP 429 include Retry-After: 60 per la creazione e Retry-After: 5 per le query. Applica un backoff ed evita di interrogare lo stato con una frequenza eccessiva.