Modelos de audio
Texto a voz, voz a texto y voz en tiempo real con una API compatible con OpenAI: solicitudes, voces, formatos y el precio exacto de cada modelo de audio.
Texto a voz, voz a texto y voz en tiempo real con una sola API: las solicitudes, las voces, los formatos y los precios.
Todos los modelos, capacidades y precios Índice de la documentación para agentes de IA:https://oneprovider.dev/docs/llms.txt Modelos de audio disponibles
grok-tts Runnable - caracteres de entrada
- 15,00 US$ / 1M de caracteres
grok-stt Runnable - hora de audio
- 0,10 US$ / hora
grok-voice-3.0 Runnable - minuto de audio
- 0,08 US$ / minuto
grok-voice-latest Runnable - minuto de audio
- 0,08 US$ / minuto
gemini-2.5-flash-tts Runnable - tokens de entrada de texto
- 0,50 US$ / 1M de tokens
- tokens de salida de audio
- 10,00 US$ / 1M de tokens
gemini-2.5-pro-tts Runnable - tokens de entrada de texto
- 1,00 US$ / 1M de tokens
- tokens de salida de audio
- 20,00 US$ / 1M de tokens
gemini-3.1-flash-tts Runnable - tokens de entrada de texto
- 1,00 US$ / 1M de tokens
- tokens de salida de audio
- 20,00 US$ / 1M de tokens
gemini-3.1-tts Runnable - tokens de entrada de texto
- 1,00 US$ / 1M de tokens
- tokens de salida de audio
- 20,00 US$ / 1M de tokens
gemini-3.8-flash-tts Runnable - tokens de entrada de texto
- 0,50 US$ / 1M de tokens
- tokens de salida de audio
- 9,00 US$ / 1M de tokens
gemini-3.8-flash-lite-tts Runnable - tokens de entrada de texto
- 0,50 US$ / 1M de tokens
- tokens de salida de audio
- 6,00 US$ / 1M de tokens
gemini-3.5-transcribe Runnable - tokens de entrada de audio
- 2,00 US$ / 1M de tokens
- tokens de salida de texto
- 12,00 US$ / 1M de tokens
gemini-3.5-stt Runnable - tokens de entrada de audio
- 0,30 US$ / 1M de tokens
- tokens de entrada de audio en caché
- 0,03 US$ / 1M de tokens
- tokens de salida de texto
- 2,50 US$ / 1M de tokens
gemini-3-stt Runnable - tokens de entrada de audio
- 1,00 US$ / 1M de tokens
- tokens de entrada de audio en caché
- 0,10 US$ / 1M de tokens
- tokens de salida de texto
- 3,00 US$ / 1M de tokens
| Tarea | Ruta | Modelos |
|---|---|---|
| Texto a voz (TTS) | POST /v1/audio/speech | grok-tts, gemini-2.5-flash-tts, gemini-2.5-pro-tts, gemini-3.1-flash-tts, gemini-3.1-tts, gemini-3.8-flash-tts, gemini-3.8-flash-lite-tts |
| Voz a texto (STT) | POST /v1/audio/transcriptions | grok-stt, gemini-3-stt, gemini-3.5-stt, gemini-3.5-transcribe |
| Voz en tiempo real | GET /v1/realtime?model= (WebSocket) | grok-voice-3.0, grok-voice-latest |
Texto a voz
bashcurl -sS https://api.oneprovider.dev/v1/audio/speech \
-H "Authorization: Bearer sk-..." \
-H "Content-Type: application/json" \
-d '{
"model": "grok-tts",
"input": "Hello from OneProvider.",
"voice": "eve",
"response_format": "mp3"
}' \
--output hello.mp3 python from openai import OpenAI
client = OpenAI(base_url="https://api.oneprovider.dev/v1", api_key="sk-...")
with client.audio.speech.with_streaming_response.create(
model="gemini-3.8-flash-tts",
voice="Kore",
input="Hello from OneProvider.",
response_format="wav",
) as response:
response.stream_to_file("hello.wav") | Campo | Valor |
|---|---|
model | Obligatorio. El ID de un modelo de texto a voz. |
input | Obligatorio. El texto que se va a locutar. |
voice | La voz: para Grok, un nombre en minúsculas de la lista de abajo o el ID de tu propia voz personalizada; para Gemini, un nombre de la segunda lista. |
response_format | mp3 (por defecto), wav o pcm. |
La respuesta es el archivo de audio en el formato elegido. Para textos largos, envía una solicitud por párrafo y une los archivos.
Voces de Grok
altairaraatlasauroracarinacastorcelestecosmoevehelioshelixiriskeplerleolioralumenlunaluxnakshorionperseusrexrigelsalsiriusursazaganzenith Voces de Gemini
ZephyrPuckCharonKoreFenrirLedaOrusAoedeCallirrhoeAutonoeEnceladusIapetusUmbrielAlgiebaDespinaErinomeAlgenibRasalgethiLaomedeiaAchernarAlnilamSchedarGacruxPulcherrimaAchirdZubenelgenubiVindemiatrixSadachbiaSadaltagerSulafat Voz a texto
bashcurl -sS https://api.oneprovider.dev/v1/audio/transcriptions \
-H "Authorization: Bearer sk-..." \
-F model=grok-stt \
-F file=@meeting.mp3
# {"text":"..."} python from openai import OpenAI
client = OpenAI(base_url="https://api.oneprovider.dev/v1", api_key="sk-...")
with open("meeting.mp3", "rb") as audio:
result = client.audio.transcriptions.create(model="gemini-3.5-transcribe", file=audio)
print(result.text) La solicitud es multipart/form-data con los campos file (el archivo de audio) y model. La respuesta es un JSON con un campo text.
Voz en tiempo real
Abre un WebSocket a wss://api.oneprovider.dev/v1/realtime?model=grok-voice-3.0 con la misma clave en el encabezado Authorization. Los eventos siguen la API Realtime de OpenAI.
import asyncio, base64, json
import websockets
async def main():
url = "wss://api.oneprovider.dev/v1/realtime?model=grok-voice-3.0"
async with websockets.connect(url, additional_headers={"Authorization": "Bearer sk-..."}) as ws:
await ws.send(json.dumps({"type": "session.update", "session": {"instructions": "Answer briefly."}}))
await ws.send(json.dumps({"type": "conversation.item.create", "item": {
"type": "message", "role": "user",
"content": [{"type": "input_text", "text": "Say hello in one sentence."}],
}}))
await ws.send(json.dumps({"type": "response.create"}))
audio = bytearray()
async for message in ws:
event = json.loads(message)
if event["type"] == "response.output_audio.delta":
audio += base64.b64decode(event["delta"])
elif event["type"] == "response.output_audio_transcript.delta":
print(event["delta"], end="")
elif event["type"] == "response.done":
break
asyncio.run(main()) | Evento | Para qué sirve |
|---|---|
session.update | Cliente: define las instrucciones y las opciones de la sesión. |
conversation.item.create | Cliente: añade un mensaje a la conversación, de texto o de audio. |
response.create | Cliente: pide al modelo que responda. |
response.output_audio.delta | Servidor: el siguiente fragmento del audio de la respuesta, en base64. |
response.output_audio_transcript.delta | Servidor: el siguiente fragmento de texto de lo que dice el modelo. |
response.done | Servidor: la respuesta está completa. |
Precios
- Grok TTS se cobra por carácter del texto de entrada.
- Grok STT se cobra por hora de audio.
- Grok Voice se cobra por minuto de conversación, más una pequeña tarifa por cada mensaje de texto que envías.
- Gemini se cobra en tokens: texto o audio de entrada, y audio o texto de salida; un segundo de audio son 25 tokens.
Ejemplo: grok-tts, 1000 caracteres = 15,00 US$ / 1M × 1000 = 0,015 US$.
El precio exacto de cada modelo está en la tabla de arriba y en la página de precios .
Errores
| HTTP | Causa |
|---|---|
| 400 | Un campo no válido, una voz o un formato desconocidos. |
| 401 | La clave no es válida o fue revocada. |
| 402 / 403 / 429 | Saldo insuficiente o se alcanzó el límite de la clave. Recarga y reintenta. |
| 5xx | El servicio no está disponible temporalmente. Reintenta más tarde. |
Respuestas rápidas
¿Qué base URL uso?
Claude Code y los SDK de Anthropic usan https://api.oneprovider.dev. Los SDK de OpenAI y los clientes compatibles con OpenAI usan https://api.oneprovider.dev/v1. Una misma clave funciona con ambas; la lista de modelos está en la página de modelos y las tarifas, en la página de precios .
¿Cómo me autentico?
Envía la clave sk-… tal cual en x-api-key o en Authorization: Bearer: en uno de los dos, nunca en ambos. Guarda la clave en una variable de entorno, no en un archivo que se suba al repositorio. Más sobre la autenticación .
¿Dónde obtengo una clave?
Abre tu panel en el bot de Telegram @oneprovider_robot o en app.oneprovider.dev, recarga el saldo y pulsa “Emitir una clave”. Cada clave puede tener su propio límite de gasto. Panel y claves de API .
¿Qué significan 401, 404 y 429?
401: falta la clave, está mal escrita o se envió en un encabezado equivocado; pega la clave completa, sin comillas ni espacios. 404: casi siempre es una base URL incorrecta, por ejemplo con /v1 ausente o duplicado. 429 con “Insufficient balance”: se agotó el saldo del panel o el límite de gasto de la clave, así que recarga en lugar de reintentar; cualquier otro 429 es un límite de frecuencia, así que espera según Retry-After. Detalles: códigos de error y solución de problemas .
¿Por qué se cortan o se reinician los streams?
Las VPN y los proxies VLESS suelen almacenar SSE en búfer o romper la negociación de HTTP/2. OneProvider no tiene restricciones regionales y no almacena los streams en búfer: desactiva el proxy y reintenta.
¿Dónde pregunto si esto no basta?
Escribe a @Oneproviderhelpbot en Telegram o abre “Soporte” en el panel web, con el código de estado HTTP y el mensaje de error exacto. Cómo funciona el soporte .
Última actualización: 2026-11-08 ¿Encontraste un error? @Oneproviderhelpbot