Documentação da API da KolWrite
Autentique com sua chave de API, inicie um job e leia o resultado: transcrições com tempos por palavra e identificação de falantes em JSON, TXT ou SRT.
Autenticação
Todas as requisições à API devem ser autenticadas com a sua chave de API exclusiva. Inclua-a nos cabeçalhos da requisição:
x-api-key: YOUR_API_KEY
Você pode gerar e gerenciar suas chaves de API no Console da KolWrite após criar uma conta.
Início rápido
Comece rápido com estes exemplos básicos.
1. Iniciar a transcrição
Envie uma requisição POST para o endpoint `/transcribe` com a URL do arquivo de áudio que você quer transcrever.
Requisição:
POST https://app.kolwrite.com/transcribe
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"audio_url": "https://salford.figshare.com/ndownloader/files/14630270"
}
Resposta:
A API devolve um `jobId` para você consultar o resultado da transcrição depois.
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57"
}
2. Obter o resultado da transcrição
De Send a GET request a the `/transcribe/{jobId}` endpoint using the `jobId` received from the previous step.
Requisição:
GET https://app.kolwrite.com/transcribe/34c63d45-4cb5-473b-bc60-25c175e69c57
x-api-key: YOUR_API_KEY
Resposta (exemplo):
Quando o status do trabalho for COMPLETED, a resposta inclui os detalhes da transcrição.
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
"status": "COMPLETED",
"result": {
"language": "en",
"segments": [
{
"start": 0.5,
"end": 3.2,
"text": "Hello everyone, welcome to today's meeting.",
"speaker": "Speaker 1",
"words": [
{
"start": 0.5,
"end": 0.8,
"word": "Hello"
},
{
"start": 0.9,
"end": 1.4,
"word": "everyone"
},
{
"start": 1.5,
"end": 1.9,
"word": "welcome"
}
]
}
]
}
}
Modelos e créditos de uso
O uso dos modelos é cobrado em créditos de uso por segundo, sem valor mínimo. O checkout, os recibos e os documentos fiscais mostram a moeda real usada no pagamento.
1 crédito é a unidade de cobrança da API que antes aparecia como $1.00 no console.
Contas de faturamento israelenses elegíveis compram créditos de uso em ILS ao preço líquido de ILS 3.60 por crédito antes do IVA. O checkout mostra os créditos de uso, o valor líquido, o IVA e o total final em ILS antes do pagamento. As demais contas compram créditos de uso em USD a USD 1.20 por crédito, salvo se condições de pedido separadas se aplicarem.
| Modelo | Valor da API | Créditos / hora | Ideal para |
|---|---|---|---|
| Base | base | 0.40 | Transcrição de baixo custo, timestamps por palavra e separação de falantes |
| Oracle Mini | oracle_mini | 0.80 | Transcrição rápida com o modelo Oracle, com tradução opcional para qualquer idioma compatível, diarização e separação de canais. É a opção mais econômica de tradução com Oracle |
| Oracle | oracle | 1.20 | Transcrição em produção e fluxos de trabalho multilíngues |
| Oracle Pro | oracle_pro | 1.40 | Qualidade de produção premium |
| Oracle Max | oracle_max | 3.00 | Qualidade máxima para áudio difícil ou crítico |
| Core | core | 1.00 | Transcrição legada de uso geral |
| Edge | edge | 1.20 | Transcrição legada de maior precisão |
Complementos: A diarização regular de falantes e a separação de canais no modo standard a separação de canais estão incluídas. A diarização Pro de falantes adiciona 0.20 créditos por hora de áudio. overlap
a separação de canais é cobrada pela tarifa do modelo selecionado sobre o maior valor entre a duração da gravação e o tempo total de fala detectado nos seus canais físicos; nenhum dos modos de canal acrescenta cobrança extra de diarização. O Oracle Mini ativa automaticamente o alinhamento de carimbos de tempo quando a diarização de falantes ou a separação de canais é selecionada.
Endpoints da API
POST /upload
Faça upload de um áudio ou vídeo local e use o valor retornado fileUrl como audio_url em POST /transcribe. Use o upload inline em Base64 para arquivos pequenos, ou o upload direto para o armazenamento em arquivos maiores.
Envio inline em Base64 (até 4 MiB)
Para arquivos de até 4 MiB (4,194,304 bytes no total), envie os bytes da mídia em Base64 em uma única requisição à API.
POST /upload
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"filename": "clip.mp3",
"contentType": "audio/mpeg",
"content": "<base64-encoded media bytes>"
}
contentType é opcional e, se omitido, é deduzido do nome do arquivo. Envie os bytes da mídia em Base64 sem tratamento em content, sem o prefixo data:...;base64, . O limite de 4 MiB se aplica ao arquivo de mídia decodificado.
A resposta inclui fileUrl. Use-o como audio_url ao criar o trabalho de transcrição.
Upload direto para o armazenamento (até 100 MiB)
Para arquivos maiores, solicite um formulário assinado para o nosso armazenamento compatível com S3, envie o arquivo diretamente e depois crie o trabalho de transcrição. Tamanho máximo de envio: 100 MiB (104,857,600 bytes no total). O formulário assinado vale por 60 minutos. A URL de leitura retornada vale por 24 horas, tempo suficiente para o serviço de transcrição baixar a mídia.
1. Solicitar um formulário de upload assinado
POST /upload
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"filename": "meeting.mp3",
"contentType": "audio/mpeg"
}
contentType é opcional e, se omitido, é deduzido do nome do arquivo. A API retorna uploadUrl, uploadFields, fileUrl e uploadExpiresIn.
Usar uploadUrl para enviar o arquivo ao nosso armazenamento compatível com S3. Depois use fileUrl como audio_url ao criar o trabalho de transcrição.
2. Enviar o arquivo direto para o armazenamento
// upload is the JSON response from POST /upload
const form = new FormData();
for (const [name, value] of Object.entries(upload.uploadFields)) {
form.append(name, value);
}
form.append('file', file, file.name);
await fetch(upload.uploadUrl, { method: 'POST', body: form });
Envie os campos exatamente como vieram na resposta e não inclua um cabeçalho de autorização próprio no POST para o armazenamento.
3. Criar o job de transcrição
POST /transcribe
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"audio_url": "<fileUrl returned by POST /upload>",
"model": "oracle"
}
POST /transcribe
Envia um arquivo de áudio para transcrição assíncrona, com opção de diarização de falantes.
Parâmetros do corpo da requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| audio_url | string | Obrigatório | URL pública do arquivo de áudio ou vídeo que será transcrito. |
| language | string | Opcional | Dica do código de idioma (ex.: "he", "en", "es"). Sem esse dado, o sistema detecta o idioma automaticamente. Default: "auto" |
| translate_to | string | Opcional | Código do idioma para traduzir a transcrição (como "en", "es", "fr"). Se preenchido, o texto final já sai nesse idioma. Observação: Este parâmetro só funciona nos modelos da família Oracle. |
| word_timestamps | boolean | Opcional | Inclui timestamps por palavra no JSON ou no SRT, se o modelo suportar alinhamento de palavras. O Oracle Mini ativa esse alinhamento sozinho na diarização de falantes e na separação de canais; na transcrição simples, ele retorna timestamps apenas por segmento. Não afeta a saída em TXT. Padrão: true |
| model | string | Opcional | Especifica qual modelo de transcrição usar: Modelos atuais: • base: Transcrição de baixo custo com timestamps por palavra e diarização opcional, 0.40 créditos/hora• oracle_mini: Nível Oracle de tradução mais barato, com processamento opcional de falantes, 0.80 créditos/hora• oracle: Nível Oracle para produção, 1.20 créditos/hora• oracle_pro: Nível Oracle premium, 1.40 créditos/hora• oracle_max: Nível Oracle de qualidade máxima, 3.00 créditos/horaModelos legados: • core: Modelo legado mais rápido, 1.00 créditos/hora
• edge: Modelo legado mais preciso, 1.20 créditos/horaDefault: "core" |
| output_format | string | Opcional | O formato desejado para a saída da transcrição: • json: Saída detalhada com segmentos e timestamps• txt: Transcrição em texto simples• srt: Formato de legendas SubRipDefault: "json" |
| include_diarization | boolean | Opcional | Ativa ou não a diarização de falantes (identificar quem está falando no áudio). Com ela ligada, os segmentos vêm com rótulos de falante. Nesse modo, o Oracle Mini já ativa o alinhamento de timestamps sozinho. Padrão: false |
| pro_diarization | boolean | Opcional | Ativa o modelo premium de diarização de falantes, com maior precisão principalmente em áudios difíceis. Custa mais 0.20 créditos por hora de áudio. Neste modo, o Oracle Mini ativa o alinhamento de timestamps automaticamente. Padrão: false |
| num_speakers | integer | Opcional | Quantidade esperada de pessoas falando no áudio. Usado apenas quando
include_diarization é true. Se não for informado, o sistema detecta automaticamente o número de falantes.Padrão: auto |
| channel_speaker_separation | string | Opcional | Separa um arquivo estéreo ou multicanal audio_url por faixa de áudio física. Use standard para falantes que se alternam ou overlap para fala sobreposta. Não pode ser combinado com diarização. O Oracle Mini ativa automaticamente o alinhamento de carimbos de tempo em ambos os modos de canal.Default: "off" |
| channel_labels | object | Opcional | Mapa opcional de índices de canal (base zero), por exemplo {"0":"Agent","1":"Customer"}. Os rótulos vêm em cada segmento e palavra retornados. |
| webhook_url | string | Opcional | URL HTTPS pública que recebe um POST quando o job de transcrição termina ou falha. Retorne qualquer 2xx para confirmar a entrega. |
| webhook_secret | string | Opcional | Segredo opcional usado para assinar as cargas do webhook. O cabeçalho de assinatura tem o formato sha256=<hex digest>. |
Exemplo de requisição (com diarização):
{
"audio_url": "https://salford.figshare.com/ndownloader/files/14630270",
"word_timestamps": true,
"model": "edge",
"output_format": "json",
"include_diarization": true,
"num_speakers": 2
}
Resposta:
Retorna um objeto com o `jobId` da tarefa de transcrição enviada.
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57"
}
GET /transcribe/{jobId}
Consulta o status e o resultado de um job de transcrição específico.
Parâmetros de caminho
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| jobId | string | Obrigatório | O ID da tarefa de transcrição, retornado pelo POST /transcribe. |
Corpo da resposta
| Campo | Tipo | Descrição |
|---|---|---|
| jobId | string | O ID da tarefa de transcrição solicitada. |
| status | string | Status atual do trabalho: PENDING, IN_PROGRESS, COMPLETED, ou FAILED |
| result | object | string | O resultado da transcrição (aparece apenas quando o status é COMPLETED). A estrutura muda conforme o output_format escolhido. |
| error | string | Mensagem de erro (retornada apenas quando o status é FAILED). |
Exemplo de resposta (saída JSON com diarização de falantes):
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
"status": "COMPLETED",
"result": {
"language": "en",
"segments": [
{
"start": 0.5,
"end": 3.2,
"text": "Hello everyone, welcome to today's meeting.",
"speaker": "Speaker 1",
"words": [
{
"start": 0.5,
"end": 0.8,
"word": "Hello"
},
{
"start": 0.9,
"end": 1.4,
"word": "everyone"
}
]
},
{
"start": 4.1,
"end": 6.8,
"text": "Thank you. Let's begin with the quarterly review.",
"speaker": "Speaker 2",
"words": [
{
"start": 4.1,
"end": 4.5,
"word": "Thank"
},
{
"start": 4.6,
"end": 4.9,
"word": "you"
}
]
}
]
}
}
Diarização de falantes
A diarização identifica e separa quem está falando na gravação. Com essa opção ativada, a KolWrite analisa o áudio, detecta quando muda a voz e identifica o falante de cada trecho.
Todos os modelos da lista contam com diarização de falantes e separação de canais. No Oracle Mini, o alinhamento de timestamps é ativado automaticamente sempre que você escolhe um modo de falantes.
Como ativar a diarização
Para ativar a diarização de falantes, defina o parâmetro include_diarization em true na sua requisição de transcrição:
{
"audio_url": "https://example.com/meeting-audio.mp3",
"include_diarization": true,
"num_speakers": 3
}
Otimização do número de falantes
Para obter os melhores resultados, informe o número esperado de falantes com o parâmetro num_speakers . Se você não souber o número exato, pode:
- Omita o parâmetro (o sistema detecta automaticamente)
- Informe um intervalo estimado configurando o valor com o seu melhor palpite
Diarização Pro
Para identificar falantes com mais precisão, principalmente em áudios com acústica ruim, ative a Diarização Pro. Esse recurso tem um custo adicional de 0.20 créditos por hora de áudio.
Para usá-la, defina o parâmetro pro_diarization em true. Este parâmetro pode ser usado em conjunto com include_diarization.
{
"audio_url": "https://example.com/panel-discussion.mp3",
"include_diarization": true,
"pro_diarization": true
}
Separação de falantes por canal
A separação de canais transcreve cada faixa física de áudio de forma independente e identifica os segmentos e palavras retornados com seus respectivos campos físicos channel e speaker. Requer uma fonte de dois a oito canais audio_url e não pode ser combinada com a diarização regular ou Pro. O Oracle Mini ativa automaticamente o alinhamento de carimbos de tempo em ambos os modos de canal.
Usar standard quando os falantes se alternam; cobra-se uma única tarifa de áudio do modelo selecionado. Use overlap quando os falantes podem se sobrepor; cobra-se a tarifa do modelo selecionado sobre o maior valor entre a duração da gravação e o tempo total de fala detectado nos seus canais físicos.
{
"audio_url": "https://example.com/stereo-call.wav",
"model": "oracle",
"channel_speaker_separation": "overlap",
"channel_labels": {"0": "Agent", "1": "Customer"}
}
Webhooks de conclusão
Defina webhook_url para receber transcription.completed e transcription.failed eventos. Falhas de entrega são repetidas, mas os clientes devem continuar a oferecer suporte a GET /transcribe/{jobId} como fonte de verdade.
{
"audio_url": "https://example.com/meeting-audio.mp3",
"output_format": "json",
"webhook_url": "https://example.com/kolwrite-webhook",
"webhook_secret": "replace-with-your-secret"
}
Cada entrega inclui X-KolWrite-Event, X-KolWrite-Job-Id, X-KolWrite-Delivery-Id e X-KolWrite-Timestamp. A entrega ocorre pelo menos uma vez. Novas tentativas reutilizam o mesmo ID de entrega, então filtre eventos duplicados usando X-KolWrite-Delivery-Id. Se houver um segredo configurado, calcule o HMAC-SHA256 sobre timestamp + "." + raw_request_body e compare-o com X-KolWrite-Signature.
{
"event": "transcription.completed",
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
"status": "COMPLETED",
"createdAt": "2026-07-10T09:30:00+00:00",
"model": "base",
"output_format": "json",
"result_available": true,
"result_omitted": false,
"result_size_bytes": 12480,
"result": { "language": "en", "segments": [] }
}
Para output_format: "json", o webhook result é um objeto JSON. Os resultados TXT e SRT são entregues como strings.
Em resultados grandes, pode-se definir result_omitted para true; obtenha o resultado completo em GET /transcribe/{jobId}. Eventos com falha incluem um campo error campo.
Formato de saída com diarização
Quando a diarização está ativada, cada segmento da saída JSON inclui o campo speaker que identifica o falante (por exemplo, “Speaker 1”, “Speaker 2” etc.).
Formatos de saída
Formato JSON
Saída detalhada com segmentos, timestamps e dados opcionais por palavra.
Formato TXT
Transcrição em texto puro com identificação de falantes (quando a diarização está ativada).
Formato SRT
Formato de legenda SubRip com marcações de tempo, compatível com players de vídeo e editores de legenda.
Com os carimbos de tempo por palavra ativados (o padrão), o SRT gera um bloco por palavra, mostrando o texto inteiro do trecho com a palavra do momento destacada. Para gerar um bloco por trecho, passe word_timestamps como false. Não retornamos WebVTT; se precisar desse formato, converta o SRT com o ffmpeg.
Status do serviço
Veja a página de status da API da KolWrite para ver a disponibilidade em tempo real, o histórico de atividade e os incidentes de nível de serviço.
GET /health não exige chave de API e retorna o estado atual da API, do recebimento de trabalhos e do processamento de transcrições. Uma resposta 200 significa que o serviço está operacional ou degradado; uma resposta 503 significa que o estado atual é desconhecido ou indisponível. Ambas as respostas incluem detalhes de estado em JSON.
GET /health/history?period=24h retorna um histórico compacto de disponibilidade. Os períodos aceitos são 24h, 7d e 30d.
Códigos de status
| Status | Descrição |
|---|---|
| PENDING | A tarefa está na fila aguardando processamento. |
| IN_PROGRESS | Nosso serviço de transcrição está processando a tarefa neste momento. |
| COMPLETED | Tarefa concluída. Os resultados estão na resposta. |
| FAILED | Falha ao processar a tarefa. Veja os detalhes na mensagem de erro. |