InícioBlog → Erros da API de transcrição e o que eles realmente significam

Erros da API de transcrição e o que eles realmente significam

Publicado em 2026-08-20 · 5 min de leitura

Integrações quebram pouco e sempre na hora errada. A boa notícia: os erros de transcrição vêm de uma lista curta de causas e a maioria se resolve em um minuto. Vamos por ordem, indicando também quais merecem retentativa automática.

Tabela de códigos

CódigoO que aconteceuO que fazer
401Chave errada, revogada ou não enviadaConferir o cabeçalho Authorization e a chave
400Arquivo vazio, corrompido ou que não é áudioAbrir num player, verificar o codec
413Arquivo acima do limite de tamanhoComprimir para opus ou dividir
429Limite de taxa atingido ou saldo esgotadoReduzir o ritmo ou recarregar o saldo
502Motor de reconhecimento indisponível no momentoRepetir após uma pausa

O corpo do erro segue o formato conhecido — um objeto error com message e type — de modo que exceções tipadas dos SDKs continuam funcionando.

401 quase sempre é o cabeçalho

Três causas típicas, por frequência:

A checagem mais rápida é um curl — se passar, o problema está no código, não no acesso.

429 significa duas coisas

O mesmo código chega quando você envia rápido demais e quando os minutos pagos acabaram. O texto da mensagem distingue os casos. O primeiro se resolve com fila e limite de paralelismo; o segundo, recarregando o saldo.

Bom hábito: acompanhar o saldo na área do cliente e configurar aviso com antecedência, em vez de descobrir pelo log de produção.

Como repetir direito

Só falhas temporárias merecem repetição: 429, 502 e quedas de rede. 400, 401 e 413 devolverão exatamente a mesma resposta para sempre — isso se corrige, não se martela.

import time
from openai import OpenAI, APIStatusError, APIConnectionError

client = OpenAI(base_url="https://voicesscribe.com/v1", api_key="sua chave", max_retries=0)

def transcribe(path, tries=4):
    delay = 2
    for attempt in range(tries):
        try:
            with open(path, "rb") as f:
                return client.audio.transcriptions.create(model="whisper-1", file=f).text
        except APIStatusError as e:
            if e.status_code not in (429, 500, 502, 503):
                raise
        except APIConnectionError:
            pass
        time.sleep(delay)
        delay *= 2
    raise RuntimeError("não foi possível transcrever " + str(path))

Dobrar a espera importa mais que o número de tentativas: dá folga ao serviço e evita que você esbarre no mesmo limite um segundo depois.

Teste com as suas próprias gravações. O cadastro leva um minuto e os minutos gratuitos bastam para avaliar a qualidade.

Obter uma chave de API grátis

Perguntas frequentes

Requisições com erro consomem minutos?

Não. Só requisições processadas com sucesso são cobradas; erros não consomem nada.

Por que recebo 400 num arquivo que toca normalmente?

Normalmente é arquivo renomeado: a extensão diz mp3 mas o contêiner é outro. Verifique com ffprobe e recodifique se preciso.

Como saber se o 429 é limite ou saldo?

Pela mensagem no corpo da resposta. O saldo e o histórico de débitos ficam sempre visíveis na área do cliente.

Vale ativar as retentativas embutidas do SDK?

Em geral não. Sua própria lógica é mais segura porque você decide quais códigos repetir e quanto esperar.

Leitura relacionada