Dokumentacja API

Iнтегрuj TTS.ai do aplikacji z naszym REST API. Kompatybilny z OpenAI format dla łatwej migracji.

REST API Kompatybilny z OpenAI Odpowiedzi JSON Streaming Wsparcie

Przegląd

API TTS.ai zapewnia dostęp programowy do wszystkich funkcji platformy: syntezy tekstu do języka, transkrypcji mowy do tekstu, klonowania głosu, poprawy dźwięku i innych. API wykorzystuje standardowe konwencje REST z JSON request/response.

Klucz API

Weź klucz API z Ustawienia konta. Dostępne na planach Pro i Enterprise.

Podstawowy URL

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

Auth

Token nośnika za pośrednictwem Authorization Nagłówek

Uwierzytelnienie

Wszystkie żądania API wymagają uwierzytelnienia za pośrednictwem tokena Nośnika w Authorization Nagłówek.

Nagłówek HTTP
Authorization: Bearer sk-tts-your-api-key-here
Trzymaj klucz API w tajemnicy. Nie dzielić się nim w kodze klienta, w repozytorium publicznym lub logach. Owracać klawisze regularnie z ustawienia konta.

SDKs

Oficjalne SDK ułatwiają włączenie TTS.ai do aplikacji. Obydwa są otwarte źródła i dostępne na 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

Podstawowy URL

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

Wszystkie punkty końcowe są w stosunku do tego podstawowego URL. Na przykład punkt końcowy TTS to:

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

Ograniczenia stawki

Limity stawek API różnią się w zależności od planu:

Plan Wnioski/min Równoczesne Maksymalna długość tekstu
Darmowe 10 2 500 znaków
Rozpoczynacz 30 3 100 000 znaków
Prof. 60 5 100 000 znaków
Przedsiębiorstwo 300 20 50 000 znaków

Nagłówki ograniczeń częstotliwości są włączone do każdej odpowiedzi: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Koszty kredytowe

Usługa Koszt Jednostka
TTS (Bezpłatne modele: Piper, VITS, Melotts) 1000 znaków na 1000 znaków
TTS (Standardne modele: Kokoro, CosyVoice 2, itp.) 2000 znaków na 1000 znaków
TTS (Modele premium: Tortoise, Chatterbox itp.) 4000 znaków na 1000 znaków
Przemówienie do tekstu 2000 znaków za minutę dźwięku
Klonowanie głosu 4000 znaków na 1000 znaków
Zmiana głosu 3000 znaków za minutę dźwięku
Poprawa dźwięku 2000 znaków za minutę dźwięku
Usunięcie głosów / rozdzielenie stemów 3000-4 000 znaków za minutę dźwięku
Tłumaczenie mowy 5000 znaków za minutę dźwięku
Rozmowa głosowa 3000 znaków na skręt
Znajdź klucz & BPM Darmowe --
Konwerter audio Darmowe --

Tekst do mowy

POST /v1/tts/

Przekonwertuj tekst do dźwięku. Zwraca plik audio w wymaganym formacie.

Organ wniosku

ParametrRodzajWymaganeOpis
model string Tak. Wzór ID (np. kokoro, chatterbox , piper)
text string Tak. Tekst do konwersji w mowie (max. 100 000 znaków na żądanie)
voice string Tak. ID głosu (użyj /v1/woices/, aby wykazać dostępne głosy)
format string Nie. Format wyjściowy: < kod > mp3 (domyślnie), < kod>wav, < kod>flac, < kod>ogg
speed float Nie. Mnożnik prędkości mnożnik mnożnik. Domyślnie: 1.0. Zakres: 0.5 do 2.0
language string Nie. Kod języka (np. en, es ). Autowykrywane, jeśli pominięto.
stream boolean Nie. Włącz odpowiedź strumieniową. Domyślnie: false

Przykładowy wniosek

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

Odpowiedź

Zwraca plik audio jako dane binarne z odpowiednim Kontent-Type nagłówk (audio/mpeg, audio/wav, itp.).

Nagłówki odpowiedzi
Content-Type: audio/mpeg
Content-Length: 48256
X-Credits-Used: 2
X-Credits-Remaining: 498

Przemówienie do tekstu

POST /v1/stt/

Transscribe audio to text. Obsługuje 99 języków automatycznie wykrywaniem.

Organ wniosku (multipart/form-data)

ParametrRodzajWymaganeOpis
file file Tak. Plik audio (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). Max 100MB.
model string Nie. Model STT: whisper (domyślnie), szybszy-whisper , czucie
language string Nie. Kod języka. auto dla automatycznego wykrywania (domyślnie).
timestamps boolean Nie. Domyślne: false
diarize boolean Nie. Włącz diaryzację głośnika. Domyślnie: false

Odpowiedź

Odpowiedź JSON
{
  "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"
    }
  ]
}

Klonowanie głosu

POST /v1/tts/clone/

