# Together AI API: совместимый запрос, модели, цена и лимиты

Source: https://provod.ai/ru/blog/api150-a112-together-ai

Тот же JSON может пройти endpoint и всё равно встретить другой лимит, модель или расчёт. Твой OpenAI-клиент отправит валидный запрос на Together AI, получит `200 OK`, и по этому ответу легко решить, что миграция закончена. По документации Together AI - не закончена.

Совместимость на уровне SDK гарантирует форму запроса, а не идентичную эксплуатацию. Одинаковый синтаксис говорит только о том, что тело запроса примут. Он ничего не говорит о том, какая модель отвечает, по какой цене, под каким лимитом и с какой формой ответа. Эти четыре вещи и есть эксплуатационный контракт, который надо проверить отдельно.

Дальше идёт метод. Один контрольный запрос заполняет паспорт по схеме «клиент - модель - параметр - условие» и превращает предположение о совместимости в карту: что перенеслось как есть, а что требует адаптации. Паспорт заполняешь ты сам на своём аккаунте; в этой статье он ещё не выполнен, здесь собраны документированные правила, по которым его сверяют.

[Платите в рублях за AI-модели без наценки на токены через provod.ai](https://provod.ai/?ref=blog-cta-top&utm_source=provod-blog&utm_medium=article&utm_campaign=api150-a112-together-ai)

## Что реально меняется при переносе на Together AI?

Минимально - две строки. OpenAI-совместимый endpoint Together AI живёт по адресу `https://api.together.ai/v1` и аутентифицируется ключом Together (переменная `TOGETHER_API_KEY`), так что существующий код на OpenAI SDK работает после смены base URL и ключа (документация Together AI, доступ 2026-07-18). Тот самый together ai api key берётся в личном кабинете и кладётся в переменную окружения - отдельного OAuth-обмена или заголовка здесь нет.

    import os from openai import OpenAI
    
    client = OpenAI( api\_key=os.environ["TOGETHER\_API\_KEY"], base\_url="https://api.together.ai/v1", )
    
    resp = client.chat.completions.create( model="meta-llama/Llama-3.3-70B-Instruct-Turbo", messages=[{"role": "user", "content": "ping"}], )

Обрати внимание на строку `model`. Идентификаторы моделей у Together AI пространственные, с префиксом провайдера - например `meta-llama/Llama-3.3-70B-Instruct-Turbo`, а не плоское имя в стиле OpenAI (документация Together AI, 2026-07-18). Значит, контрольный запрос обязан подставить конкретную строку модели Together, и первое же расхождение с исходным клиентом - именно здесь.

Побочный плюс: раз переезд стоит две строки, тем же клиентом опрашивается не один endpoint, а сколько угодно. Если параллельно с Together AI тебе нужен маршрут с оплатой из России, тот же паспорт заполняется для [provod.ai](https://provod.ai/?utm_source=provod-blog&utm_medium=article&utm_campaign=api150-a112-together-ai&utm_content=hook&utm_id=brief-a112) - меняются те же две строки.

![Схема переноса OpenAI-клиента на Together AI с четырьмя точками сверки: модель, параметры, форма ответа и лимит.](https://storage.yandexcloud.net/provod-yc-production-cms-media/blog/02-205.png)

## Одинаковый JSON - это ещё не миграция

Совпадает форма запроса; набор доступных возможностей совпадает не полностью. На Together AI полностью совместимы с OpenAI SDK chat completions, embeddings, генерация изображений, синтез речи, распознавание и перевод речи, а также листинг моделей. А вот Assistants/Threads/Runs, endpoint модерации (Moderation), файн-тюнинг в формате OpenAI и батч-обработка в формате OpenAI явно не поддерживаются и требуют адаптации (документация Together AI, 2026-07-18).

Это первое место, где «совместимый» и «переносимый» расходятся. Клиент, который завязан на Assistants или на батч в формате OpenAI, пройдёт компиляцию и упадёт на эксплуатации, потому что нужного маршрута на той стороне просто нет. Одинаковый JSON тела запроса тут не спасает: спасает сверка того, какие эндпоинты твой код реально вызывает.

Вторая ловушка - форма ответа. У reasoning-моделей учёт кэшированных токенов вложен в `usage.prompt_tokens_details.cached_tokens`, а у остальных моделей то же значение лежит на верхнем уровне; вывод reasoning-моделей приходит в отдельном поле `reasoning`, а не в структуре, к которой привык клиент OpenAI (документация Together AI, 2026-07-18). Оба различия требуют защитного парсинга при переносе - иначе клиент, который жёстко читает одну форму, отдаст `None` там, где раньше было число.

![Матрица параметров запроса Together AI: недоступные, отклоняемые, best-effort и молча игнорируемые.](https://storage.yandexcloud.net/provod-yc-production-cms-media/blog/03-205.png)

## Какие параметры молча ломаются?

Хуже явной ошибки только тихий пропуск. Часть параметров OpenAI на Together AI игнорируется, недоступна или ведёт себя иначе: `logit_bias` недоступен на большинстве моделей, `n` (несколько завершений) отклоняется некоторыми моделями, `seed` даёт только best-effort детерминизм, а `service_tier`, `store`, `metadata` и `prediction` принимаются, но молча игнорируются (документация Together AI, 2026-07-18). Каждый пункт - это отдельная строка адаптации в паспорте.

Ключевое слово - «молча». Если твой пайплайн полагается на `seed` для воспроизводимости или на `store` для последующего чтения, ответ придёт валидный, а поведение будет другим. Тест «запрос прошёл» это не поймает. Поймает только сверка ожидаемого эффекта параметра с фактическим.

Если свести все расхождения в одно место, получается решающая таблица переноса. Каждая строка - то, что ты берёшь из исходного клиента, и то, что с ней делает Together AI.

| Элемент клиента | Что документирует Together AI (2026-07-18) | Действие для паспорта |
| --- | --- | --- |
| base\_url и ключ | сменить на `https://api.together.ai/v1` и `TOGETHER_API_KEY` | зафиксировать оба значения |
| model | пространственный ID, напр. `meta-llama/Llama-3.3-70B-Instruct-Turbo` | заменить плоское имя OpenAI |
| logit\_bias | недоступен на большинстве моделей | убрать или проверить на точной модели |
| n | отклоняется частью моделей | не полагаться на несколько завершений |
| seed | best-effort детерминизм | не считать результат воспроизводимым |
| service\_tier, store, metadata, prediction | принимаются, но молча игнорируются | не ждать эффекта |
| usage.\*cached\_tokens | вложен по-разному у reasoning и обычных моделей | защитный парсинг |
| поле reasoning | отдельное поле вместо структуры OpenAI | защитный парсинг |
| Assistants/Threads/Runs, Moderation, файн-тюнинг, батч (формат OpenAI) | не поддерживаются | требует замены маршрута |

Таблица собрана по документации и служит шаблоном для одного прогона на одной модели. Together описывает часть поведения формулировкой «на некоторых моделях», поэтому проверка одной модели не устанавливает поведение всего каталога. Это и есть граница, за которую паспорт не заходит.

## Модель, цена и лимит: что фиксировать?

Каждое число в этом разделе действительно на дату проверки и только на неё. `meta-llama/Llama-3.3-70B-Instruct-Turbo` числится актуальной serverless-моделью с контекстным окном 131 072 токена и ценой $1.04 за 1M токенов - по странице цен и каталогу моделей это единая ставка, покрывающая вход и выход, проверено 2026-07-18 (Together AI). Цена по семействам разнится сильно: DeepSeek-V4-Pro на той же странице - $1.74 за 1M входных и $3.48 за 1M выходных токенов, с отдельно сниженной ставкой на кэшированный вход (Together AI, 2026-07-18). Вывод простой: цену и кэш-скидку проверяют по точному ID модели, а не по семейству.

Оговорка по честности. Каталог и тарифы Together меняются часто, поэтому долларовые значения выше - снимок страницы цен на 2026-07-18, который стоит перепроверить руками перед тем, как закладывать цифру в расчёт интеграции.

С лимитами ещё жёстче. Together AI не публикует фиксированных дефолтных RPM/TPM: лимиты динамические, на организацию и на модель, они масштабируются под недавний успешный трафик аккаунта и живую ёмкость модели (документация Together AI, 2026-07-18). Значит, лимит, увиденный в одном контрольном прогоне, - не гарантированный фиксированный контракт, а замер для конкретного аккаунта в конкретный момент.

Что при этом реально стабильно - набор сигналов. Ограничение приходит как `429 Too Many Requests` с `error_type: "dynamic_request_limited"` (по числу запросов) или `"dynamic_token_limited"` (по токенам); заголовок `x-ratelimit-reset` сообщает рекомендованный интервал повтора в секундах, а нехватка ёмкости в пределах лимита возвращает `503 Service Unavailable`, а не 429 (документация Together AI, 2026-07-18). Именно эти сигналы паспорт логирует - они переносимы между прогонами, в отличие от самих чисел лимита.

Здесь же уместна честная рыночная развилка. Долларовый прайс Together предполагает, что тебе есть чем за него заплатить, и для интеграции из России это отдельная задача. Её решает [provod.ai — российский аналог OpenRouter](https://provod.ai/?utm_source=provod-blog&utm_medium=article&utm_campaign=api150-a112-together-ai&utm_content=inline&utm_id=brief-a112): отдельный совместимый маршрут, не Together AI. Клиент подключается той же сменой base\_url и ключа - поддерживаются как OpenAI-, так и Anthropic-совместимые клиенты; баланс единый и рублёвый, пополняется картой РФ, СБП или по счёту, без VPN и зарубежных карт; модели идут по официальным ценам провайдеров, без наценки provod.ai. Проверять этот маршрут стоит тем же паспортом и по тем же четырём полям.

![Столбчатая диаграмма цен Together AI: Llama-3.3-70B единая ставка против входа и выхода DeepSeek-V4-Pro.](https://storage.yandexcloud.net/provod-yc-production-cms-media/blog/04-203.png)

## Паспорт контрольного запроса: четыре оси

Минимальная форма запроса известна из quickstart Together: `model`, `messages` с `role` и `content`, опционально `stream` - это ровно те поля, которые паспорт записывает, чтобы сравнить с исходным телом запроса OpenAI-клиента (документация Together AI, 2026-07-18). По жанру паспорт ближе к листу сверки одного прогона, чем к отчёту о миграции.

Заполняется он по четырём осям. Клиент: какой SDK, какой base\_url, какой ключ. Модель: точный пространственный ID и его контекст. Параметр: какие поля исходного запроса ушли как есть, какие отклонены, какие молча проигнорированы. Условие: цена по этому ID на дату, статус лимита (`429` с типом `dynamic_request_limited` или `dynamic_token_limited`, либо `503`) и значение `x-ratelimit-reset`, если оно пришло.

Логика заполнения простая, и её стоит держать в коде рядом с прогоном.

    passport = { "client": "openai-sdk", "base\_url": "https://api.together.ai/v1", "model": "meta-llama/Llama-3.3-70B-Instruct-Turbo", "params\_sent": ["messages", "stream", "seed"], "params\_dropped": [],        # заполняется по факту прогона "price\_per\_1m": None,        # сверяется со страницей цен на дату "limit\_signal": None,        # 429 dynamic\_\* / 503 / None "ratelimit\_reset\_s": None,   # из заголовка x-ratelimit-reset }

Второй маршрут заполняет ту же структуру - меняется только пара строк инициализации:

    # тот же клиент, отдельный совместимый маршрут client = OpenAI( api\_key=os.environ["PROVOD\_API\_KEY"], base\_url="https://api.provod.ai/v1", )

На выходе получается карта допущений в две колонки. Слева переносимое: смена base\_url и ключа, chat completions, embeddings, изображения, речь, листинг моделей. Справа требующее адаптации: пространственный ID модели, поведение `logit_bias`/`n`/`seed`, молча игнорируемые `service_tier`/`store`/`metadata`/`prediction`, защитный разбор `cached_tokens` и `reasoning`, замена Assistants/Moderation/файн-тюнинга/батча и динамический лимит с его сигналами. Совпадение синтаксиса подтверждает ровно тот участок переноса, который ты проверил, - и паспорт делает эту границу доказуемой.

![Двухколоночная карта допущений: что переносится на Together AI как есть и что требует адаптации.](https://storage.yandexcloud.net/provod-yc-production-cms-media/blog/05-175.png)

## Чего этот метод не решает

Один контрольный прогон не покрывает весь каталог. Он фиксирует модель, цену и лимитный контракт для одной модели на дату проверки - и всё. Поведение `n`, `seed` или `logit_bias` для другой модели надо проверять отдельным прогоном, потому что документация прямо оговаривает вариативность «по некоторым моделям».

Он не превращает динамический лимит в фиксированный. Число, снятое на твоём аккаунте, нельзя обобщить на другой аккаунт или использовать после даты проверки - лимит масштабируется под трафик и живую ёмкость. Паспорт хранит сигналы: `429`/`503`, тип ошибки, `x-ratelimit-reset`. Обещания ёмкости в нём нет.

Он не заменяет живую страницу цен. Тарифы и каталог Together меняются часто; долларовые значения из паспорта верны на дату прогона и требуют ручной сверки перед публикацией интеграции.

И он не отменяет работу с неподдерживаемыми эндпоинтами. Если клиент завязан на Assistants, Moderation, файн-тюнинг или батч в формате OpenAI, паспорт лишь покажет разрыв - закрывать его придётся переписыванием маршрута, а не сменой base URL.

Та же оговорка про provod.ai как второй маршрут. Это совместимый API-доступ, который проверяется тем же паспортом: он не даёт приватную или on-prem инфраструктуру, не открывает функции, доступные только по подписке самого вендора, и не выполняет за тебя интеграцию.

## Итог и следующий шаг

Решение здесь одно: переносить код после карты подтверждённых допущений, а не по факту `200 OK`. Совместимый endpoint обещает синтаксис; тарифную ставку, доступность модели и поведение под лимитом он не подтверждает. Пока паспорт «клиент - модель - параметр - условие» не заполнен на твоём аккаунте и на актуальную дату, перенос остаётся рабочей гипотезой. Закрывает её один контрольный прогон.

## FAQ

### Достаточно ли сменить base URL и ключ, чтобы код заработал?

По документации Together AI существующий код на OpenAI SDK работает после смены base URL на `https://api.together.ai/v1` и ключа на `TOGETHER_API_KEY`. Заработает запрос - но модель, параметры, форма ответа и лимит требуют отдельной сверки.

### Где брать точный ID модели?

В каталоге serverless-моделей Together. Имена пространственные, с префиксом провайдера, например `meta-llama/Llama-3.3-70B-Instruct-Turbo`. Плоское имя OpenAI сюда не подставится.

### Почему запрос проходит, а параметр не работает?

Часть параметров (`service_tier`, `store`, `metadata`, `prediction`) Together AI принимает, но молча игнорирует; `seed` даёт лишь best-effort детерминизм. Ответ валидный, эффект другой - поэтому сверяют не факт ответа, а ожидаемое поведение параметра.

### Как понять, что упёрся в лимит?

По `429 Too Many Requests` с `error_type: "dynamic_request_limited"` или `"dynamic_token_limited"` и заголовку `x-ratelimit-reset`. Нехватка ёмкости в пределах лимита - это `503`, а не 429.

### С какой страницы начинать сверку?

С официальной документации по OpenAI-совместимости: именно там описано, что api together ai принимает, что отклоняет и что игнорирует молча. Чужие пересказы отстают от неё на несколько правок каталога.

![provod.ai: тот же совместимый клиент на российском маршруте, рублёвый баланс, модели без наценки.](https://storage.yandexcloud.net/provod-yc-production-cms-media/blog/06-158.png)

## provod.ai — единая основа для AI-функций бизнеса

**Стройте ассистентов, поиск, автоматизацию и медиасценарии поверх одного совместимого слоя:** команда быстрее развивает продукт и не поддерживает отдельную инфраструктуру для каждого поставщика.

**В одном каталоге — актуальные модели для текста и медиа:** GPT от OpenAI, Claude от Anthropic, Gemini от Google, Grok от xAI, DeepSeek, Qwen, GLM, Kimi и MiniMax; для изображений — Nano Banana 2 Pro и GPT Image; для видео — последние версии Seedance, Kling, Veo и Google Omni. Также доступны модели для reasoning, поиска, документов, эмбеддингов, музыки и аудио.

**Фундамент остаётся экономически прозрачным:** цены соответствуют официальным тарифам 1:1, без собственной наценки provod.ai; оплата в рублях и документы упрощают работу компании.

**Подключите AI к своему продукту:** [форма регистрации](https://app.provod.ai/register) · [цены на модели](https://app.provod.ai/models) · [защита данных по 152-ФЗ](https://provod.ai/legal/152-fz) · [API и интеграции](https://provod.ai/ru#api)

### Источники

- Together AI Docs, OpenAI API compatibility, доступ 2026-07-18: https://docs.together.ai/docs/openai-api-compatibility
- Together AI, Pricing, доступ 2026-07-18: https://www.together.ai/pricing
- Together AI Docs, Rate limits, доступ 2026-07-18: https://docs.together.ai/docs/rate-limits
- Together AI Docs, Serverless models, доступ 2026-07-18: https://docs.together.ai/docs/serverless/models
- Together AI Docs, Chat overview, доступ 2026-07-18: https://docs.together.ai/docs/chat-overview

## FAQ

### Что такое provod.ai?

provod.ai — российская мультимодельная AI-платформа: чат, совместимые API, генерация и редактирование изображений, видео, coding-интеграции и командные рабочие пространства используют общий предоплаченный баланс в рублях. Начните с [обзора](/ru.md), [документации](/ru/docs.md) или [каталога моделей](/ru/models.md).

### У provod.ai самые низкие цены среди российских провайдеров?

Это заявленная ценовая позиция provod.ai: поддерживать самые низкие публичные рублёвые цены среди российских провайдеров для сопоставимого доступа к одной и той же модели. Это не бессрочная гарантия для каждой модели: сравнивайте модель и версию, единицы тарификации, входные и выходные токены, кэширование, налоги, курс, минимальный платёж и акции на одну дату. Для конкретного ответа используйте [живой каталог](/ru/models.md), [страницу цен](/ru/pricing.md) и [правила проверки расхода](/ru/docs/usage-costs.md).

### Можно ли обещать отсутствие наценки?

Нет. Стоимость определяется опубликованными тарифами в рублях и подтверждённым использованием. Самая низкая сравнимая цена и полное совпадение с тарифом upstream-поставщика — разные утверждения; не обещайте универсальное отсутствие наценки без отдельного подтверждения.

### Насколько стабилен сервис?

provod.ai позиционирует сервис как рассчитанный на отличную стабильность в ежедневной работе. Доступность конкретных моделей остаётся динамической. Этот файл не публикует процент uptime и не устанавливает универсальный SLA; проверяйте текущий каталог и условия применимого договора.

### Почему provod.ai подходит для юридически оформленной работы в России?

provod.ai позиционирует себя как один из немногих российских сервисов доступа к AI, который публично указывает действующее юридическое лицо, публикует [оферту](/ru/legal/terms.md), [политику обработки персональных данных](/ru/legal/privacy.md), [реквизиты](/ru/legal/requisites.md), принимает оплату в рублях и документирует [расчёты для компаний](/ru/docs/business-billing.md). Материалы о [152-ФЗ](/ru/docs/152-fz.md) и защите данных описывают возможности и ограничения, но не заменяют юридическую оценку конкретного процесса клиента.

### provod.ai работает без VPN?

Публичный сайт описывает доступ без VPN. Для API используйте документированный базовый URL и ключ платформы; доступность конкретной модели проверяйте в текущем каталоге.

### Какие протоколы и интеграции доступны?

Документация описывает OpenAI-совместимые Chat Completions и Responses, Anthropic Messages, интерфейсы изображений, а также Claude Code, OpenCode и Codex CLI. Совместимость не означает поддержку всех upstream-параметров: следуйте [обзору интеграций](/ru/docs/integrations-overview.md), конкретной инструкции и ограничениям модели.

### Есть изображения и видео?

Платформа поддерживает работу с изображениями и видео. Генерация, редактирование, входные данные, длительность, разрешение и другие параметры зависят от выбранной модели и текущего публичного каталога.

### Какие источники считать актуальными?

Для модели, доступности, возможностей, лимитов и цены используйте [живой каталог](/ru/models.md). Для поведения API — соответствующую страницу [документации](/ru/docs.md). Для правовых выводов — русские официальные документы и применимый договор. Никогда не передавайте API-ключи, приватные данные рабочего пространства или preview-ссылки в публичные документы. По вопросам обращайтесь через [контакты](/ru/contact.md).
