Документація з API

Інтегрувати TTS.ai до ваших програм за допомогою нашого API REST. Сумісний з OpenAI формат для легкої міграції.

REST API Сумісний OpenAI ДЖСОН відповідає Підтримка потоку

Огляд

У TTS.ai API передбачено програмний доступ до всіх можливостей платформи: синтез синтезу мовлення, текстовий текст, клонування голосів, покращення звукових даних тощо. У API використано стандартні конгреси REST з тілом JSON query/respons.

Ключ API

Отримати ваш ключ API від Параметри облікового запису. Доступні щодо Про та промислових планів.

Базова адреса URL

https://api.tts.ai/v1/

Auth

Помітка з медведем Authorization заголовок

Розпізнавання

Безкоштовна краватка не обов'язково. Анонімний POST до /v1/tts/ працює без розпізнавання, до 5000 символів/дня за IP, використовуючи будь-яку з наших вільних моделей (piper, vits, melotts, kokoro). Підписуйтесь на безкоштовний рахунок, щоб отримати 15 000 бонусів і доступ до преміальних моделей.

Для преміальних моделей і обмеження вищих частот розпізнавання з жетоном у Authorization заголовок.

Заголовок HTTP
Authorization: Bearer sk-tts-your-api-key-here
Тримайте ваш ключ API в секреті. Не ділити його між клієнтськими кодами, публічними сховищами або журналами. регулярно повертати клавіші з параметрів вашого облікового запису.

SDKs

Офіційна SDK спрощує інтеграцію TTS.ai до вашої програми. Обидва програми є відкритим джерелом і доступними для GitHub.

Python

pip install ttsai
from tts_ai import TTSClient

client = TTSClient(api_key="sk-tts-...")
audio = client.generate(
    text="Hello world!",
    model="kokoro"
)
client.save(audio, "output.wav")
GitHub

JavaScript / Node.js

npm install @ttsainpm/ttsai
const { TTSClient } = require('@ttsainpm/ttsai');

const client = new TTSClient({
  apiKey: 'sk-tts-...'
});
const audio = await client.generate({
  input: 'Hello world!',
  model: 'kokoro'
});
await client.saveToFile(audio, 'output.wav');
GitHub

Базова адреса URL

Базова адреса URL: https://api.tts.ai/v1/

Всі кінцеві точки відносяться до цієї базової адреси URL. Наприклад, кінцева точка TTS:

POST https://api.tts.ai/v1/tts/

Обмеження швидкості

Обмеження швидкості API різняться за планом:

План Запити/мін Зберігання Макс. довжина тексту
Вільно 10 2 500 символів
Започаткування 30 3 1 000 000 символів
Pro 60 5 1 000 000 символів
Підприємство 300 20 50 000 символів

Заголовки обмеження оцінки буде включено до кожного відповіді: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Кошти кредиту

Служба Вартість Одиниця
TTS (Free Model: Piper, VITS, MellotTS) 1000 символів на 1000 символів
TTS (звичайні моделі: Kokro, CosyWham 2 тощо) 2000 символів на 1000 символів
TTS (моделі Premium: Tortoise, Chatterbox тощо) 4000 символів на 1000 символів
Мова до тексту 2000 символів на хвилину звуку
Клонування голосу 4000 символів на 1000 символів
Зміна голосу 3000 символів на хвилину звуку
Покращення звуку 2000 символів на хвилину звуку
Vocal Delete / Stem spliting 3000- 4000 символів на хвилину звуку
Переклад мовлення 5000 символів на хвилину звуку
Голосова балачка 3000 символів на хід
Пошук ключів & BPM Вільно --
Перетворювач звуку Вільно --

Текст для мовлення

POST /v1/tts/

Перетворити текст на аудіовимовний. Повертає звуковий файл у вказаному форматі.

Вимагати тіло

