Guida rapida a Immagini e Video
L’API Immagini e Video è asincrona. Invi una generazione e, una volta completata, scarichi il risultato da un URL firmato. Immagini e video hanno endpoint separati, ma la struttura delle richieste e delle risposte è la stessa per entrambi.
Esistono due modi per ottenere il risultato. La consegna tramite webhook è quella consigliata, nonché quella usata negli esempi seguenti: ElevenLabs chiama il tuo endpoint nel momento in cui una generazione raggiunge uno stato terminale, quindi non vengono consumate risorse nell’attesa. Il polling è l’alternativa quando non hai un endpoint che possa ricevere un callback, e ogni esempio mostra come passare a questa opzione.
L’API Immagini e Video richiede un piano Pro o superiore. Le chiamate da un workspace con un piano inferiore
vengono rifiutate con un errore 402 paid_plan_required. La tua chiave API deve inoltre avere l’autorizzazione
Immagini e Video o Flows per il workspace.
Genera un’immagine
Crea una chiave API
Crea qui una chiave API nella dashboard, che userai per accedere all’API in modo sicuro.
Archivia la chiave come secret gestito e passala agli SDK come variabile d’ambiente tramite un file .env oppure direttamente nella configurazione della tua app, a seconda delle tue preferenze.
Installa l'SDK
SDK
CLI
Useremo anche la libreria dotenv per caricare la nostra chiave API da una variabile d’ambiente.
Invia la generazione
Ogni modello ha una propria classe di richiesta e i relativi campi sono i parametri accettati dal modello, quindi cambiando modello possono cambiare i campi disponibili. I campi sconosciuti vengono rifiutati anziché ignorati.
webhook richiede che il risultato completato venga consegnato ai webhook del tuo workspace, quindi la chiamata
restituisce un risultato non appena la generazione viene messa in coda. Richiede un webhook iscritto agli eventi di
generazione; consulta i webhook per Immagini e
Video per configurarne uno, oppure ometti il
campo e usa invece il polling.
SDK
CLI
La risposta contiene l’ID della generazione e nient’altro. Una generazione appena creata è sempre
pending:
Ottieni il risultato
Poiché la richiesta ha abilitato webhook, ElevenLabs invia un evento flows_generation al tuo
endpoint quando la generazione raggiunge completed o failed. Il campo data dell’evento è identico a
quello restituito dall’endpoint GET e i webhook per Immagini e
Video illustrano l’handler che lo riceve.
Se non hai un endpoint per ricevere callback, rimuovi webhook dalla richiesta precedente e usa invece il polling.
Recupera la generazione finché il suo stato non è completed o failed, lasciando almeno due secondi
tra una richiesta e l’altra per un’immagine — consulta le linee guida sul polling per gli intervalli
da usare per ciascuna modalità.
In entrambi i casi, una generazione completata contiene gli stessi campi:
Genera un video
Le generazioni video usano flows.video e seguono lo stesso schema di invio e recupero. Un video può richiedere
diversi minuti, quindi questo esempio abilita la consegna tramite webhook con webhook invece di attendere il
risultato.
La chiamata restituisce un risultato non appena la generazione viene messa in coda e il risultato completato viene consegnato a ogni
webhook del tuo workspace iscritto agli eventi di generazione. L’output video è in formato MP4, quindi il payload completato riporta
content_mime_type come video/mp4. Consulta i
webhook per Immagini e Video per configurare un
webhook e scrivere l’handler che riceve questo evento.
webhook richiede almeno un webhook del workspace iscritto agli eventi di generazione. Senza uno,
la chiamata di creazione viene rifiutata invece di avviare una generazione il cui risultato non ha dove essere consegnato. Rimuovi
il campo per usare il polling con flows.video.get e non eseguire il polling più di una volta ogni 10
secondi.
Recupero dei risultati
Webhook e polling restituiscono lo stesso payload, quindi la scelta riguarda il modo in cui attendi il risultato, non ciò che ottieni.
Usa i webhook quando possibile. Ricorri al polling quando non hai dove ricevere un callback e, quando lo usi, segui gli intervalli indicati di seguito.
Scelta delle destinazioni webhook
webhook accetta due forme. WebhookTarget_All raggiunge ogni webhook iscritto agli eventi di
generazione, ed è l’opzione predefinita corretta perché continua a funzionare se i webhook vengono ruotati o sostituiti.
WebhookTarget_Ids limita la consegna a webhook specifici, quando un workspace distribuisce eventi a più
destinatari e un determinato job deve raggiungerne uno solo:
Ogni ID deve essere già iscritto agli eventi di generazione; indicare un webhook non iscritto viene rifiutato anziché ignorato in silenzio. Il payload consegnato è identico a quello restituito dall’endpoint GET, quindi un handler scritto per uno funziona anche per l’altro. La guida ai webhook spiega come configurare un webhook, verificare la firma e gestire l’evento.
Linee guida sul polling
Il runtime di una generazione dipende dal modello, dalla risoluzione e, per i video, dalla durata, quindi esegui il polling con un intervallo adeguato a ciò che hai richiesto anziché con un ciclo a intervallo fisso:
- Immagini: esegui il polling non più di una volta ogni 2 secondi. La maggior parte viene completata entro pochi secondi.
- Video: esegui il polling non più di una volta ogni 10 secondi. Considera minuti, non secondi, e adatta
l’intervallo in base a
duration_secseresolution.
Due regole valgono per entrambi. Riduci la frequenza quando una generazione richiede più tempo del previsto — raddoppiare l’intervallo fino a circa un minuto evita che una generazione lenta si trasformi in centinaia di richieste. E imposta un limite al ciclo, così una generazione bloccata termina con un timeout nel tuo codice anziché con un ciclo senza limiti.
Un polling più rapido non offre alcun vantaggio: lo stato di una generazione non cambia prima solo perché lo hai richiesto due volte. Un polling aggressivo e prolungato può restituire risposte 429, che dovresti gestire con un backoff esponenziale.
Ciclo di vita della generazione
Una generazione passa attraverso quattro stati. I due stati terminali contengono campi diversi, quindi
verifica status prima di leggere il resto della risposta.
content_url è un URL firmato che scade circa un’ora dopo la restituzione della risposta. Recupera
nuovamente la generazione per ottenere un URL aggiornato, anziché memorizzare l’URL firmato stesso.
Gestione degli errori
Una generazione non riuscita riporta una categoria failure_reason insieme a un messaggio error_message leggibile:
Le generazioni non riuscite non vengono addebitate. I problemi relativi ai parametri che possono essere rilevati in anticipo — un campo non supportato, un valore al di fuori dell’intervallo consentito da un modello o una combinazione non valida di input di riferimento — vengono invece rifiutati dalla richiesta di creazione, prima che inizi qualsiasi generazione.
Prezzi
Le generazioni vengono addebitate in crediti. Il costo dipende dal modello, dai parametri scelti come risoluzione e durata e dagli input forniti. Una generazione costa quanto nell’API quanto nell’app ElevenLabs, dove il costo viene mostrato prima dell’invio. Consulta Immagini e Video nel playground per scoprire come viene presentato il costo di una determinata combinazione di modello e impostazioni.
Elenca le tue generazioni
Ogni endpoint elenca le generazioni create tramite esso, dalla più recente alla meno recente. I risultati sono limitati al tuo workspace e a questa API, quindi le generazioni create nell’app ElevenLabs non vengono visualizzate.
page_size accetta valori da 1 a 100 e il valore predefinito è 30. Passa status per restituire solo le generazioni in un determinato
stato del ciclo di vita e model_id per restituire solo le generazioni di un singolo modello. Considera next_cursor come
opaco: passa nuovamente il valore esatto e interrompi quando has_more è false.
Modelli disponibili
L’API espone un sottoinsieme dei modelli disponibili nell’app ElevenLabs. Ogni modello accetta solo i parametri elencati per quel modello: l’invio di un campo supportato da un altro modello restituisce un errore di convalida.
I modelli ByteDance sono disabilitati per impostazione predefinita e richiedono un’approvazione esplicita prima dell’uso. Finché l’accesso non viene
concesso, una richiesta che ne indica uno viene rifiutata con un errore model_access_denied. I clienti Enterprise
possono contattare l’assistenza per richiedere l’accesso.
Modelli di immagini
I modelli GPT Image 2.5 accettano valori quality di low, medium, high, xhigh e max e
usano high per impostazione predefinita. GPT Image 2 arriva fino a high e usa medium per impostazione predefinita.
Modelli video
Per funzionalità, disponibilità e prezzi dei modelli, consulta la panoramica di Immagini e Video.