Speech to text API para arquivos de áudio e vídeo

Use a speech to text API para transcrever arquivos de áudio e vídeo com marcações de tempo, idioma por trecho e identificação de falantes opcional. Envie até 95 MB em um request. Arquivos maiores, de até 2 GB, vão em partes; se o upload cair, você retoma de onde parou.

  • Até 95 MB em um único request
  • Até 2 GB em partes, sem recomeçar se o upload cair
  • Arquivo de mídia excluído 24 horas após o fim da transcrição

Escolha como enviar o arquivo

Áudio ou vídeo, sem extrair a faixa antes
Envie MP3, WAV, M4A, FLAC, OGG, OPUS, MP4, MOV, WebM ou MKV. O arquivo precisa conter uma faixa de áudio.
Um request para arquivos de até 95 MB
Faça um POST /v1/transcriptions com multipart/form-data. É a forma mais direta de transcrever um arquivo de áudio via API quando ele já está no seu servidor.
Upload em partes para arquivos de até 2 GB
Reserve o upload, envie as partes de cerca de 8 MiB e confirme a conclusão. Se a conexão cair, envie só o que falta.
Gravações de até 5 horas
O limite de duração é separado do tamanho do arquivo. Se o áudio passar de 5 horas, a transcrição retorna media_too_long e não há cobrança.
O texto fica; o arquivo original não
Excluímos a mídia enviada 24 horas depois que a transcrição chega ao status final. A transcrição fica salva até você excluí-la.

Comece com um upload multipart

Envie os bytes no campo file. Você também pode incluir language, diarize, source e webhook_url como campos do formulário. Veja o request multipart completo e como receber uma notificação por webhook.

Se o arquivo já está no servidor, basta enviá-lo com seu cliente HTTP. Deixe o cliente montar o boundary do multipart. Um caminho local dentro de um JSON não envia o arquivo: o request precisa levar os bytes. Se o arquivo estiver vazio ou tiver uma extensão incompatível, corrija isso antes de tentar de novo.

Confira tamanho e duração separadamente. Um áudio muito comprimido pode ter menos de 95 MB e passar de 5 horas. Um vídeo curto em alta resolução pode ultrapassar o limite do multipart. Escolha a forma de upload pelo tamanho em bytes e valide a duração à parte.

cURL
curl -X POST "https://api.transcript1.com/v1/transcriptions?wait=60" \
  -H "Authorization: Bearer $TRANSCRIPT1_API_KEY" \
  -F [email protected] \
  -F language=auto

Reserve o upload antes de enviar um arquivo grande

Informe o nome e o tamanho do arquivo para reservar o upload. A resposta traz o plano das partes e um X-Upload-Token exclusivo desse envio. A documentação de upload em partes mostra a sequência completa.

Siga o plano retornado pela API. Cada parte tem índice, posição inicial em bytes e tamanho. Leia exatamente esse intervalo do arquivo; a última parte pode ser menor. O token autentica os requests PUT e vale por 1 hora, somente para esse upload. Ele não substitui sua chave de API nos demais endpoints.

Use a mesma Idempotency-Key se precisar repetir a reserva. Se o token expirar, repita a reserva com essa chave e os mesmos parâmetros para receber um token novo para o upload existente. Criar uma reserva a cada interrupção deixa transcrições abertas sem necessidade e dificulta acompanhar o envio.

Reserva de upload com Idempotency-Key
curl -X POST "https://api.transcript1.com/v1/transcriptions" \
  -H "Authorization: Bearer $TRANSCRIPT1_API_KEY" \
  -H "Idempotency-Key: interview-2026-10-13" \
  -H "Content-Type: application/json" \
  -d '{"upload":{"filename":"interview.m4a","size":48210334,"mime_type":"audio/mp4"}}'

Envie as partes e confirme quando terminar

Faça um PUT para cada URL recebida, usando o token de upload. Depois confirme a conclusão. O transcript1 verifica as partes e coloca a transcrição na fila. Veja os endpoints de upload para consultar o progresso e concluir o envio.

Para retomar, consulte GET /v1/transcriptions/:id/upload e compare received_chunks com o plano original. Envie só as partes ausentes. Reenviar uma parte substitui a anterior, mas o tamanho precisa continuar igual ao previsto. Um 401 pode indicar que o token expirou; não é motivo para gerar o arquivo de novo.

Se faltar alguma parte, a conclusão retorna 409 upload_incomplete com os índices que você precisa enviar. Quando o upload estiver completo e a transcrição entrar na fila, consulte seu status ou espere o webhook. Na interface, diferencie o progresso do upload do progresso da transcrição.

Envio de uma parte e conclusão do upload
curl -X PUT "https://api.transcript1.com/v1/transcriptions/tr_8fK2Lm0PqRsTuVwXyZaBcD/upload/chunks/0" \
  -H "X-Upload-Token: t1u_..." \
  -H "Content-Type: application/octet-stream" \
  --data-binary @chunk-0.bin

curl -X POST "https://api.transcript1.com/v1/transcriptions/tr_8fK2Lm0PqRsTuVwXyZaBcD/upload/complete" \
  -H "Authorization: Bearer $TRANSCRIPT1_API_KEY"

Upload concluído não significa transcrição pronta

Uma reserva em awaiting_upload ainda não está transcrevendo nada. Primeiro os bytes chegam, depois verificamos o upload e só então começamos a processar a mídia. Se a conexão cair depois da confirmação, consulte a transcrição antes de repetir o request de conclusão.

Cada equipe pode manter até 20 reservas abertas. Se você não concluir o upload em 24 horas, a reserva é cancelada e as partes são excluídas. Após o processamento chegar ao status final, excluímos o arquivo de mídia em 24 horas. O texto fica até você excluí-lo. Guarde o original se sua aplicação precisar reproduzir o áudio depois.

A integração não termina na transferência. Se você está criando uma tela de upload, veja o guia de áudio para texto. Para entrevistas, confira como manter participantes, citações e gravações ligados no fluxo de pesquisa.

Teste com 60 minutos grátis

Crie sua conta e confirme o e-mail para receber 60 minutos grátis. Não precisa cadastrar cartão.

Criar uma chave de API

Dúvidas frequentes

Ainda tem alguma dúvida? Fale com a gente

Quais formatos a API aceita?

MP3, WAV, M4A, FLAC, OGG, OPUS, MP4, MOV, WebM e MKV, sempre com uma faixa de áudio. Outras extensões retornam 422 unsupported_media.

Qual é o tamanho máximo do arquivo?

Até 95 MB em um único request multipart ou até 2 GB em partes. Seu plano pode definir um limite menor. Acima do limite, a API retorna 413 media_too_large.

Por quanto tempo vocês guardam os arquivos?

A mídia é excluída 24 horas após a transcrição chegar ao status final. Se um upload ficar incompleto por 24 horas, cancelamos a reserva e excluímos as partes. O texto fica salvo até você excluí-lo.

Dá para identificar quem está falando?

Sim. Envie diarize=true para receber rótulos como Speaker 1 e Speaker 2. Arquivos enviados por upload sempre passam pela transcrição com IA.