Lista las voces disponibles, clona la tuya a partir de una muestra breve o diseña una voz totalmente nueva desde una descripción de texto, y luego úsala en cualquier llamada TTS. Incluye Minimax (clonación / diseño / voces del sistema) y voces personalizadas de ElevenLabs.
⚠️ Facturación: la clonación de voz se cobra a $1.99 por clon (solo si tiene éxito — los fallos se reembolsan automáticamente). El diseño de voz no tiene actualmente ningún cargo adicional. Usar las voces predefinidas del sistema no genera ningún cargo extra.
Toma un voice_id y úsalo en una llamada TTS. Las voces del sistema son gratuitas y están listas para usar; source=account devuelve las voces que clonaste / diseñaste / creaste.
# Minimax system voices (optionally filter by language)
curl "https://apimodels.app/api/v1/minimax/voices?language=English" \
-H "Authorization: Bearer $API_KEY"
# ElevenLabs / preset voices
curl "https://apimodels.app/api/v1/audio/voices?pageNum=1&pageSize=30" \
-H "Authorization: Bearer $API_KEY"
# Voices on your own account (cloned / designed / custom)
curl "https://apimodels.app/api/v1/voices?source=account" \
-H "Authorization: Bearer $API_KEY"{
"voices": [
{ "voice_id": "English_Graceful_Lady", "name": "Graceful Lady", "language": "English" },
{ "voice_id": "male-qn-qingse", "name": "Qingse", "language": "Chinese" }
],
"total": 2
}Prepara una muestra de voz limpia (10s-5min, sin ruido de fondo). Súbela para obtener un file_id → clónala en el voice_id que elijas → úsala en TTS.
# Step 1 — upload your voice sample (10s-5min clean audio)
curl -X POST https://apimodels.app/api/v1/minimax/files \
-H "Authorization: Bearer $API_KEY" \
-F "purpose=voice_clone" \
-F "file=@my-voice-sample.mp3"
# -> { "file": { "file_id": 123456789, ... } }# Step 2 — clone it into a new voice_id (must start with a letter, >= 8 chars)
curl -X POST https://apimodels.app/api/v1/minimax/voice/clone \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"file_id": 123456789,
"voice_id": "myBrandVoice01"
}'| Field | Required | Type | Description |
|---|---|---|---|
| file_id | sí | number | El file ID devuelto por la subida del paso 1 |
| voice_id | sí | string | Tu nuevo voice ID — debe empezar por una letra, >= 8 caracteres |
# Step 3 — use the cloned voice in TTS
curl -X POST https://apimodels.app/api/v1/minimax/tts \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-speech-02-turbo",
"text": "This sentence is spoken in my own cloned voice.",
"voice_setting": { "voice_id": "myBrandVoice01", "speed": 1.0 }
}'cURL
# Step 2 — clone it into a new voice_id (must start with a letter, >= 8 chars)
curl -X POST https://apimodels.app/api/v1/minimax/voice/clone \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"file_id": 123456789,
"voice_id": "myBrandVoice01"
}'Python
import os, requests
API = "https://apimodels.app/api/v1"
H = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
# 1) Upload the sample
file_id = requests.post(
f"{API}/minimax/files",
headers=H,
data={"purpose": "voice_clone"},
files={"file": open("my-voice-sample.mp3", "rb")},
).json()["file"]["file_id"]
# 2) Clone -> your new voice_id
requests.post(
f"{API}/minimax/voice/clone",
headers={**H, "Content-Type": "application/json"},
json={"file_id": file_id, "voice_id": "myBrandVoice01"},
)
# 3) Speak with it
audio = requests.post(
f"{API}/minimax/tts",
headers={**H, "Content-Type": "application/json"},
json={
"model": "minimax-speech-02-turbo",
"text": "This sentence is spoken in my own cloned voice.",
"voice_setting": {"voice_id": "myBrandVoice01"},
},
)
print(audio.json())Node.js
const API = "https://apimodels.app/api/v1";
const H = { Authorization: `Bearer ${process.env.API_KEY}` };
import fs from "node:fs";
// 1) Upload the sample
const form = new FormData();
form.append("purpose", "voice_clone");
form.append("file", new Blob([fs.readFileSync("my-voice-sample.mp3")]), "sample.mp3");
const { file } = await fetch(`${API}/minimax/files`, { method: "POST", headers: H, body: form })
.then((r) => r.json());
// 2) Clone -> your new voice_id
await fetch(`${API}/minimax/voice/clone`, {
method: "POST",
headers: { ...H, "Content-Type": "application/json" },
body: JSON.stringify({ file_id: file.file_id, voice_id: "myBrandVoice01" }),
});
// 3) Speak with it
const audio = await fetch(`${API}/minimax/tts`, {
method: "POST",
headers: { ...H, "Content-Type": "application/json" },
body: JSON.stringify({
model: "minimax-speech-02-turbo",
text: "This sentence is spoken in my own cloned voice.",
voice_setting: { voice_id: "myBrandVoice01" },
}),
}).then((r) => r.json());
console.log(audio);Genera una voz totalmente nueva solo a partir de una descripción de texto — útil cuando no tienes ninguna grabación. Obtienes un voice_id para usar en TTS.
# Create a brand-new voice from a text description (no sample needed)
curl -X POST https://apimodels.app/api/v1/minimax/voice/design \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A warm, calm middle-aged male narrator with a slight British accent",
"preview_text": "Welcome to the evening news.",
"voice_id": "designedVoice01"
}'| Field | Required | Type | Description |
|---|---|---|---|
| prompt | sí | string | Descripción en texto de la voz deseada (género, edad, acento, tono…) |
| preview_text | no | string | Texto usado para generar una vista previa |
| voice_id | sí | string | Tu nuevo voice ID |
Crea una voz personalizada de ElevenLabs a partir de una URL de audio pública (o súbela primero mediante la Files API). Proporciona voice_url o video_id.
# ElevenLabs-style custom voice from a hosted audio URL (or video_id)
curl -X POST https://apimodels.app/api/v1/audio/voices/custom \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"voice_name": "My Narrator",
"voice_url": "https://r2.apimodels.app/uploads/.../sample.mp3"
}'| Field | Required | Type | Description |
|---|---|---|---|
| voice_name | sí | string | Nombre visible de la voz |
| voice_url | uno de | string | URL pública del audio de muestra |
| video_id | uno de | string | ID del archivo multimedia subido previamente (en lugar de voice_url) |
| callback_url | no | string | Webhook que se llama cuando está listo |