Referencia

API de texto a voz

La API de MatuVoice tiene un solo endpoint que importa: POST /v1/speech. Le mandas texto y el identificador de una voz, y la respuesta es el MP3. El contrato no cambia según de dónde venga el texto, así que sirve igual para un agente de IA, un IVR o un generador de contenido.

Autenticación

Cada petición viaja con una API key en la cabecera Authorization usando el esquema Bearer. Las claves se crean y se revocan desde el dashboard, y lo recomendable es usar una por aplicación para poder cortarla sin afectar al resto.

Authorization: Bearer mv_live_...

POST /v1/speech

Genera el audio y lo devuelve en el cuerpo de la respuesta.

curl -X POST https://matuvoice.matubyte.com/v1/speech \
  -H "Authorization: Bearer mv_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Tu pedido llega mañana entre 8 y 11 de la mañana.",
    "voice": "edge:es-CR-JuanNeural"
  }' --output voz.mp3

Parámetros del cuerpo

Parámetros aceptados por POST /v1/speech
CampoTipoRequeridoDetalle
textstringTexto a sintetizar. Entre 1 y 5000 caracteres.
voicestringNoIdentificador de la voz. Por defecto edge:es-CR-JuanNeural.
ratenumberNoVelocidad de habla, entre 0.5 y 2. Por defecto 1.
volumenumberNoVolumen relativo, entre 0.2 y 2. Por defecto 1.

Respuesta

El cuerpo es el audio en audio/mpeg. Junto a él llegan cabeceras con metadatos de la síntesis y del consumo, útiles para mostrar el saldo restante o para registrar el gasto por cliente.

Cabeceras de respuesta
CabeceraDetalle
X-MatuVoice-VoiceNombre del personaje que sintetizó el audio.
X-MatuVoice-Voice-IdIdentificador exacto de la voz utilizada.
X-MatuVoice-ProviderProveedor del motor de síntesis.
X-MatuVoice-CharactersCaracteres facturados en esta petición.
X-MatuVoice-UsageCaracteres consumidos en el periodo actual.
X-MatuVoice-LimitLímite de caracteres del plan.
X-MatuVoice-RemainingCaracteres restantes del periodo.

Ejemplos de integración

Node.js

const response = await fetch("https://matuvoice.matubyte.com/v1/speech", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.MATUVOICE_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ text, voice: "edge:es-CR-JuanNeural" }),
});

const audio = Buffer.from(await response.arrayBuffer());

Python

import os, requests

response = requests.post(
    "https://matuvoice.matubyte.com/v1/speech",
    headers={"Authorization": f"Bearer {os.environ['MATUVOICE_API_KEY']}"},
    json={"text": texto, "voice": "edge:es-CR-JuanNeural"},
)

open("voz.mp3", "wb").write(response.content)

Errores

Códigos de error de la API
HTTPCódigoCuándo ocurre
400invalid_json / invalid_requestEl cuerpo no es JSON válido o falta el campo text.
401unauthorizedFalta la API key o no es válida.
402quota_exceededSe agotó el cupo de caracteres del periodo.
402voice_unavailableEl proveedor de esa voz no está activo en el servidor.
404voice_not_foundEl identificador de voz no existe en el catálogo.
502synthesis_failedEl motor de síntesis no pudo generar el audio.

Cupos y límites

Cada plan define un tope de caracteres al mes y un número máximo de claves. Las cabeceras de uso permiten saber en todo momento cuánto queda del periodo. El detalle está en precios y planes.

Preguntas frecuentes sobre la API

¿MatuVoice tiene API de texto a voz?

Sí. Es una API REST con un endpoint principal, POST /v1/speech, que recibe texto y devuelve directamente el audio en formato audio/mpeg.

¿Cómo autentico las peticiones a la API?

Con una API key en la cabecera Authorization usando el esquema Bearer. Las claves se crean y se revocan desde el dashboard, y conviene usar una distinta por aplicación.

¿Qué devuelve el endpoint de síntesis?

El cuerpo de la respuesta es el archivo de audio en audio/mpeg, no un JSON con una URL. Además incluye cabeceras con la voz utilizada, los caracteres facturados y el cupo restante del periodo.

¿Puedo llamar a la API desde el navegador?

El endpoint responde con CORS, pero no conviene: la API key quedaría expuesta en el cliente. La recomendación es llamarla desde tu backend y servir el audio ya generado a tu aplicación.