DocumentazioneGestire gli errori

Gestire gli errori

Distingui le chiamate rifiutate dalle trascrizioni non riuscite. Consulta i codici e verifica quando ha senso riprovare.

Un errore può arrivare in due momenti. Se l'API rifiuta la chiamata, ricevi subito un errore nella risposta. Se invece accetta la trascrizione e qualcosa va storto durante l'elaborazione, ritrovi la trascrizione con status uguale a failed.

Come leggere un errore API

Quando una chiamata /v1 non viene accettata, la risposta segue sempre questa struttura:

{
  "error": {
    "code": "insufficient_minutes",
    "message": "Not enough minutes",
    "retryable": false,
    "action_url": "https://transcript1.com/dashboard/billing",
    "minutes_needed": 20,
    "minutes_remaining": 3
  }
}

Nel codice della tua applicazione, distingui gli errori usando code. Usa message solo per mostrare la spiegazione all'utente: il testo può cambiare. Con retryable uguale a true, puoi riprovare la stessa chiamata più tardi.

In alcuni casi trovi altri campi oltre a retryable:

CampoCodice associatoA cosa serve
action_urlinsufficient_minutes, no_active_plan, topup_needs_userLink per acquistare un piano o aggiungere minuti con una ricarica.
minutes_needed, minutes_remaininginsufficient_minutesMinuti necessari per la chiamata e saldo disponibile. I minuti necessari valgono null se non li conosciamo ancora.
reason, packstopup_needs_userPerché la carta non è stata addebitata e quanti pacchetti erano stati richiesti.
supported_platformsunsupported_platformElenco delle piattaforme accettate: ["youtube", "x", "tiktok", "instagram", "facebook", "bluesky", "twitch", "dailymotion", "pinterest", "linkedin", "snapchat"].
missing_chunksupload_incompleteIndici delle parti del file che devi ancora inviare.
max_bytesmedia_too_largeLimite di dimensione del file per il tuo account, in byte.
paramsinvalid_requestNegli errori di validazione del body o della query, associa ogni campo alla spiegazione del problema.

Quando l'API rifiuta la chiamata

Stato HTTPcodePuoi riprovare senza modifiche?Causa
400, 422invalid_requestNoManca un parametro o un campo del body, oppure il valore non è valido. Succede anche con diarize insieme a source: "captions", con reuse_recent insieme a webhook_url o con un body che non contiene JSON valido.
422invalid_urlNoIl link non è valido oppure platform non corrisponde al link. Usa YouTube, X, TikTok, Instagram, Facebook, Bluesky o una delle altre piattaforme in Link e opzioni di trascrizione.
422unsupported_platformNoIl valore di platform non rientra tra quelli accettati.
422unsupported_mediaNoL'estensione del file non è tra quelle supportate.
401unauthorizedNoManca la credenziale, oppure non è valida, è scaduta o è stata revocata. Vale anche per un token di caricamento non valido o scaduto.
403insufficient_scopeNoIl token OAuth non ha lo scope transcriptions:read o transcriptions:write necessario per la chiamata.
403email_not_verifiedNoDevi confermare l'indirizzo email prima di creare trascrizioni o sessioni live.
402insufficient_minutesNoHai 0 minuti utilizzabili, oppure non bastano per questa trascrizione o per un minuto iniziato di una sessione live. Se la ricarica automatica è attiva, transcript1 prova prima a ricaricare. Acquista minuti da action_url, oppure lascia che un agente li acquisti con POST /v1/topups o con lo strumento MCP top_up.
402no_active_planNoPer acquistare una ricarica serve un piano a pagamento attivo. Questo errore arriva da POST /v1/topups e dagli endpoint di fatturazione della dashboard, non dagli endpoint di trascrizione.
402topup_needs_userSolo per pending e in_progressPOST /v1/topups non ha addebitato la carta. reason spiega perché: not_allowed (la credenziale non può acquistare ricariche, o il suo utente non è admin del team), cap_reached (il limite mensile per gli agenti non ha più margine), card_declined, authentication_required o no_card. L'utente può acquistare i pacchetti da action_url. Con pending (il pagamento non è ancora confermato) e in_progress (è in corso un'altra ricarica), l'addebito potrebbe ancora andare a buon fine: riprova più tardi con lo stesso Idempotency-Key invece di mandare l'utente ad acquistare.
404not_foundNoNessuna trascrizione corrisponde all'ID, oppure appartiene a un altro team.
409upload_incompleteNoIl file non è completo: invia i chunk mancanti e richiama il completamento.
409invalid_stateNoLa trascrizione non è più in attesa del file. Non puoi inviare altri chunk né completare il caricamento.
409session_endedNoLa sessione live è terminata, quindi POST /v1/live/sessions/:id/token non può emettere un token. Arriva anche come evento error del WebSocket.
422unsupported_languageNoIl language della sessione live non è supportato.
422unsupported_translationNoLa lingua translate_to della sessione live non è supportata, oppure la traduzione live non è disponibile.
409idempotency_conflictNoHai già usato Idempotency-Key con parametri diversi.
413media_too_largeNoLa dimensione del file supera il limite del tuo account. Consulta Caricare file.
413invalid_requestNoIl body JSON supera 1 MB. Per i file, il codice corrispondente è media_too_large.
429rate_limitedSìHai superato il numero di chiamate al minuto. Aspetta quanto indicato da Retry-After, in secondi.
429too_many_active_jobsSìHai troppe trascrizioni in corso o troppi caricamenti aperti. Aspetta quanto indicato da Retry-After, in secondi.
429too_many_live_sessionsSìLe sessioni live simultanee del tuo piano sono tutte in uso. Aspetta quanto indicato da Retry-After (30 secondi).
500internal_errorSìSi è verificato un errore nei nostri sistemi. Puoi riprovare tra poco.
503service_unavailableSìIl servizio non è disponibile al momento. Puoi riprovare tra poco.
503live_capacitySìTutta la capacità live è in uso. Aspetta quanto indicato da Retry-After (30 secondi) e crea di nuovo la sessione.
503live_unavailableNoLa trascrizione live non è disponibile al momento.