ПараметрТипОбов' язковоОпис
model string Ні Model ID (e.g., kokoro, chatterbox, piper). If omitted, we auto-pick a model that supports the requested languagekokoro for en/ja/zh/ko/fr/de/it/pt/es/hi/ru, piper for other supported languages (ar/pl/nl/cs/da/fi/el/hu/tr/uk/vi/etc.).
text string Так. Текст для перетворення на мовлення. Заголовка для перевірки: 500 символів (безіменний), 5000 (вільний рахунок), 1 000 000 (оплачений план). Довгі входи - це автоматичний запит на сервер.
voice string Так. ІД голосу (використовуйте /v1/voices/ для списку доступних голосів)
format string Ні Output format: mp3 (default), wav, flac, ogg
speed float Ні Множення швидкості читання. Типове значення: < code > 1. 0 . Range: < code > 0. 5 <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > > > > > > > > > > < > < > < > < > > > > < > < > < > < > < > < > < <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > < > <\ \ > <\ \ \ \ \ \ \ \ > <\ \ > < > < > < > < > <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >\ \ \ \ \ \ \ \ \ \ \ \ \ >\ \ >\ \ >\ \ >\ \ >\ \ >\ \ >\ \ >\ \ > <\ \ >\ \ >\ \ > < < < <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\
language string Ні Language code (e.g., en, es). Auto-detected if omitted.
instructions string Ні Дія / доставка} (} 500 символів). Наприклад, < code >\ Do not translate the keyword between brackets (e. g. ServerName, ServerAdmin, etc.)
pronunciations object | array Ні Заміна вимови < code > {\
stream boolean Ні Увімкнути потокову відповідь. Типове значення: < code > false <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >

Приклад запиту

cURL
curl -X POST https://api.tts.ai/v1/tts/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kokoro",
    "text": "Hello from TTS.ai! This is a test.",
    "voice": "af_bella",
    "format": "mp3"
  }' \
  --output output.mp3

Теґи SSML < scipe- as >

Переносити номери, дати, валюту, номери телефонів і абревіатури у < code > <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >

інтерпретувати- asВвідЯк було сказано
cardinal1234one thousand two hundred thirty-four
ordinal21twenty-first
date1999-12-31December thirty-first, nineteen ninety-nine
time14:30two thirty PM
telephone+1-555-867-5309plus one five five five eight six seven…
currency$1,234.56one thousand two hundred thirty-four dollars and fifty-six cents
spell-outNASAN A S A

Date format defaults to mdy for English and dmy elsewhere; override with format="ymd|mdy|dmy". Currency auto-detects $/€/£/¥; pass currency="USD|EUR|GBP|JPY|CAD|AUD|MXN|INR|CNY" to set it explicitly. Tags work in any language; English is fully supported, other languages use num2words where available.

Приклад
{
  "model": "kokoro",
  "voice": "af_bella",
  "text": "Your appointment is on <say-as interpret-as=\"date\">2026-04-26</say-as> at <say-as interpret-as=\"time\">14:30</say-as>. Please call <say-as interpret-as=\"telephone\">+1-555-867-5309</say-as> if you need to reschedule."
}

Відповідь

The TTS endpoint queues your request and returns a JSON response with a job UUID. You then poll for the result.

Step 1: Submit request

Response (JSON)
{
  "uuid": "77b71db532874ce98e84a69a2d740d4c",
  "job_id": "f21316bb-aefa-480d-8523-701d1e3184ce",
  "status": "queued",
  "credits_used": 11,
  "credits_remaining": 15000
}

Step 2: Poll for result

GET /v1/speech/results/?uuid=<job_uuid>

Poll this endpoint every 1-2 seconds until status is completed or failed.

Polling response (completed)
{
  "status": "completed",
  "result_url": "https://api.tts.ai/static/downloads/77b71db5.../output.mp3"
}
Polling response (still processing)
{
  "status": "processing"
}

Step 3: Download audio

Fetch the result_url from the completed response to download the audio file.

