Appearance
Fish Audio — Озвучка Текста
POST /sounds/fish-tts
Озвучка текста голосом из библиотеки fish.audio: пришлите текст и voice_id понравившегося голоса (его можно создать через /sounds/fish-clone). Цена — за 1000 байт текста (кириллица ≈2 байта на символ). Озвучка обычно готова сразу — заберите файл через GET /task/{task_id}. Лимит: 10 запросов/мин.
Модели.
drama-3— новейшая модель Fish Audio (релиз 10.2026): выразительнее читает ремарки[..]и теги<emphasis>,<whisper>и др. Цена — как уs2.1-pro: передайте"model": "drama-3". Модельs1выводится провайдером из API 31.12.2026 — для новых интеграций беритеs2.1-proилиdrama-3.
Базовый URL: https://api.aihere.ru/api/v1
Авторизация: Authorization: Bearer <API-ключ>
Rate-limit: 10 запросов/мин
Параметры
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
format | string | — | значения: mp3, wav, pcm, opus; по умолчанию mp3 |
speed | number (опционально) | — | мин: 0.5; макс: 2.0 |
volume | number (опционально) | — | мин: -10.0; макс: 10.0 |
normalize_loudness | boolean (опционально) | — | — |
normalize | boolean (опционально) | — | — |
latency | string | — | значения: normal, balanced; по умолчанию normal |
text | string | да | мин. длина: 1; макс. длина: 5000 |
voice_id | string | да | мин. длина: 1; макс. длина: 100 |
model | string | — | значения: s1, s2.1-pro, drama-3; по умолчанию s2.1-pro |
Примеры
bash
curl -X POST "https://api.aihere.ru/api/v1/sounds/fish-tts" \
-H "Authorization: Bearer $AIHERE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-Callback-Url: https://myapp.example.com/api/aihere-callback" \
-d '{
"format": "mp3",
"latency": "normal",
"text": "Привет! Это пример текста для озвучки.",
"voice_id": "728f6ff2240d49308e8137ffe66008e2",
"model": "s2.1-pro"
}'python
import requests
payload = {
"format": "mp3",
"latency": "normal",
"text": "Привет! Это пример текста для озвучки.",
"voice_id": "728f6ff2240d49308e8137ffe66008e2",
"model": "s2.1-pro"
}
resp = requests.post(
"https://api.aihere.ru/api/v1/sounds/fish-tts",
headers={
"Authorization": f"Bearer {API_KEY}",
# Опционально: вебхук о завершении задачи
# "X-Callback-Url": "https://myapp.example.com/api/aihere-callback",
},
json=payload,
timeout=60,
)
resp.raise_for_status()
task_id = resp.json()["task_id"]
print(f"Задача №{task_id} поставлена")javascript
const resp = await fetch("https://api.aihere.ru/api/v1/sounds/fish-tts", {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
// Опционально: "X-Callback-Url": "https://myapp.example.com/api/aihere-callback",
},
body: JSON.stringify({
"format": "mp3",
"latency": "normal",
"text": "Привет! Это пример текста для озвучки.",
"voice_id": "728f6ff2240d49308e8137ffe66008e2",
"model": "s2.1-pro"
}),
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}: ${await resp.text()}`);
const { task_id } = await resp.json();
console.log("Задача №" + task_id + " поставлена");php
$payload = json_decode('{"format": "mp3", "latency": "normal", "text": "Привет! Это пример текста для озвучки.", "voice_id": "728f6ff2240d49308e8137ffe66008e2", "model": "s2.1-pro"}', true);
$ch = curl_init('https://api.aihere.ru/api/v1/sounds/fish-tts');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
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-ключ |