Se il browser si autentica con un cookie di login anziché con una credenziale bearer, controlliamo anche l'origine della chiamata. Da un altro sito ricevi 403 forbidden_origin. Il controllo non si applica alle chiamate API con l'header Authorization.

In tutte le risposte 429, l'header Retry-After indica quanti secondi aspettare. Trovi le soglie per piano in Costi e limiti.

Quando e come riprovare

  • Ripeti la chiamata senza modificarla solo con retryable uguale a true: vale per rate_limited, too_many_active_jobs, too_many_live_sessions, live_capacity, internal_error, service_unavailable e per topup_needs_user con reason pending o in_progress. Aspetta i secondi di Retry-After, se presente; altrimenti aumenta l'intervallo tra i tentativi.
  • Per ripetere POST /v1/transcriptions o POST /v1/topups, mantieni lo stesso Idempotency-Key. Se la prima chiamata era riuscita, eviti un secondo addebito.
  • Con gli altri codici, risolvi prima il problema della chiamata.

Trascrizione live

POST /v1/live/sessions e gli altri endpoint live usano la stessa struttura di errore. Valgono anche per loro invalid_request, unsupported_language, insufficient_minutes e email_not_verified, insieme ai codici live della tabella qui sopra. Creare una sessione non è idempotente: ripetere la chiamata dopo too_many_live_sessions o live_capacity crea una nuova sessione.

Una volta creata la sessione, i problemi arrivano sul WebSocket come eventi error e codici di chiusura, non come errori HTTP. Tutti gli eventi sono in Trascrizione live.

Codice di chiusuraSignificato
1000Chiusura normale, dopo session.ended.
1011Errore imprevisto del server. Riprendi con un nuovo token.
1012Riavvio del server, dopo reconnect. Riprendi con un nuovo token.
4001Token non valido, scaduto o già usato.
4004Sessione non trovata o già terminata.
4008Violazione del protocollo: un frame audio di lunghezza dispari o troppo grande.
4010Sostituita da una connessione più recente alla stessa sessione.

Una sessione live che termina per un motivo come balance_exhausted o idle_timeout non è un errore: invia session.ended con un motivo di conclusione e viene salvata. Vedi Motivi di conclusione.

Quando la trascrizione non riesce

Una trascrizione può non riuscire anche dopo che l'API ha risposto alla chiamata iniziale. In quel caso ha status uguale a failed e contiene error: { "code", "message" }. Controlla error quando leggi lo stato o ricevi il webhook transcription.failed. Se una traduzione fallisce, viene inviato il webhook transcription.translation.failed e la trascrizione non fallisce mai per questo.

error.codeCosa è successoCosa fare
media_unavailableIl video non esiste oppure non è più accessibile.Non riprovare lo stesso link: controlla l'URL.
media_privateNon possiamo accedere al video perché è privato.Usa un post pubblico o un video YouTube pubblico o non in elenco.
login_requiredPer vedere il video serve il login sulla piattaforma.Non riproviamo: è un errore permanente.
no_audioManca la traccia audio del video.Non riproviamo: è un errore permanente.
age_restrictedLa piattaforma applica un limite di età al video.Non riprovare il link; carica il file.
live_streamLa diretta è in corso o deve ancora iniziare.Aspetta che sia finita, poi riprova.
no_captionsHai scelto source uguale a captions, ma manca una traccia di sottotitoli adatta.Passa a source: "auto" o "stt".
media_too_longLa registrazione supera il limite di 5 ore per lo speech-to-text.Dividila in parti più brevi prima di inviarla.
unsupported_mediaNon riusciamo a leggere il file, oppure manca la traccia audio.Invia un file in un formato supportato.
no_speechNessun parlato rilevato.Non riprovare la stessa registrazione.
unsupported_languageNon supportiamo la lingua della registrazione.Correggi language con un codice supportato oppure "auto".
insufficient_minutesAl momento dell'addebito non avevi più abbastanza minuti e la ricarica automatica, se attiva, non è riuscita ad aggiungerne.Dopo una ricarica.
fetch_failedNon siamo riusciti a scaricare la registrazione dopo più tentativi.Puoi riprovare più tardi.
transcription_failedLa trascrizione dell'audio non è riuscita dopo più tentativi.Puoi riprovare più tardi.

Se la trascrizione non riesce o la annulli, non paghi. Se avevamo già scalato dei minuti, li restituiamo al tuo saldo.

Ultimo aggiornamento 5 novembre 2026