Full example

Python
import requests, time

API_KEY = "sk-tts-your-key"
BASE = "https://api.tts.ai"

# 1. Submit TTS request
resp = requests.post(f"{BASE}/v1/tts/", json={
    "model": "kokoro",
    "text": "Hello from TTS.ai!",
    "voice": "af_bella"
}, headers={"Authorization": f"Bearer {API_KEY}"})
data = resp.json()
uuid = data["uuid"]

# 2. Poll for result
while True:
    result = requests.get(f"{BASE}/v1/speech/results/",
        params={"uuid": uuid}).json()
    if result["status"] == "completed":
        # 3. Download audio
        audio = requests.get(result["result_url"])
        with open("output.mp3", "wb") as f:
            f.write(audio.content)
        break
    elif result["status"] == "failed":
        raise Exception(result.get("error", "Generation failed"))
    time.sleep(1.5)

Streaming alternative: For supported models (Kokoro, MeloTTS), use POST /v1/tts/stream/ for real-time Server-Sent Events (SSE) streaming — no polling needed.

Мова до тексту

POST /v1/stt/

Переписування звуку на текст. Підтримує 99 мов автовиявленням.

Вимагати тіло (multipart/form-data)

ПараметрТипОбов' язковоОпис
file file Так. Звуковий файл (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). Макс. 100MБ.
model string Ні STT model: whisper (default), faster-whisper, sensevoice
language string Ні Код мови. < code > auto для автоматичного визначення (типово).
timestamps boolean Ні Включити часові штампи текстового рівня. Типове значення: < code > false <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >
diarize boolean Ні Увімкнути диалізацію звуку. Типове значення: < code > false <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >

Відповідь

ДЖСОН - відповідь
{
  "text": "Hello, this is a transcription test.",
  "language": "en",
  "duration": 3.5,
  "segments": [
    {
      "start": 0.0,
      "end": 1.8,
      "text": "Hello, this is",
      "speaker": "SPEAKER_00"
    },
    {
      "start": 1.8,
      "end": 3.5,
      "text": "a transcription test.",
      "speaker": "SPEAKER_00"
    }
  ]
}

Клонування голосу

POST /v1/tts/clone/

Створювати мовлення у клонованому голосі. Вивантажити еталонний звук і текст.

Вимагати тіло (multipart/form-data)

ПараметрТипОбов' язковоОпис
reference_audio file Так. Рекомендовано посилання на звуковий голос (10- 30 секунд). Макс. 20 Мб.
text string Так. Текст для декламування в голосі клонованого клону.
model string Ні Модель клонування: < code > chatockbox (типовий), < code > cosyvoice2 , < code > gpt- sowits
format string Ні Output format: mp3 (default), wav, flac
language string Ні Код мови призначення. Слід підтримувати вибраною моделлю.

Відповідь

Повертає звуковий файл як двійкові дані, те саме, що і кінцева точка TTS.

Зміна голосу

POST /v1/voice-convert/

Перетворити аудіо на звук іншого голосу. Вивантажити звуковий код і обрати цільовий голос.

Вимагати тіло (multipart/form-data)

ПараметрТипОбов' язковоОпис
file file Так. Звуковий файл джерела (MP3, WAV, FLAC). Макс. 50 Мб.
target_voice string Так. Цільовий ідентифікатор голосу для перетворення (використовуйте < code >/ v1/ voices/ для списку доступних голосів)
model string Ні Модель перетворення голосу: < code > openvoice (типовий), < code > kn- vc <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >
format string Ні Output format: wav (default), mp3, flac

Приклад запиту

cURL
curl -X POST https://api.tts.ai/v1/voice-convert/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -F "file=@source_audio.mp3" \
  -F "target_voice=af_bella" \
  -F "model=openvoice" \
  -o converted.wav

Відповідь

Повертає перетворений звуковий файл як двійкові дані.

Переклад мовлення