Generuj mowy w sklonowanym głosie. Wyślij odnośny dźwięk i tekst.

Organ wniosku (multipart/form-data)

ParametrRodzajWymaganeOpis
reference_audio file Tak. Głos referencyjny (10-30 sekund zalecane). Max 20MB.
text string Tak. Sms do wypowiedzenia w sklonowanym głosie.
model string Nie. Model klonowania: chatterbox (domyślnie), cosyvoice2, gpt-sovits
format string Nie. Format wyjściowy: < kod > mp3 (domyślnie), < kod>wav , < kod>flac
language string Nie. Kod języka docelowego. Musi być obsługiwany przez wybrany model.

Odpowiedź

Zwraca plik audio jako dane binarne, takie same jak punkt końcowy TTS.

Zmiana głosu

POST /v1/voice-convert/

Konwertuj dźwięk na dźwięk jak inny głos. Wyślij dźwięk źródłowy i wybierz głos docelowy.

Organ wniosku (multipart/form-data)

ParametrRodzajWymaganeOpis
file file Tak. Źródłowy plik audio (MP3, WAV, FLAC). Max 50MB.
target_voice string Tak. Docelowy ID głosu do konwersji (użyj /v1/woices/, aby wykazać dostępne głosy)
model string Nie. Model konwersji głosu: openvoice (domyślnie), knn-vc
format string Nie. Format wyjściowy: < kod>wav (domyślnie), < kod>>mp3, flac

Przykładowy wniosek

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

Odpowiedź

Zwraca konwertowany plik audio jako dane binarne.

Tłumaczenie mowy

POST /v1/speech-translate/

Przetłumacz głośny dźwięk z jednego języka do drugiego. Łączy mówka-do-tekstu, tłumaczenie, i tekst-to-speech w jednym połączenia.

Organ wniosku (multipart/form-data)

ParametrRodzajWymaganeOpis
file file Tak. Plik dźwiękowy źródłowy w języku oryginalnym. Max 100MB.
target_language string Tak. Kod docelowy język (np. es , fr, , de, ja)
voice string Nie. Głos dla przetłumaczonego wyjścia. Automatycznie wybrany, jeśli nie zostanie.
preserve_voice boolean Nie. Próbuj zachować charakterystyki głosowe oryginalnego głośnika. Domyślnie: false

Odpowiedź

Odpowiedź JSON
{
  "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
}

Przemówienie do mowy

POST /v1/speech-to-speech/

Przekształcenie stylu mowy, emocji lub dostawy przy zachowaniu treści. Przydatne do dostosowania tonu, kroczenia i ekspresywności.

Organ wniosku (multipart/form-data)

ParametrRodzajWymaganeOpis
file file Tak. Źródłowy plik głośności. Max 50MB.
voice string Tak. Docelowy identyfikator głosu dla mowy wyjściowej
model string Nie. Model: openvoice (domyślnie), chatterbox
emotion string Nie. Emocja docelowa: neutralny , chappy, sad , angry , wzbudzony
speed float Nie. Modyfikacja prędkości. Domyślnie: < kod>1.0. Zakres: < kod>0.5 do 2.0

Odpowiedź

Zwraca przekształcony plik audio jako dane binarne.

Narzędzia audio

Przetwarzanie dźwięku punkt końcowy dla poprawy, usuwania wokału, dzielenia ścien i więcej.

POST /v1/audio/enhance/

Poprawa jakości dźwięku: denoize, poprawa jasności, super rozdzielczość.

file filePlik audio do poprawy
denoise booleanWłącz denoizację (domyślnie: true)
enhance_clarity booleanZwiększenie jasności mowy (domyślnie: true)
super_resolution booleanJakość dźwięku (domyślnie: false)
strength integer1-3 (lekkie, średnie, silne). Domyślnie: 2
POST /v1/audio/separate/

Oddzielne wokały od instrumentów (usunięcie dźwięku) lub podzielone na stebla.

file filePlik audio do oddzielenia
model stringdemucs (domyślne) lub spleeter
stems integerLiczba statek: 2, 4, 5 lub 6 (domyślnie: 2)
format stringFormat wyjściowy: wav, mp3, flac
POST /v1/audio/dereverb/

Usuń echo i odzwierciedlenie z nagrań audio.

file filePlik audio do przetwarzania
type stringecho or reverb (default: both)
intensity integer1-5 (default: 3)
POST /v1/audio/analyze/ Darmowe

Analiza dźwięku do wykrycia klucza, BPM i podpisu czasu.

