Endpoints
Transcripción (STT)
Convierte audio en texto con POST /audio/transcriptions usando Whisper, GPT-4o Transcribe y otros modelos, con subida multipart o cuerpo JSON.
Pruébalo en el playgroundConvierte voz en texto (speech-to-text, STT) con Whisper, GPT-4o Transcribe, Deepgram, Voxtral y otros modelos de transcripción. El endpoint sigue POST /audio/transcriptions de OpenAI, así que client.audio.transcriptions.create(...) funciona sin cambios.
POST https://api14.com/api/v1/audio/transcriptions
Petición
Envía multipart/form-data con el archivo de audio (lo que hacen los SDK de OpenAI), o un cuerpo JSON.
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
file | file | sí | Archivo de audio: mp3, mp4, m4a, wav, webm, ogg, flac. |
model | string | sí | Un id de modelo de transcripción, p. ej. openai/whisper-1. |
language | string | no | Código ISO-639-1 (en, de); mejora la precisión y la velocidad. |
prompt | string | no | Pistas de vocabulario o el texto del segmento anterior. |
response_format | string | no | json (por defecto), text, srt, vtt, verbose_json donde se admita. |
temperature | number | no | Temperatura de muestreo, 0–1. |
El límite del cuerpo de la petición es de 25 MB por defecto. Los archivos más grandes devuelven 413 payload_too_large; divide las grabaciones largas en fragmentos.
Multipart con 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
Cuerpo JSON
También se acepta JSON, con el audio en base64 para los modelos que lo admiten:
{
"model": "openai/whisper-1",
"input_audio": { "data": "<base64>", "format": "mp3" },
"language": "en"
}
Ejemplo
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);
Respuesta
{
"text": "Thanks everyone for joining. Let's start with the roadmap.",
"usage": { "type": "duration", "seconds": 42, "cost": 0.0042 }
}
Con response_format: "text", srt o vtt, el cuerpo es texto plano en lugar de JSON.
Precios
La transcripción se factura al precio indicado del modelo, mostrado como "$ / minuto" (o por token en los modelos con precio por token). El cargo se devuelve en usage.cost y se descuenta de tu saldo en USD.
Errores
| Estado | Código | Cuándo |
|---|---|---|
| 400 | invalid_body | No se pudo analizar el cuerpo multipart. |
| 400 | model_required | Falta el campo model. |
| 402 | insufficient_balance | Tu saldo en USD es $0. |
| 404 | model_not_found | Id de modelo desconocido o desactivado. |
| 413 | payload_too_large | El archivo supera el límite de tamaño del cuerpo. |
Consulta Errores.