POST /v1/speech-translate/

Перекладати розмовний звук з однієї мови на іншу. До одного дзвінка слід додати текст, переклад і мовлення з тексту.

Вимагати тіло (multipart/form-data)

ПараметрТипОбов' язковоОпис
file file Так. Звуковий файл джерела мовою оригіналу. Макс. 100 Мб.
target_language string Так. Target language code (e.g., es, fr, de, ja)
voice string Ні Голос для перекладу виводу. Автовибрано, якщо не вказано.
preserve_voice boolean Ні Намагатися зберегти характеристики голосу оригінального промовця. Типове значення: < code > false <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >

Відповідь

ДЖСОН - відповідь
{
  "original_text": "Hello, how are you?",
  "translated_text": "Hola, como estas?",
  "source_language": "en",
  "target_language": "es",
  "audio_url": "https://api.tts.ai/v1/results/translate_abc123.mp3",
  "credits_used": 5
}

Мовлення

POST /v1/speech-to-speech/

Перетворювати стиль мовлення, емоції або доставку з збереженням змісту. Корисно для зміни тону, тону і виразності.

Вимагати тіло (multipart/form-data)

ПараметрТипОбов' язковоОпис
file file Так. Звуковий файл джерела мовлення. Макс. 50 Мб.
voice string Так. ІД голосу цілі для вихідної мови
model string Ні Модель: < code > openvoice (типовий), < code > chatcessbox
emotion string Ні Target emotion: neutral, happy, sad, angry, excited
speed float Ні Налаштування швидкості. Типове значення: < code > 1. 0 . Range: < code > 0. 5 <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > > > > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > <\ \ \ \ \ \ \ \ \ \ \ \ \ > < > < > < <\ \ > <\ \ \ \ \ \ \ > <\ \ > < > < > < > < > <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > <\ \ \ \ \ \ \ \ \ \ \ \ \ >\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >\ \ > <\ \ >\ \ > <\ \ >\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <\ \ > <

Відповідь

Повертає змінений звуковий файл як двійкові дані.

Звукові інструменти

Кінцеві точки для покращення, видалення голосу, поділ стовбурів тощо.

POST /v1/audio/enhance/

Покращення якості звукових даних: де noise, покращення прозорості, суперрозмірність.

file fileЗвуковий файл для покращення
denoise booleanУвімкнути деноазування (типовий: true)
enhance_clarity booleanЯскрава мова (типовий: так)
super_resolution booleanЯкість висотних розмірів звукових даних (типовий: false)
strength integer1- 3 (світло, середній, сильний). Типове значення: 2
POST /v1/audio/separate/

Відокремлювати голоси від інструментальних засобів (vocal remove) або розділяти їх на стебла.

file fileАудіо файл, який слід розділити
model stringdemucs (типовий) або spleeter
stems integerКількість стебел: 2, 4, 5 або 6 (типово: 2)
format stringOutput format: wav, mp3, flac
POST /v1/audio/dereverb/

Вилучити відлуння і відлуння з аудіозаписів.

file fileАудіо файл для обробки
type stringecho or reverb (default: both)
intensity integer1-5 (default: 3)
POST /v1/audio/analyze/ Вільно

Аналіз звукових даних для виявлення ключа, BPM і підпису часу.

file fileАудіо файл для аналізу
Відповідь
{
  "key": "C",
  "scale": "Major",
  "bpm": 120.0,
  "time_signature": "4/4",
  "camelot": "8B",
  "compatible_keys": ["C Major", "G Major", "F Major", "A Minor"]
}
POST /v1/audio/convert/ Вільно

Перетворити аудіо у форматах.

file fileАудіо файл для перетворення
format stringTarget format: mp3, wav, flac, ogg, m4a, aac
bitrate integerБітова швидкість виводу в кбітах: 64, 128, 192, 256, 320
sample_rate integerЧастота вибірки: 22050, 44100, 48000
channels stringmono або stereo

