# Flux TTS — синтез речи, Deepgram, через API СОЮЗа

> Идентификатор для поля `model`: `flux-tts`. Страница: https://souz.ai/models/flux-tts. Текст → Речь. Выпущена 12 августа 2026.

СОЮЗ — единый API к нейросетям разных вендоров: один ключ, общий баланс в рублях, списание только за успешный запрос. Эта модель вызывается по контракту ниже.

Flux TTS — живая английская речь с паузами, где они нужны. Для голосовых агентов, звонков и автоответчиков.

## Цены

Неуспешный запрос не тарифицируется. В ответах API итог — `price` у задачи и `usage.cost` у чата — целые микроединицы валюты платформы (1 единица = 1 000 000 микро), а сама валюта приезжает рядом полем `currency` (сейчас `RUB`). У незавершённой задачи `price: null`.

- Символы текста — 6 464 ₽ за 1M

Цены и типичное время пресетов роутинга — поле `routing`: `cheap` «Дешевле», `balanced` «Баланс» (по умолчанию), `fast` «Быстрее». Пресет задаёт порядок каналов; где пресеты начинают с одного канала, цена у них общая. Потолок `max_price_multiplier` (`1.5`, `2`, `3`, `5`, `10`) не даёт пробовать каналы дороже цены пресета больше чем во столько раз.

- Цена по каналам: Синий (`blue`) — 6 464 ₽ за 1M символов.

Цена не зависит от канала; скорость и стабильность каждого — в блоке «Каналы».

## Каналы

Канал — постоянный цвет внутри модели: у каждого свои ставки, задержка, скорость и стабильность. Цвет не означает «дешёвый» или «быстрый», одинаковый цвет у другой модели — другой канал. Задержка и скорость — медиана за последний час, стабильность — доля успешных вызовов за 7 дней; «нет данных» — замеров пока мало, а не ноль.

Каналов: 1. Данные на момент сборки страницы; свежие — `GET https://api.souz.ai/v1/models/flux-tts/channels` без ключа (там же HEX цвета, пределы входа и p90).

| Канал (`id`) | Название | Доступен | Ставки | Время ответа, p50 за сутки | Стабильность, 7 дней |
| --- | --- | --- | --- | --- | --- |
| `blue` | Синий | да | 6 464 ₽ за 1M символов | нет данных | нет данных |

Как выбрать канал:

- По умолчанию канал выбирает Авто-роутинг: пресет `routing` (`cheap`, `balanced`, `fast`) задаёт порядок каналов, при отказе запрос переходит к следующему.
- На один запрос — поле `routing_options`: `{"only": ["blue"]}` — только этот канал, без запасных; `{"order": ["blue"]}` — сначала он, затем остальные; `"allow_fallbacks": false` — только каналы из `order`; `{"ignore": [...]}` — исключить; `max_price` — пределы ставок. SDK OpenAI — через `extra_body`.
- Бесплатная проверка без запуска: `POST https://api.souz.ai/v1/models/flux-tts/routing/preview` с теми же `routing`, `routing_options` и `params` — каналы в порядке попыток (`channels`), у каждого оценка `estimated_price`; запрос начнётся с первого. Пустой `channels` — с такими условиями запрос не выполнить. Настройки аккаунта превью применяет, как запрос.
- Закрепить по умолчанию для всех запросов аккаунта к модели: `PATCH https://api.souz.ai/v1/settings` ключом управления с `{"routing_options": {"flux-tts": {"only": ["blue"]}}}`. PATCH заменяет всю карту — сначала прочитайте `GET https://api.souz.ai/v1/settings` и сохраните настройки других моделей. Запрос без `routing_options` наследует настройку; `{}` в запросе — автоматический выбор на один вызов.
- MCP: https://api.souz.ai/mcp — инструменты `list_channels`, `compare_channels`, `preview_routing`, `pin_channel`, `unpin_channel`. Подключение в Claude Code: `claude mcp add --transport http souz https://api.souz.ai/mcp --header "Authorization: Bearer $SOUZ_API_KEY"`.
- Каким каналом выполнен запрос — поле `channel` в ответе (у чата — и в каждом чанке потока), в задаче, вебхуке и истории запросов; `attempt_count` — сколько было попыток.

## Подключение по API

- Адрес: `POST https://api.souz.ai/v1/audio/speech`
- Авторизация: заголовок `Authorization: Bearer <ключ>`. Ключ создаётся в кабинете: https://souz.ai/keys.
- Тело запроса — JSON, `Content-Type: application/json`, поле `model` — `flux-tts`.
- Ответ — байты звука в родном формате модели, id задачи — в заголовке `X-Job-Id` (так ждёт SDK OpenAI). С `Accept: application/json` — объект задачи: звук в `data[0].url`, `usage.seconds`, `usage.billed_characters` и итог `price`.
- Ошибки — JSON вида `{ "error": { "type", "code", "message", "detail" } }` с кодом HTTP 4xx/5xx; ветвиться — по `type` и `code`. `401` — неверный ключ; `402` с кодом `insufficient_balance` — не хватает средств на балансе, `key_spend_limit_exceeded` или `member_spend_limit_exceeded` — исчерпан лимит трат ключа или участника, повтор не поможет; `400` с кодом `capability_mismatch` или `invalid_request` — запрос не подходит модели, в `error.detail[]` — поле (`path`), причина (`reason`) и что подойдёт (`allowed`); `503 model_unavailable` — модель сейчас недоступна, повторите после `Retry-After`.
- Руководство по API целиком: https://souz.ai/docs, спецификация OpenAPI: https://api.souz.ai/openapi.json.

