Speech API: синтез и распознавание речи

Тот же API-ключ и баланс LLM. TTS возвращает аудиофайл, STT — распознанный текст.

Эндпоинты и авторизация

MethodPathНазначение
GET/v1/audio/models?task=ttsКаталог Speech; task=tts или stt необязателен.
POST/v1/audio/speechJSON → бинарное аудио.
POST/v1/audio/transcriptionsmultipart/form-data → текст или JSON.

Authorization: Bearer sk-your-tokenator-key

Модели и возможности

Модели появятся здесь после подключения. Доступные вашему ключу модели: GET /v1/audio/models.

МодельAPI IDTaskМножитель
Gemini 3.8 Flash TTSgemini-3.8-flash-ttsTTS2.5×

В каталоге audio_options содержит task, форматы и голос по умолчанию. Используйте API ID из каталога. У TTS и STT отдельные модели; чат-эндпоинты их не принимают.

TTS: текст в аудио

curl
curl https://api.tokenator.top/v1/audio/speech \
  -H "Authorization: Bearer sk-your-tokenator-key" \
  -H "Content-Type: application/json" \
  --output speech.mp3 \
  -d '{
  "input": "Hello!",
  "model": "gemini-3.8-flash-tts",
  "response_format": "mp3",
  "voice": "Zephyr"
}'

Обязательные поля: model, непустой input и voice, если у модели не задан голос по умолчанию. response_format по умолчанию — mp3. Поля speed, instructions, language, sample_rate и другие параметры модели передаются апстриму. Поддержка зависит от модели. Ответ — бинарный файл; сохраните его на диск. SSE не поддерживается.

Python
import requests

r = requests.post(
    "https://api.tokenator.top/v1/audio/speech",
    headers={"Authorization": "Bearer sk-your-tokenator-key"},
    json={"model": "gemini-3.8-flash-tts", "input": "Hello!", "voice": "Zephyr"},
    timeout=300,
)
r.raise_for_status()
with open("speech.mp3", "wb") as f:
    f.write(r.content)

STT: аудио в текст

curl
curl https://api.tokenator.top/v1/audio/transcriptions \
  -H "Authorization: Bearer sk-your-tokenator-key" \
  -F 'model=your-stt-model' \
  -F 'file=@recording.wav' \
  -F 'response_format=json'
JSON
{"text":"Hello!","usage":{"prompt_tokens":6,"completion_tokens":0,"total_tokens":6}}

Обязательны model и один непустой файл file до 25 MiB. Не задавайте Content-Type вручную: клиент сам добавит multipart boundary. response_format: json (по умолчанию), text или verbose_json. Дополнительно можно передать language, prompt и temperature; их поддержка зависит от апстрима. Пустая расшифровка тишины допустима.

Учёт токенов

Используется общий баланс LLM и множитель модели или выбранной привязки. При наличии usage расчёт совпадает с LLM: весь input (включая cache read) плюс cache write и output. Кеширование отдельно в интерфейсе Speech не показывается.

Без usage: 1 Unicode-символ = 1 токен. Для TTS считаются символы исходного input, для STT — распознанного текста. Пробелы и знаки препинания тоже считаются. Например, 100 символов при ×2 расходуют 200 LLM-токенов. Списание происходит за успешный результат; ошибки не списываются. Лимиты генераций изображений и видео не используются.

Счётчики до множителя приходят в заголовках X-Tokenator-Input-Tokens, X-Tokenator-Output-Tokens, X-Tokenator-Total-Tokens. JSON-ответ STT также содержит usage. Итоговое списание видно в истории ключа.

Ошибки

HTTPПричина
400Нет обязательного поля, неверный тип модели или формат; запрошен SSE.
401 / 403Проблема с ключом или доступом к модели.
413Слишком большой аудиофайл.
429Исчерпан баланс LLM или достигнут лимит запросов.
502 / 503Апстрим не ответил или вернул некорректный результат. Токены не списываются.

Частые вопросы

Нужен отдельный ключ для Speech?

Нет. Используйте ключ с LLM-токенами и доступом к нужной Speech-модели.