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.

URL di base
https://api.seevio.ai
In 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_xxxxxxxx
sk_live_

Usa le chiavi sk_live_ per il traffico di produzione.

sk_test_

Usa le chiavi sk_test_ per i test di integrazione in ambiente sandbox con lo stesso contratto API.

401

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.

Invia un'attività

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
    }
  }'
Opzione risultato: Polling

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"
Opzione risultato: Webhook

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.

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

Modalità di generazione

Il parametro generation_type controlla quali file multimediali sono accettati in input e come vengono interpretati dal modello.

Funzionalità di Seedance 2.5
seedance-2-5

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 obbligatoriMedia opzionaliNote
text-to-videopromptduration, aspect_ratio, resolution, seedSolo prompt di testo. Non è necessario specificare image_urls, video_urls o audio_urls.
image-to-videoprompt + array image_urls (1-2 URL di immagini)duration, aspect_ratio, resolution, seedimage_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-videoprompt + almeno un'immagine, un video o un audio di riferimentoimmagini, video e audio entro i limiti consentitiSeedance 2.5 supporta riferimenti solo audio. Per Seedance 2.0, inserisci almeno un'immagine o un video se fornisci un file audio.
text-to-video

Usa 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-video

Usa 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-video

Usa 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

Testo + Immagine
Testo + Video
Testo + Audio (Seedance 2.5)
Testo + Immagine + Video
Testo + Immagine + Audio
Testo + Video + Audio
Testo + Immagine + 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 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

IntestazioneObbligatorioDescrizioneEsempio
AuthorizationChiave API Bearer utilizzata per autenticare la richiesta.Bearer sk_live_xxx
Content-TypeTutte le richieste di scrittura utilizzano il formato JSON.application/json

Campi di primo livello

CampoTipoObbligatorioPredefinitoIntervallo / EnumModalitàEsempio
model

Variante 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-seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-minituttiseedance-2-5
callback_url

Endpoint HTTPS che riceve le chiamate di callback in caso di completamento o fallimento dell'attività.

stringNo-URL HTTPS, no reti privatetuttihttps://your-domain.com/hook
input

Impostazioni di generazione e riferimenti multimediali.

object--tutti-

input.* campi

CampoTipoObbligatorioPredefinitoIntervallo / EnumModalitàEsempio
input.prompt

Prompt testuale che descrive il video da generare.

string-testo non vuototuttia cat surfing
input.generation_type

Modalità di generazione. Il valore predefinito è text-to-video.

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

URL 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_urls

URL 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_urls

URL 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.duration

Durata del video finale in secondi.

intNo5Seedance 2.5: 4-30 secondi. Seedance 2.0: 4-15 secondi.tutti5
input.aspect_ratio

Proporzioni del video finale. adaptive consente al servizio di calcolare le proporzioni ideali. La modalità image-to-video di Seedance 2.5 supporta esclusivamente adaptive.

stringNoadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptivetutti16:9
input.resolution

Livello di risoluzione del video finale.

stringNo720pSeedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (a seconda della variante).tutti720p
input.generate_audio

Specifica se il modello deve generare l'audio, se supportato.

booleanNotruetrue | falsetuttitrue
input.watermark

Specifica se aggiungere una filigrana.

booleanNofalsetrue | falsetuttifalse
input.web_search

Specifica se abilitare la ricerca web per arricchire il prompt, se supportata.

booleanNofalsetrue | falsetuttifalse
input.return_last_frame

Specifica se restituire l'URL dell'ultimo fotogramma, se disponibile.

booleanNofalsetrue | falsetuttifalse
input.seed

Seed deterministico per le varianti di Seedance 2.0. Questo campo non è supportato in Seedance 2.5; ometterlo.

intNo-1-1 o 0-4294967295tutti-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 crediti

Risposta

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"
}
ValoreSignificato
status=queuedAttività accettata e in attesa di essere inviata o elaborata.
status=generatingIl provider sta elaborando la generazione del video.
status=completedVideo generato con successo. Il campo data.results contiene l'URL del file finale.
status=failedLa generazione è fallita o è andata in timeout.
billing_status=reservedI crediti rimangono prenotati mentre l'attività è in corso.
billing_status=chargedL'attività è stata completata con successo e la prenotazione dei crediti è stata contabilizzata.
billing_status=refundedL'attività è fallita o è andata in timeout e i crediti prenotati sono stati riaccreditati.
billing_status=refund_failedLa 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
  }
}
CodiceHTTPSignificatoRiprovare?
invalid_request400Parametri mancanti o non validi.No, correggi la richiesta prima di riprovare.
invalid_api_key401La chiave API è mancante, non valida o è stata revocata.No, usa una chiave valida.
insufficient_credits402Crediti insufficienti. L'attività non viene accettata né tariffata.Sì, dopo aver ricaricato i crediti.
forbidden403La chiave API non dispone dei permessi necessari.No.
not_found404L'attività non esiste o non appartiene al proprietario della chiave API.No.
rate_limited429Limite di frequenza delle richieste superato.Sì, rispettando l'intestazione Retry-After.
internal_error500Errore 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.

Log API