## Параметры запроса

Отправляются поля из этой таблицы. Кроме них — общие поля задач `routing`, `routing_options`, `max_price_multiplier`, `store`, `callback_url` и `user`. Незнакомое поле — `400 invalid_request` с `detail[].reason: unsupported_field`; значение, которое у модели ничего не меняет, принимается молча. Вся схема тела машинно — `input_schema` в карточке `GET /v1/models/flux-tts` (JSON Schema).

| Поле | Тип | Обязательное | Значения | По умолчанию | Описание |
| --- | --- | --- | --- | --- | --- |
| `input` | строка | да | текст, до 2 000 символов | — | Текст. До 2000 символов на английском. Паузу задайте маркером \{pause:1s\} между фразами. |
| `voice` | перечисление | нет | flux-haley-en, flux-alexis-en, flux-bree-en, flux-brittany-en, flux-brooke-en, flux-bruce-en, flux-cliff-en, flux-cole-en, flux-colin-en, flux-conor-en, flux-donovan-en, flux-drew-en, flux-elise-en, flux-gemma-en, flux-hannah-en, flux-heather-en, flux-jack-en, flux-kai-en, flux-kelsey-en, flux-kit-en, flux-maeve-en, flux-marcelo-en, flux-marcus-en, flux-meena-en, flux-meghan-en, flux-miles-en, flux-naveen-en, flux-paige-en, flux-priya-en, flux-rufus-en, flux-sean-en, flux-sharon-en, flux-sienna-en, flux-tanner-en, flux-wade-en, flux-wes-en | `flux-haley-en` | Голос |
| `response_format` | перечисление | нет | mp3, wav | `mp3` | Формат звука |
| `speed` | число | нет | число, от 0,5 до 1,5, шаг 0,05 | `1` | Темп. 1 — обычный темп, шаг 0,05. |
| `expressivity` | целое | нет | целое, от -2 до 2, шаг 1 | `0` | Живость подачи. От −2 — спокойно до 2 — оживлённо, 0 — обычная подача. |

## Примеры запроса

### cURL

```bash
curl https://api.souz.ai/v1/audio/speech \
  -H "Authorization: Bearer $SOUZ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "flux-tts",
    "input": "Добро пожаловать в СОЮЗ. Ваше аудио готово.",
    "voice": "flux-haley-en",
    "response_format": "mp3",
    "speed": 1,
    "expressivity": 0
  }' \
  --output speech.mp3
```

### Python

```python
import os
import requests

SOUZ_API_KEY = os.environ["SOUZ_API_KEY"]

response = requests.post(
    "https://api.souz.ai/v1/audio/speech",
    headers={"Authorization": f"Bearer {SOUZ_API_KEY}"},
    json={
      "model": "flux-tts",
      "input": "Добро пожаловать в СОЮЗ. Ваше аудио готово.",
      "voice": "flux-haley-en",
      "response_format": "mp3",
      "speed": 1,
      "expressivity": 0
    },
)
response.raise_for_status()
with open("speech.mp3", "wb") as audio:
    audio.write(response.content)
print(response.headers["X-Job-Id"])
```

### TypeScript

```typescript
import { writeFile } from "node:fs/promises";

const response = await fetch("https://api.souz.ai/v1/audio/speech", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SOUZ_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "model": "flux-tts",
    "input": "Добро пожаловать в СОЮЗ. Ваше аудио готово.",
    "voice": "flux-haley-en",
    "response_format": "mp3",
    "speed": 1,
    "expressivity": 0
  }),
});
await writeFile("speech.mp3", Buffer.from(await response.arrayBuffer()));
console.log(response.headers.get("X-Job-Id"));
```

### Канал

```bash
curl https://api.souz.ai/v1/audio/speech \
  -H "Authorization: Bearer $SOUZ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "flux-tts",
    "input": "Добро пожаловать в СОЮЗ. Ваше аудио готово.",
    "voice": "flux-haley-en",
    "response_format": "mp3",
    "speed": 1,
    "expressivity": 0,
    "routing_options": {
      "only": [
        "blue"
      ]
    }
  }' \
  --output speech.mp3
```

## Примеры ответа

### Звук

```
HTTP/1.1 200 OK
Content-Type: audio/mpeg
X-Job-Id: job_01voice

<байты звука>
```

### Accept: application/json

