---
title: "Озвучить текст"
method: POST
path: "/v1/audio/speech"
tags: ["Audio"]
---

# Озвучить текст

`POST /v1/audio/speech`

## Request

- Base URL: `https://api.hubris.pw`
- URL: `https://api.hubris.pw/v1/audio/speech`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.hubris.pw/oauth/authorize`, token URL `https://api.hubris.pw/oauth/token`, scopes: `chat:write`)

OpenAI-совместимая озвучка (TTS): текст на входе, байты аудио на выходе, а не JSON. Работает официальный SDK OpenAI (`audio.speech.create`).

Формат — `response_format`: `mp3` (`audio/mpeg`) или `pcm` (`audio/pcm` с частотой и числом каналов в `Content-Type`, 16-bit LE без заголовка WAV). Без поля формат выбирает модель. Стрима нет.

`voice` обязателен, если у модели в каталоге есть список голосов; голос не из списка отклоняется до обращения к модели.

Цена — по единице модели в каталоге: символы или байты текста, секунды звука, токены. Списание по факту запроса; `usage` в ответе нет, расход — в журнале запросов. Перед запросом баланс сверяется с оценкой цены. Список моделей: `GET /v1/models?output_modalities=speech`.

## Request body

- SpeechRequest
  - `model` string, required
  - `input` string, required: Текст для озвучки. Цена — по единице модели в каталоге: за символы текста или за токены (у Gemini 25 токенов на секунду звука).
  - `voice` string: Голос модели. Список — в карточке модели каталога (поле «Голоса»); обязателен, если список есть.
  - `response_format` 'mp3' | 'pcm': Формат аудио: mp3 или pcm (16-bit LE). Без поля формат выбирает модель, как правило pcm.

## Response `200`

Аудио целиком.

## Other responses

- `400`: Невалидное тело (`invalid_request`), не выбран голос (`voice_required`), голоса нет у модели (`voice_not_supported`); ключ BYOK. В тексте ошибки — доступные голоса.
- `401`: Ключ не передан, невалиден, отозван или заморожен (`invalid_api_key`, `key_frozen_spike`).
- `402`: Баланса не хватает на оценку цены запроса (`insufficient_balance`).
- `403`: Нет права `chat:write`: ключ только для чтения (`key_read_only`) или OAuth-токен без него (`insufficient_scope`). Ещё причины: management-ключ (`inference_key_required`), запрос не с адреса, к которому привязан ключ (`key_ip_not_allowed`), или заблокированный аккаунт (`account_blocked`).
- `404`: Модель не найдена или это не модель озвучки (`model_not_found`).
- `413`: Тело запроса больше 1 МБ (`request_too_large`).
- `429`: Исчерпан лимит расхода ключа (`daily_limit_exceeded`, `key_limit_exceeded`) или провайдер временно ограничил запросы. Пауза — в `Retry-After`.
- `502`: Нечем посчитать цену (`pricing_unavailable`), модель вернула пустой ответ (`no_audio_returned`), не удалось перекодировать в mp3 (`transcode_failed`) или ошибка провайдера. Списания нет.
- `503`: Курс ЦБ РФ временно недоступен (`exchange_rate_unavailable`).
- `504`: Таймаут озвучки (`upstream_timeout`).

---

[API](https://skmtc.dev/hubris/apis/hubris-api.md) · [All operations](https://skmtc.dev/hubris/apis/hubris-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hubris/apis/hubris-api/revisions/79ea91ed8f10?raw)