file filePlik audio do analizy
Odpowiedź
{
  "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/ Darmowe

Konwertuj dźwięk między formatami.

file filePlik audio do konwersji
format stringFormat docelowy: < kod>> mp3, < kod>wav, < kod>flac, kod>, m4a, aac
bitrate integerPrędkość wyjściowa w kbps: 64, 128, 192, 256, 320
sample_rate integerCzęstotliwość próbki: 22050, 44100, 48000
channels stringmono lub stereo

Rozmowa głosowa

POST /v1/voice-chat/

Wyślij dźwięk lub tekst i otrzymaj odpowiedź AI z syntetyczną mową.

Organ wniosku (multipart/form-data lub JSON)

ParametrRodzajWymaganeOpis
audio file Nie.* Wejście dźwiękowe (lub audio lub text wymagane)
text string Nie.* Wejście tekstu (lub audio lub text wymagane)
voice string Nie. Głos do odpowiedzi AI. Domyślnie: af_bella
tts_model string Nie. Model TTS dla odpowiedzi. Domyślnie: kokoro
system_prompt string Nie. Właściwy zapytanie systemu dla AI
conversation_id string Nie. Kontynuuj istniejącą rozmowę

Odpowiedź

Odpowiedź JSON
{
  "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
}

Nr serii TTS

POST /v1/tts/batch/

Przekazywanie wielu tekstów dla równoległego generowania TTS. Opcjonalnie otrzymywanie powrotnego telefonu internetowego po zakończeniu wszystkich zadań.

Parametry

ParametrRodzajOpis
textsarrayArray of objects: {text, model, voice}. Max 50 items.
webhook_urlstringOptional URL to POST results when batch completes.

Odpowiedź

Odpowiedź JSON
{
  "batch_id": "abc123",
  "total": 3,
  "completed": 0,
  "status": "processing"
}

Analiza postępów z GET / v1/tts/batch/result/?batch_id=abc123

Wbudowanie głosu

POST /v1/voice-embed/

Wstępne komputuj wbudowanie głosu z dźwięku referencyjnego. Użyj zwrotnego embed_id w kolejnych żądaniach klonowania głosu dla niemal instant generacji.

Parametry

ParametrRodzajOpis
filefileReference audio file (WAV, MP3, FLAC).
modelstringCloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts.

Odpowiedź

Odpowiedź JSON
{
  "embed_id": "emb_abc123",
  "model": "chatterbox",
  "duration_ms": 450
}

Kontrola zdrowia

GET /v1/health/

Sprawdź stan serwera GPU, wczytane modele i rozmiar kolejki. Nie jest wymagane uwierzytelnienie. Cached przez 30 sekund.

Odpowiedź

Odpowiedź JSON
{
  "status": "online",
  "latency_ms": 45,
  "queue_size": 3,
  "models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}

Modele listy

GET /v1/models/

Zwraca listę wszystkich dostępnych modeli z ich możliwościami.

Odpowiedź

Odpowiedź JSON
{
  "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
    }
  ]
}

Lista głosów

GET /v1/voices/

Zwraca listę wszystkich dostępnych głosów, opcjonalnie filtrowanych za pomocą modelu lub języka.

Parametry zapytania

ParametrRodzajOpis
model string Filtrować według wzoru ID (np. kokoro)
language string Filtrować według kodu językowego (np. en )
gender string Filtrować według płci: male , żeński , neutralny

Odpowiedź

Odpowiedź JSON
{
  "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
}

Przykłady kodu

Tekst do mowy

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')}")

Przemówienie do tekstu

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"])

Klonowanie głosu

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)

Tekst do mowy

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();

Przemówienie do tekstu

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);

Tekst do mowy

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

Przemówienie do tekstu

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"

Klonowanie głosu

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

Poprawa dźwięku

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

Kody błędów

Wszystkie błędy zwracają odpowiedź JSON z error Pole.

Format odpowiedzi na błąd
{
  "error": {
    "code": "insufficient_credits",
    "message": "You do not have enough characters for this request.",
    "characters_required": 4000,
    "characters_available": 2000
  }
}
Status HTTPKod błęduOpis
400 bad_request Nieprawidłowe parametry żądania. Sprawdź wiadomość o błędzie w celu uzyskania szczegółów.
401 unauthorized Brak lub nieprawidłowy klucz API.
402 insufficient_credits Za mało znaków. Zakup więcej w /pricing /.
403 forbidden Dostęp API nie jest dostępny w planie.
404 not_found Nie znaleziono modelu ani głosu.
413 file_too_large Wysłany plik przekracza limit rozmiaru.
429 rate_limited Zbyt wiele zapytań. Sprawdź zagłówki ograniczeń częstotliwości.
500 internal_error Błąd serwera. Spróbuj później.
503 model_loading Model jest załadowany. Powtórz za kilka sekund.

Witryny internetowe

Dla długich zadań (rozdzielenie stemów, serial TTS) można podać parametr webhook_url. Po zakończeniu zadania pokażemy wynik na Twój URL.

Webhook Payload
{
  "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"
}
Wyniki Webhook są dostępne do pobrania przez 24 godziny po zakończeniu. Upewnij się, że pobierz je szybko.

Gotowy do budowy?

Weź klucz API i zacznij integrować TTS.ai do aplikacji.