Speech API: синтез и распознавание речи
Тот же API-ключ и баланс LLM. TTS возвращает аудиофайл, STT — распознанный текст.
Эндпоинты и авторизация
| Method | Path | Назначение |
|---|---|---|
| GET | /v1/audio/models?task=tts | Каталог Speech; task=tts или stt необязателен. |
| POST | /v1/audio/speech | JSON → бинарное аудио. |
| POST | /v1/audio/transcriptions | multipart/form-data → текст или JSON. |
Authorization: Bearer sk-your-tokenator-key
Модели и возможности
Модели появятся здесь после подключения. Доступные вашему ключу модели: GET /v1/audio/models.
| Модель | API ID | Task | Множитель |
|---|---|---|---|
| Gemini 3.8 Flash TTS | gemini-3.8-flash-tts | TTS | 2.5× |
В каталоге audio_options содержит task, форматы и голос по умолчанию. Используйте API ID из каталога. У TTS и STT отдельные модели; чат-эндпоинты их не принимают.
TTS: текст в аудио
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 не поддерживается.
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 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'
{"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-модели.