Голосова балачка

POST /v1/voice-chat/

Надіслати звукову або текстову інформацію і отримати відповідь комп' ютерного гравця з синтезованою мовою.

Вимагати тіло (multipart/form-data або JSON)

ПараметрТипОбов' язковоОпис
audio file Ні* Вхідні дані аудіо (або < code > audio або < code > text <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >)
text string Ні* Ввід тексту (або < code > audio або < code > text <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >)
voice string Ні Голос для відповіді комп' ютера. Типове значення: < code > bella <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >
tts_model string Ні Модель TTS для відповіді. Типове значення: < code >kro <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >
system_prompt string Ні Запит нетипової системи для комп' ютерного гравця
conversation_id string Ні Продовжити існуючу розмову

Відповідь

ДЖСОН - відповідь
{
  "conversation_id": "conv_abc123",
  "user_text": "What is the capital of France?",
  "ai_text": "The capital of France is Paris.",
  "audio_url": "https://api.tts.ai/v1/audio/tmp/resp_xyz.mp3",
  "credits_used": 3
}

Пакетне TTS

POST /v1/tts/batch/

Надіслати декілька текстів для паралельного створення TTS. За бажання, отримувати зворотний виклик з веб- сайтом після завершення всіх завдань.

Параметри

ПараметрТипОпис
textsarrayArray of objects: {text, model, voice}. Max 50 items.
webhook_urlstringOptional URL to POST results when batch completes.

Відповідь

ДЖСОН - відповідь
{
  "batch_id": "abc123",
  "total": 3,
  "completed": 0,
  "status": "processing"
}

Опитування поступу за допомогою Get / v1/ tts/ batch/result /? batch_ id=abc123

Вбудовування голосу

POST /v1/voice-embed/

Попереднє налаштування вбудовування голосу з аудіо. Скористайтеся отриманим ідентифікатором include_ id у наступних запитах на клонування голосів для близького створення.

Параметри

ПараметрТипОпис
filefileReference audio file (WAV, MP3, FLAC).
modelstringCloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts.

Відповідь

ДЖСОН - відповідь
{
  "embed_id": "emb_abc123",
  "model": "chatterbox",
  "duration_ms": 450
}

Перевірка здоров'я

GET /v1/health/

Перевірте стан сервера GPU, завантажені моделі і розмір черги. Не потрібно автентифікації. Кешовано протягом 30 секунд.

Відповідь

