UtteraUttera

Cambiar de OpenAI a Uttera son dos líneas

15 de septiembre de 2026

Si tu código ya habla con la API de OpenAI para transcribir o para generar voz, no hace falta reescribirlo. Hablamos el mismo dialecto: mismas rutas, mismos nombres de parámetro, mismos nombres de voz.

from openai import OpenAI

client = OpenAI(
    base_url="https://api.uttera.ai/v1",   # ← 1
    api_key="sk-echo-...",                 # ← 2
)

Y ya. El resto de tu código no se toca.

Esto no es una afirmación de folleto: los ejemplos publicados se ejecutan contra la API real antes de publicarse, con el paquete oficial openai sin parchear. Están en uttera-examples/openai-sdk, en Python, Node y curl.

Qué funciona sin tocar nada

Funciona igual Solo nuestro
POST /v1/audio/transcriptions POST /v1/summarize
POST /v1/audio/speech POST /v1/translate
GET /v1/models Análisis de voz con ?extras=
Voces alloy echo fable nova onyx shimmer GET /v1/usage/last

Los endpoints de más no estorban: un cliente que los ignora se comporta exactamente como se comportaría contra OpenAI. Puedes migrar hoy y descubrirlos el mes que viene.

La cosa que hay que cambiar además de la URL

El tiempo de espera. Y es el error más común al integrar, con diferencia.

Mantenemos la conexión abierta hasta 7200 segundos para que una grabación larga pueda terminar. Pero el valor por defecto de muchas librerías son 30 segundos o un minuto, y con eso cortas trabajos que iban perfectamente: el servidor sigue procesando, tú ya has recibido una excepción, y la conclusión equivocada es «esto no funciona».

client = OpenAI(base_url="https://api.uttera.ai/v1",
                api_key="sk-echo-...",
                timeout=7200)

Como referencia: una grabación de 100 minutos se transcribe en 10 a 35 segundos. La espera larga no es para el caso normal — es para que el caso raro no se pierda.

Tres diferencias que conviene conocer

Se factura por segundo de audio, no por petición. Diez peticiones de seis segundos cuestan lo mismo que una de sesenta. Eso cambia cómo conviene trocear el trabajo: no hay penalización por hacer muchas llamadas pequeñas.

Cada respuesta te dice lo que te ha costado. La cabecera X-Audio-Duration trae los segundos facturados, y las de créditos, lo que te queda. No hace falta esperar a fin de mes ni consultar otro sitio.

Los errores llegan de dos formas. Los que genera el borde traen error y message. Los que genera el motor —un fichero que no se puede decodificar, uno que pasa del tamaño máximo— traen detail. Al leer un error, mira error y cae a detail si no está. Es una línea de código y evita un log inútil el día que algo falle.

Y una cosa que no cambia pero deberías saber

Tus audios se procesan en España y no se guardan. Eso no es una diferencia de API —tu código no lo nota— pero probablemente sea una diferencia para quien tenga que firmar el contrato. Está explicado, artículo por artículo, en la documentación de privacidad.

¿Algo que añadir o que corregir? Escríbenos a support@uttera.ai. Si nos corriges, editamos la entrada y te damos crédito.

← Todas las entradas