```json
{
  "id": "job_01voice",
  "object": "job",
  "created": 1774170000,
  "created_at": "2026-03-22T09:00:00Z",
  "completed_at": "2026-03-22T09:00:09Z",
  "model": "flux-tts",
  "modality": "speech",
  "status": "completed",
  "routing": "cheap",
  "max_price_multiplier": null,
  "routing_options": null,
  "attempt_count": 1,
  "channel": "blue",
  "price": 277952,
  "currency": "RUB",
  "usage": {
    "characters": 43,
    "billed_characters": 43,
    "seconds": 3.2
  },
  "data": [
    {
      "id": "file_01voice",
      "object": "file",
      "kind": "result",
      "type": "audio",
      "role": "result",
      "url": "https://media.souz.ai/v1/files/file_01voice/souz_flux-tts_01voice.mp3?exp=1774774809&sig=…",
      "content_type": "audio/mpeg",
      "filename": "souz_flux-tts_01voice.mp3",
      "bytes": 51200,
      "created_at": "2026-03-22T09:00:09Z",
      "expires_at": "2026-03-29T09:00:09Z",
      "expired": false
    }
  ],
  "error": null
}
```

## Вопросы и ответы

**Что такое Flux TTS?**

Flux TTS — живая английская речь с паузами, где они нужны. Для голосовых агентов, звонков и автоответчиков. Доступна в СОЮЗе по единому API и в плейграунде на этой странице.

**Сколько стоит Flux TTS?**

Flux TTS стоит 6 464 ₽ за 1M. Цена не зависит от канала; скорость и стабильность каждого — в блоке «Каналы». Списывается только успешный запрос, неудачный не стоит ничего.

**Что Flux TTS принимает на вход и что отдаёт?**

Flux TTS принимает текст и отдаёт речь.

**Какие форматы поддерживает Flux TTS?**

Flux TTS поддерживает: голос — Haley · English (US), Alexis · English (US), Bree · English (US), Brittany · English (US), Brooke · English (US), Bruce · English (US), Cliff · English (US), Cole · English (US), Colin · English (UK), Conor · English (UK), Donovan · English (US), Drew · English (US), Elise · English (US), Gemma · English (UK), Hannah · English (US), Heather · English (US), Jack · English (UK), Kai · English (SG), Kelsey · English (US), Kit · English (UK), Maeve · English (IE), Marcelo · English (PH), Marcus · English (US), Meena · English (IN), Meghan · English (US), Miles · English (US), Naveen · English (IN), Paige · English (US), Priya · English (IN), Rufus · English (UK), Sean · English (UK), Sharon · English (AU), Sienna · English (US), Tanner · English (UK), Wade · English (US) или Wes · English (US), по умолчанию Haley · English (US); формат звука — MP3 или WAV, по умолчанию MP3; темп — от 0,5 до 1,5, по умолчанию 1; живость подачи — от -2 до 2, по умолчанию 0.

**Как вызвать Flux TTS через API?**

Запросом POST https://api.souz.ai/v1/audio/speech с полем model: "flux-tts" и ключом СОЮЗа в заголовке Authorization: Bearer. Ответ — готовый звук, id задачи — в заголовке X-Job-Id; с заголовком Accept: application/json приходит объект задачи со ссылкой на файл, длительностью, числом символов и итоговой ценой. Примеры на cURL, Python и TypeScript — в разделе «Подключение по API».

**Что такое каналы Flux TTS и как выбрать конкретный?**

Flux TTS выполняется через один канал — «Синий» (blue). У каждого канала свои ставки, задержка, скорость и стабильность за 7 дней — они в блоке «Каналы» на этой странице и в GET https://api.souz.ai/v1/models/flux-tts/channels. Цвет не означает «дешёвый» или «быстрый», а одинаковый цвет у другой модели — другой канал. По умолчанию канал выбирает Авто-роутинг по пресету «Дешевле», «Баланс» или «Быстрее». Конкретный канал задаёт поле routing_options: {"only": ["blue"]} — только этот канал, {"order": ["blue"]} — сначала он, затем остальные. Чтобы закрепить канал для всех запросов к модели, сохраните ту же настройку в аккаунте: PATCH https://api.souz.ai/v1/settings ключом управления или в кабинете. Каким каналом выполнен запрос, видно в поле channel ответа и в истории.

**Можно ли попробовать Flux TTS без кода?**

Да: плейграунд на этой странице запускает Flux TTS с теми же параметрами, что и API. Нужен аккаунт СОЮЗа. Итоговая стоимость появляется после готового и сохранённого аудио. Пока запрос выполняется, в истории вместо цены стоит прочерк; итог появляется только после завершения.

**Когда вышла Flux TTS?**

Flux TTS выпущена Deepgram 12 августа 2026.

## Ссылки

- Страница модели: https://souz.ai/models/flux-tts
- Каталог моделей: https://souz.ai/models
- Все модели одним файлом: https://souz.ai/llms.txt
- Кабинет (ключи, баланс, история запросов): https://souz.ai/overview