ДЖСОН - відповідь
{
  "status": "online",
  "latency_ms": 45,
  "queue_size": 3,
  "models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}

Моделі списку

GET /v1/models/

Повертає список всіх доступних моделей з їх можливостями.

Відповідь

ДЖСОН - відповідь
{
  "models": [
    {
      "id": "kokoro",
      "name": "Kokoro",
      "type": "tts",
      "tier": "standard",
      "languages": ["en", "ja", "ko", "zh", "fr"],
      "supports_cloning": false,
      "supports_streaming": true,
      "credits_per_1k_chars": 2
    },
    {
      "id": "chatterbox",
      "name": "Chatterbox",
      "type": "tts",
      "tier": "premium",
      "languages": ["en"],
      "supports_cloning": true,
      "supports_streaming": true,
      "credits_per_1k_chars": 4
    }
  ]
}

Голоси списку

GET /v1/voices/

Повертає список всіх доступних голосів, за бажання, відфільтрований моделлю або мовою.

Параметри запиту

ПараметрТипОпис
model string Filter by model ID (e.g., kokoro)
language string Фільтрувати за кодом мови (наприклад, < code > en <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >)
gender string Filter by gender: male, female, neutral

Відповідь

ДЖСОН - відповідь
{
  "voices": [
    {
      "id": "af_bella",
      "name": "Bella",
      "model": "kokoro",
      "language": "en",
      "gender": "female",
      "preview_url": "https://api.tts.ai/v1/voices/preview/af_bella.mp3"
    }
  ],
  "total": 142
}

Субтитри (SRT / VTTT) новий

GET /v1/speech/subtitles/?uuid=<job_uuid>&format=srt|vtt&download=1

Створює синхронізовані субтитри для всіх завершених завдань TTS. Виконує вирівнювання Whisper над аудіо і повертає SRT або WebVTT. Результат буде кешовано на диску, отже другим викликом одного uid є читання диска.

Параметри запиту

ПараметрОбов' язковоОпис
uuidТак.Завдання UUID повернуто за адресою / v1/ tts / або / v1/ voice- cloone /.
formatНі< code >srt <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > або vt .
downloadНі1 to send Content-Disposition: attachment so the browser saves rather than displays.
languageНіПідказка моделі вирівнювання (автовизначення, якщо пропущено).
cURL
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt

Словник вимови новий

GET POST DELETE /api/v1/pronunciations/

Повідомити рушієві TTS про те, як вимовляти окремі слова. Записи автоматично буде застосовано до всіх запитів на TTS, які ви робите. 200- entry для кожного рахунка.

Вимагати тіло (POST)

ПараметрТипОпис
wordstringWord to override (e.g. GIF, Anthropic). Word-boundary matched.
replacementstringЯк його записати для моделі (наприклад, < code > jiff , < code >, < code > ick <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >.
languagestringНеобов' язковий код ISO. Порожній = стосується всіх мов.
case_sensitivebooleanТипове значення < code > false . Враховувати регістр, точно якщо < code > = <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >.
cURL
# Save an entry
curl -X POST https://tts.ai/api/v1/pronunciations/ \
  -H "Authorization: Bearer sk-tts-..." \
  -H "Content-Type: application/json" \
  -d '{"word": "GIF", "replacement": "jiff"}'

# List your entries
curl https://tts.ai/api/v1/pronunciations/ -H "Authorization: Bearer sk-tts-..."

# Delete entry by id
curl -X DELETE "https://tts.ai/api/v1/pronunciations/?id=42" -H "Authorization: Bearer sk-tts-..."

Крім того, ви можете передавати параметри sper- request без збереження їх значення < code >prolues <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > на будь- якому з / v1/tts/ call як об' єкт або масив (див. параметри кінцевої точки TTS).

Стаття Наглядач новий

Drop a single <script> tag on any article page and visitors get a fixed reader bar that narrates the page on click. Auto-detects the article body, supports custom voice / model / position / accent color.

HTML
<script src="https://tts.ai/narrator.js"
    data-pk="pk-tts-your-publishable-key"
    data-voice="af_bella"
    data-model="kokoro"
    data-extract="auto"
    data-position="bottom"
    data-color="#e60000"
    data-locale="en"></script>

Параметри

ПараметрОпис
data-pkВидавничий ключ (pk- tts -...). Обмеження домену, впроваджені за допомогою поля < code > exposed_ domains .
data-voiceІД голосу. Типовий < code >f_ bella <\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >.
data-modelTTS model ID. Default kokoro.
data-extractauto (default) — tries article/main/.post-content/.entry-content selectors, falls back to densest paragraph cluster. Or pass any CSS selector to target a specific element.
data-position< code > bottom (типовий) або < code > top >.
data-colorКолір Accent (всі кольори CSS). Типове значення < code ># e60000 .
data-min-chars / data-max-charsПропустити панель, якщо стаття коротша за min- fars (типово, 200). Вхідні дані на max- fars (типово, 50 000).

Джерело GitHub:

Прослуховування віджета кнопок

Inline button-style embed. Renders next to its <script> tag and plays a button-triggered short snippet. Different shape from the Article Narrator above (which auto-injects a page-spanning bar and narrates the whole article).

HTML
<script src="https://tts.ai/widget.js"
    data-voice="af_bella"
    data-model="kokoro"
    data-style="full"
    data-theme="light"></script>

Збережені голоси (вмілі клони)

Вивантажити аудіо- посилання один раз, повернути стале значення voice_ id, а потім вказати цей ідентифікатор у запитах TTS замість повторного завантаження кожного дзвінка. Ідеально для інтеграції з високою volume.

Приоритет: Зберігання безкоштовне (без щоденної оренди, без шапки). Плата за вивантаження: 500 символів раз на голос. За використання scrupbune: +50 символів, які додаються до кожного покоління TTS, що посилається на збережений голос, на основі звичайних витрат на створення. Голоси архівів, які вам не потрібні, щоб зберігати їх у стані спокою; перезаряджайте їх у будь- який час. Обидва голоси є безкоштовними викликами API.

Вивантажити голос

POST https://tts.ai/api/v1/user-voices/ Потрібне розпізнавання

Множина форм. Поля: файл (обов' язковий, 5- 30- звук), назва (обов' язкова), мова (необов' язковий, типовий en), модель (необов' язкова авто- обирає cosyvoice2 для z/ja/ko else openvoice), згода_ з' єднання (обов' язкове, будь- яке істинне значення).

curl -X POST https://tts.ai/api/v1/user-voices/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -F "file=@reference.wav" \
  -F "name=My Narrator" \
  -F "language=en" \
  -F "consent_confirmed=true"

# Response:
{
  "public_id": "uv_a1b2c3d4e5f6",
  "id": 42,
  "name": "My Narrator",
  "model_name": "openvoice",
  "language": "en",
  "reference_audio_url": "https://tts.ai/media/user-voices/....wav",
  "storage_status": "active",
  "created_at": "2026-04-17T03:45:00+00:00"
}

Використовувати збережений голос у TTS

POST до / api/ v1/ tts / (NOTE: вузол VPS мережі, а не вузол api.tts.ai) з ідентифікатором user_ voice_ id. Ми завантажуємо ваш збережений звуковий файл і маршрут до трубопроводу клонування.

curl -X POST https://tts.ai/api/v1/tts/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello from my saved voice","user_voice_id":"uv_a1b2c3d4e5f6"}'

# Returns a queued job — poll /v1/speech/results/?uuid=... for the audio URL.

Список / вилучення

GET    https://tts.ai/api/v1/user-voices/           # list your saved voices + quota info
DELETE https://tts.ai/api/v1/user-voices/?public_id=uv_a1b2c3d4e5f6

Архів / повторно активувати (безкоштовно)

Застарілі голоси залишаються на вашому обліковому записі, але не можна використовувати у TTS. Корисно для тих користувачів, що не сплять, щоб ваш список залишався чистим.

POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/archive/
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/reactivate/

Приклади коду

Текст для мовлення

Python - requests
import requests

API_KEY = "sk-tts-your-key"

# Text to Speech
response = requests.post(
    "https://api.tts.ai/v1/tts/",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "model": "kokoro",
        "text": "Hello from TTS.ai!",
        "voice": "af_bella",
        "format": "mp3"
    }
)

