Skip to content

Fish Audio — Диалог до 4 голосов

POST /sounds/fish-dialogue

Многоголосый диалог Fish Audio (всегда модель S2.1 Pro): реплики lines склеиваются тегами <|speaker:N|>, индекс спикера — по порядку первого появления voice_id. Максимум 4 разных голоса и 50 реплик; служебные теги спикеров не тарифицируются.

Цена — за 1000 байт суммарного текста реплик в UTF-8. Актуальные цены: Цены.

Базовый URL: https://api.aihere.ru/api/v1
Авторизация: Authorization: Bearer <API-ключ>
Rate-limit: 10 запросов/мин

Параметры

ПолеТипОбяз.Описание
linesarray[object]даРеплики: 2–50 штук; внутри text (1–1000 символов) и voice_id; всего ≤ 4 разных голосов
formatstringmp3, wav, pcm, opus (по умолчанию mp3)
speednumberСкорость речи, 0.5–2.0
volumenumberГромкость, дБ: −10…+10
normalize_loudnessbooleanНормализация громкости
normalizebooleanНормализация текста (числа, аббревиатуры)
latencystringnormal или balanced (по умолчанию normal)

Примеры

cURL

bash
curl -X POST "https://api.aihere.ru/api/v1/sounds/fish-dialogue" \
  -H "Authorization: Bearer $AIHERE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-Callback-Url: https://myapp.example.com/api/aihere-callback" \
  -d '{
  "lines": [
    {
      "text": "Привет! Как дела?",
      "voice_id": "728f6ff2240d49308e8137ffe66008e2"
    },
    {
      "text": "Отлично! А у тебя?",
      "voice_id": "8f4c2e1b0a3d4f5e9c6b7a8d1e2f3041"
    }
  ]
}'

Python

python
import requests

payload = {
    "lines": [
        {"text": "Привет! Как дела?", "voice_id": "728f6ff2240d49308e8137ffe66008e2"},
        {"text": "Отлично! А у тебя?", "voice_id": "8f4c2e1b0a3d4f5e9c6b7a8d1e2f3041"},
    ]
}

resp = requests.post(
    "https://api.aihere.ru/api/v1/sounds/fish-dialogue",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        # Опционально: вебхук о завершении задачи
        # "X-Callback-Url": "https://myapp.example.com/api/aihere-callback",
    },
    json=payload,
    timeout=120,
)
resp.raise_for_status()
task_id = resp.json()["task_id"]
print(f"Задача №{task_id} поставлена")

JavaScript

javascript
const resp = await fetch("https://api.aihere.ru/api/v1/sounds/fish-dialogue", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${API_KEY}`,
    "Content-Type": "application/json",
    // Опционально: "X-Callback-Url": "https://myapp.example.com/api/aihere-callback",
  },
  body: JSON.stringify({
  "lines": [
    {
      "text": "Привет! Как дела?",
      "voice_id": "728f6ff2240d49308e8137ffe66008e2"
    },
    {
      "text": "Отлично! А у тебя?",
      "voice_id": "8f4c2e1b0a3d4f5e9c6b7a8d1e2f3041"
    }
  ]
}),
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}: ${await resp.text()}`);
const { task_id } = await resp.json();
console.log("Задача №" + task_id + " поставлена");

PHP

php
$payload = json_decode('{"lines": [{"text": "Привет! Как дела?", "voice_id": "728f6ff2240d49308e8137ffe66008e2"}, {"text": "Отлично! А у тебя?", "voice_id": "8f4c2e1b0a3d4f5e9c6b7a8d1e2f3041"}]}', true);

$ch = curl_init('https://api.aihere.ru/api/v1/sounds/fish-dialogue');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_TIMEOUT => 120,
    CURLOPT_POSTFIELDS => json_encode($payload),
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer $apiKey",
        'Content-Type: application/json',
        // Опционально: 'X-Callback-Url: https://myapp.example.com/api/aihere-callback',
    ],
]);
$resp = json_decode(curl_exec($ch), true);
curl_close($ch);
echo "Задача №{$resp['task_id']} поставлена";

Ответ 200

ID задачи (результат — аудиофайл с диалогом)

json
{
  "task_id": 123
}

Ошибки

КодПричина
429Превышен rate-limit
502Ошибка провайдера генерации
503Провайдер недоступен или сбой сервиса баланса (списанные средства возвращаются)
422Ошибка валидации тела запроса (detail содержит список полей)
401Нет или невалидный API-ключ