Endpoints
Transcription (STT)
Turn audio into text with POST /audio/transcriptions on api14, with supported formats, language options and response formats.
Try it in the playgroundTurn speech into text (speech-to-text, STT) with Whisper, GPT-4o Transcribe, Deepgram, Voxtral and other transcription models. The endpoint follows OpenAI's POST /audio/transcriptions, so client.audio.transcriptions.create(...) works unchanged.
POST https://api14.com/api/v1/audio/transcriptions
Request
Send multipart/form-data with the audio file (what the OpenAI SDKs do), or a JSON body.
| Field | Type | Required | Description |
|---|---|---|---|
file | file | yes | Audio file: mp3, mp4, m4a, wav, webm, ogg, flac. |
model | string | yes | A transcription model id, e.g. openai/whisper-1. |
language | string | no | ISO-639-1 code (en, de), improves accuracy and speed. |
prompt | string | no | Vocabulary hints or the previous segment's text. |
response_format | string | no | json (default), text, srt, vtt, verbose_json where supported. |
temperature | number | no | Sampling temperature, 0–1. |
The request body limit is 25 MB by default. Larger files return 413 payload_too_large, split long recordings into chunks.
Multipart with 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
JSON body
JSON is accepted too, with the audio as base64 for models that support it:
{
"model": "openai/whisper-1",
"input_audio": { "data": "<base64>", "format": "mp3" },
"language": "en"
}
Example
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);
Response
{
"text": "Thanks everyone for joining. Let's start with the roadmap.",
"usage": { "type": "duration", "seconds": 42, "cost": 0.0042 }
}
With response_format: "text", srt or vtt the body is plain text instead of JSON.
Pricing
Transcription is billed at the model's listed price, shown as "$ / minute" (or per token for token-priced models). The charge is returned in usage.cost and debited from your USD balance.
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_body | The multipart body could not be parsed. |
| 400 | model_required | The model field is missing. |
| 402 | insufficient_balance | Your USD balance is $0. |
| 404 | model_not_found | Unknown or disabled model id. |
| 413 | payload_too_large | File exceeds the body size limit. |
See Errors.