with open("output.mp3", "wb") as f:
    f.write(response.content)

print(f"Credits used: {response.headers.get('X-Credits-Used')}")

Мова до тексту

Python - requests
# Speech to Text
with open("recording.mp3", "rb") as f:
    response = requests.post(
        "https://api.tts.ai/v1/stt/",
        headers={"Authorization": f"Bearer {API_KEY}"},
        files={"file": f},
        data={"model": "faster-whisper", "timestamps": "true"}
    )

result = response.json()
print(result["text"])

Клонування голосу

Python - requests
# Voice Cloning
with open("reference.wav", "rb") as ref:
    response = requests.post(
        "https://api.tts.ai/v1/tts/clone/",
        headers={"Authorization": f"Bearer {API_KEY}"},
        files={"reference_audio": ref},
        data={
            "text": "This speech uses a cloned voice.",
            "model": "chatterbox"
        }
    )

with open("cloned_output.mp3", "wb") as f:
    f.write(response.content)

Текст для мовлення

JavaScript - fetch
const API_KEY = 'sk-tts-your-key';

// Text to Speech
const response = await fetch('https://api.tts.ai/v1/tts/', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${API_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    model: 'kokoro',
    text: 'Hello from TTS.ai!',
    voice: 'af_bella',
    format: 'mp3'
  })
});

