Endpoints
Transcrição de áudio
Converta fala em texto com Whisper, GPT-4o Transcribe e outros modelos pelo endpoint POST /audio/transcriptions do api14, compatível com a OpenAI.
Teste no playgroundTransforme fala em texto (speech-to-text, STT) com Whisper, GPT-4o Transcribe, Deepgram, Voxtral e outros modelos de transcrição. O endpoint segue o POST /audio/transcriptions da OpenAI, então client.audio.transcriptions.create(...) funciona sem alterações.
POST https://api14.com/api/v1/audio/transcriptions
Requisição
Envie multipart/form-data com o arquivo de áudio (o que os SDKs da OpenAI fazem) ou um corpo JSON.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
file | file | sim | Arquivo de áudio: mp3, mp4, m4a, wav, webm, ogg, flac. |
model | string | sim | Um id de modelo de transcrição, por exemplo openai/whisper-1. |
language | string | não | Código ISO-639-1 (en, de), melhora a precisão e a velocidade. |
prompt | string | não | Dicas de vocabulário ou o texto do segmento anterior. |
response_format | string | não | json (padrão), text, srt, vtt, verbose_json quando suportado. |
temperature | number | não | Temperatura de amostragem, 0–1. |
O limite do corpo da requisição é de 25 MB por padrão. Arquivos maiores retornam 413 payload_too_large, então divida gravações longas em partes.
Multipart com cURL
curl https://api14.com/api/v1/audio/transcriptions \
-H "Authorization: Bearer sk-api14-..." \
-F model=openai/whisper-1 \
-F file=@meeting.mp3 \
-F language=en
Corpo JSON
JSON também é aceito, com o áudio em base64 para os modelos que o suportam:
{
"model": "openai/whisper-1",
"input_audio": { "data": "<base64>", "format": "mp3" },
"language": "en"
}
Exemplo
import fs from "node:fs";
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
});
const result = await client.audio.transcriptions.create({
model: "openai/whisper-1",
file: fs.createReadStream("audio.mp3"),
});
console.log(result.text);
Resposta
{
"text": "Thanks everyone for joining. Let's start with the roadmap.",
"usage": { "type": "duration", "seconds": 42, "cost": 0.0042 }
}
Com response_format: "text", srt ou vtt, o corpo é texto simples em vez de JSON.
Preços
A transcrição é cobrada ao preço listado do modelo, exibido como "$ / minuto" (ou por token nos modelos com preço por token). O valor cobrado é retornado em usage.cost e debitado do seu saldo em USD.
Erros
| Status | Código | Quando |
|---|---|---|
| 400 | invalid_body | Não foi possível interpretar o corpo multipart. |
| 400 | model_required | O campo model está ausente. |
| 402 | insufficient_balance | Seu saldo em USD é $0. |
| 404 | model_not_found | Id de modelo desconhecido ou desativado. |
| 413 | payload_too_large | O arquivo excede o limite de tamanho do corpo. |
Veja Erros.