const audioBlob = await response.blob();
const audioUrl = URL.createObjectURL(audioBlob);
const audio = new Audio(audioUrl);
audio.play();

Мова до тексту

JavaScript - fetch
// Speech to Text
const formData = new FormData();
formData.append('file', audioFile);
formData.append('model', 'faster-whisper');

const response = await fetch('https://api.tts.ai/v1/stt/', {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${API_KEY}` },
  body: formData
});

const result = await response.json();
console.log(result.text);

Текст для мовлення

cURL
# Text to Speech
curl -X POST https://api.tts.ai/v1/tts/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -H "Content-Type: application/json" \
  -d '{"model":"kokoro","text":"Hello!","voice":"af_bella","format":"mp3"}' \
  -o output.mp3

Мова до тексту

cURL
# Speech to Text
curl -X POST https://api.tts.ai/v1/stt/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -F "file=@recording.mp3" \
  -F "model=faster-whisper" \
  -F "timestamps=true"

Клонування голосу

cURL
# Voice Cloning
curl -X POST https://api.tts.ai/v1/tts/clone/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -F "reference_audio=@reference.wav" \
  -F "text=This uses a cloned voice." \
  -F "model=chatterbox" \
  -o cloned.mp3

Покращення звуку

cURL
# Audio Enhancement
curl -X POST https://api.tts.ai/v1/audio/enhance/ \
  -H "Authorization: Bearer sk-tts-your-key" \
  -F "file=@noisy_audio.mp3" \
  -F "denoise=true" \
  -F "enhance_clarity=true" \
  -o enhanced.mp3

Коди помилок

Всі помилки повернути відповідь JSON з error поле.

Формат відповіді на помилку
{
  "error": {
    "code": "insufficient_credits",
    "message": "You do not have enough characters for this request.",
    "characters_required": 4000,
    "characters_available": 2000
  }
}
Стан HTTPКод помилкиОпис
400 bad_request Некоректні параметри запиту. Перевірте повідомлення про помилку, щоб дізнатися більше.
401 unauthorized Відсутній або некоректний ключ API.
402 insufficient_credits Недостатньо символів. Придбайте більше за адресою / cripping /.
403 forbidden У вас немає прав для доступу до цього ресурсу (наприклад, опитування завдання іншого користувача). Доступ до API можна використовувати для кожного плану.
404 not_found Модель або голос не знайдено.
413 file_too_large Вивантажений файл перевищить обмеження на розмір.
429 rate_limited Забагато запитів. Перевірте заголовки обмеження швидкості.
500 internal_error Помилка сервера. Спробуйте ще раз пізніше.
503 model_loading Модель завантажується. Спробуйте ще раз за декілька секунд.

Веб- гачки

Для завдань з довгими запусками (стискання, пакетне розбиття TTS) ви можете вказати параметр < code >webjo_ url . Після завершення завдання ви можете встановити POST- адресу вашого URL.

Завантаження веб- гачокComment
{
  "event": "task.completed",
  "task_id": "task_abc123",
  "status": "success",
  "result_url": "https://api.tts.ai/v1/results/task_abc123",
  "credits_used": 12,
  "created_at": "2025-01-15T10:30:00Z",
  "completed_at": "2025-01-15T10:30:45Z"
}
Результати веб- гачок можна звантажити через 24 години після завершення роботи. Не забудьте звантажити їх одразу.

Готові будувати?

Отримайте ваш ключ API і почніть об'єднувати TTS.ai до ваших програм.