LLM-шлюз
LLM-шлюз со встроенным слоем данных
Три базовых URL, один ключ, один баланс. Чат, изображения, видео и решающие модели — на вашем текущем SDK; поиск, документы и слайды — с того же баланса, от десятой доли официальной цены провайдера.
10%
Стартовая ставка относительно официальной цены API провайдера
5,000+
API в том же каталоге
У шлюза обычно одна поверхность. Здесь их три.
У них общий аккаунт, ключ и баланс, но отвечают они на разные вопросы и живут по разным базовым URL. Понять, какую именно вы вызываете, — это и есть вся суть.
| Поверхность | Базовый URL | Для чего |
|---|---|---|
| Модельный API | openapi.felo.ai/api/v1 · openapi.felo.ai/api | Прямой вызов языковой, графической, видео- или решающей модели |
| API данных | openapi.felo.ai/v1/beta | Вызов указанного стороннего поставщика данных или поиска |
| Felo APIs | openapi.felo.ai/v2 | Собственные процессы Felo: поиск, офис, извлечение, знания |
Один ключ покрывает все три. Пополнение покупает сервисные кредиты в долларах США, и вызов модели, вызов API данных и процесс Felo списываются из одного и того же — отдельный аккаунт на каждого поставщика не нужен.
Читать документациюШесть эндпоинтов, а не один
Всё под /api/v1 — это вызов модели, но вид модели определяет, какой эндпоинт может ответить; и каждый эндпоинт возвращает свой формат.
| Эндпоинт | Протокол | Возвращает |
|---|---|---|
POST /api/v1/chat/completions | OpenAI Chat Completions | Поток или один ответ |
POST /api/v1/responses | OpenAI Responses | Поток или один ответ |
POST /api/v1/messages | Anthropic Messages | Поток или один ответ |
POST /api/v1/images/generations | Конверт изображений OpenAI | task_id для опроса |
POST /api/v1/videos/generations | Конверт видео OpenAI | task_id для опроса |
POST /api/v1/decisions | Схема решений Felo | Типизированные ответы, без потока |
Три чат-поверхности — нативные реализации, а не слой трансляции: каждая отдаёт события в своём протоколе, так что поток разбирается точно так же, как сейчас.
Эндпоинт выбирают по виду модели, а не на глаз
У каждой модели в каталоге есть model_kind, и вид определяет, какой эндпоинт может её вызвать. Обнаружение бесплатно: читается локальный каталог.
# discover before you call — free, reads the catalog
GET /api/v1/models # every kind, with channels and rates
GET /api/v1/models/{model_id} # one model, in detail
GET /api/v1/videos/models # video_generation only
GET /api/v1/decisions/models # decisions only| model_kind | Эндпоинт |
|---|---|
chat | Responses, Chat Completions или Messages — что поддерживает модель |
image_generation | POST /api/v1/images/generations |
video_generation | POST /api/v1/videos/generations |
decisions | POST /api/v1/decisions |
Фильтр ?provider= оставляет одного поставщика, ?exclude_video_and_decisions=true — только чат и изображения. Наличие в каталоге не обещание: видео-модель не ответит на чат-запрос, а API вернёт model_kind_mismatch.
Маршрут по умолчанию или один заголовок для выбора провайдера
Одну модель могут отдавать несколько вышестоящих каналов, у каждого свой поставщик и опубликованная ставка. Без заголовка платформа выберет канал сама; с X-Felo-Channel выбираете вы.
# first channel only — no automatic fallback
X-Felo-Channel: claude-cc
X-Felo-Channel: claude-cc,anthropic # ordered selection, not a retry list- Значение — упорядоченный список публичных кодов каналов из
channels[].codeмодели, проверяемый в том порядке, в котором вы его записали. - Отправляется только группа поставщика первого канала, и платите вы по ставке этого канала.
- Автоматического переключения нет. Список каналов — это выбор, а не политика повторов: если поставщик отказал, повторите из своего приложения с другим каналом.
X-Felo-Channel работает на всех шести эндпоинтах генерации выше. На API данных и Felo APIs он не действует: там запрос идёт к поставщику, указанному в самом запросе.
Сколько на самом деле стоит вызов
Вызов модели тарифицируется по токенам — вход, выход, кэш — с множителем скидки канала. Ставки публикуются за 1 млн токенов для читаемости, но тарификация идёт с точностью до токена по текущему снимку цен, поэтому короткий запрос не округляется до миллиона.
- Ставки кэша применяются только когда ответ протокола сообщает об использовании кэша; модель без такой отчётности тарифицируется целиком по входной ставке.
- Веб-поиск, который модельный сервис реально выполнил и отразил в отчёте, стоит $0.01 за поиск.
- Некоторые модели тарифицируются ступенями по размеру промпта: Claude Haiku 5.5 стоит $0.10 на входе и $0.50 на выходе за 1 млн токенов до промпта в 100K токенов, а выше — $0.50 и $2.50 за весь запрос.
- Первое пополнение — от $1. Ни подписки, ни платы за рабочее место, ни минимальных обязательств: простаивающий ключ ничего не стоит.
Вызовы API данных и процессы Felo списываются с того же баланса, каждый по своей опубликованной базе: за успешный запрос, за возвращённый элемент или по фактическому расходу.
Ставки и кредитыДва ограничения, похожих внешне и совершенно разных
Кончились кредиты — 402 INSUFFICIENT_CREDITS. Слишком частые вызовы — 429 RATE_LIMITED. Ожидание снимает второе и никогда не снимает первое.
| Статус | Код | Что делать |
|---|---|---|
| 401 | UNAUTHORIZED | Исправить или перевыпустить ключ |
| 402 | INSUFFICIENT_CREDITS | Пополнить в разделе оплаты консоли и повторить |
| 404 | зависит от эндпоинта | Проверить ID модели, задачи или маршрута |
| 429 | RATE_LIMITED | Дождаться Retry-After и повторить |
| 5xx | CHAT_FAILED, SERVICE_UNAVAILABLE | Повторить с экспоненциальной задержкой и джиттером |
Сегодня документированные жёсткие лимиты есть только у /v2/chat. Вызовы моделей тоже могут ограничиваться на стороне апстрима, и это проявляется как 429 — читайте X-RateLimit-* и Retry-After, а не зашивайте числа. В каждом ответе есть request_id, а отправленный вами X-Request-Id возвращается обратно, так что логи сходятся.
Изображения и видео доделываются в фоне
Оба эндпоинта генерации возвращают task_id вместо результата. Отправить, опросить, забрать — и учтите: после создания задачи большинство отказов приходит как 200 с терминальным статусом, а не как HTTP-ошибка.
# submit, then poll the task
POST /api/v1/images/generations → task_id
GET /api/v1/images/generations/{id} → status, result
POST /api/v1/videos/generations → task_id
GET /api/v1/videos/generations/{id} → status, resultСначала статус, потом результат: failed и interrupted — тоже ответы, причина в error.message. Если 402 пришёл при отправке, задача не создавалась. SuperAgent работает иначе — отдаёт stream_key и присылает события по SSE, опрашивать нечего.
Смените базовый URL — клиент остаётся
Обоим SDK достаточно указать этот базовый URL, код менять не нужно. npx feloapi-cli setup запишет ту же конфигурацию для Claude Code и Codex.
# OpenAI SDK
base_url = "https://openapi.felo.ai/api/v1"
# Anthropic SDK — one level up; the SDK appends /v1/messages
base_url = "https://openapi.felo.ai/api"
# pin a provider (optional)
default_headers = {"X-Felo-Channel": "claude-cc"}ID моделей у разных поставщиков не совпадают. Выберите модель в каталоге до того, как переключите базовый URL, иначе первый же вызов вернёт 404.
Та половина, которую шлюз обычно оставляет вам
LLM-шлюз маршрутизирует вызовы моделей. Здесь тот же ключ достаёт до каталога на 5,000+ API — так что шаг поиска в вашем агенте, сделанные им слайды и прочитанный им документ списываются с одних и тех же кредитов, а не ещё с трёх поставщиков.
- Search
- PPT Task
- SuperAgent
- Web Fetch
- X Search
- Mindmap
- Landing Page Task
- LiveDoc
- YouTube Subtitling
Вызовы API данных идут под /v1/beta к именованным поставщикам — Tavily, Exa, Apollo и остальным из каталога — каждый по своей опубликованной базе.
Где шлюз заканчивается
- Автоматического переключения между каналами нет — повторы остаются на вашем приложении, и это осознанно.
- Наличие в каталоге не гарантирует совместимость: у каждого вида модели одна поверхность вызова.
- Документированного лимита запросов на вызовы моделей нет, но лимит вышестоящего провайдера действует.
- Кредиты предоплатные, невозвратные и не выводятся — пополняйте на сумму, которую собираетесь потратить.
Шесть вопросов об LLM-шлюзе
Что такое LLM-шлюз?
Один эндпоинт перед множеством поставщиков моделей: код обращается к одному базовому URL, одному ключу и одному балансу вместо дюжины SDK разных вендоров. AI-шлюз делает то же самое; этот ещё и продаёт API данных, нужные агенту.
Можно оставить свой OpenAI или Anthropic SDK?
Да. Chat Completions и Responses имеют форму OpenAI, Messages — нативный. Базовые URL: https://openapi.felo.ai/api/v1 и https://openapi.felo.ai/api — на уровень выше, потому что этот SDK сам дописывает /v1/messages.
Как понять, какую модель вызывать?
GET /api/v1/models перечисляет все виды с каналами и ставками; у видео- и решающих моделей свои списки. Смотрите model_kind и вызывайте соответствующий эндпоинт. Наличие в списке не значит, что модель принимает каждый эндпоинт.
Есть ли переключение при отказе провайдера?
Нет, и это осознанно. Список каналов — это выбор, а не политика повторов: отправляется только первый. Переключение должно жить в вашем приложении, где видны ошибка, бюджет и тот запасной вариант, который вам действительно нужен.
Сколько это стоит?
У каждой модели есть ставка Felo, начинающаяся с десятой доли официальной цены провайдера, а платите вы по ставке выбранного канала. Предоплата, оплата за вызов, первое пополнение от $1, без подписки.
Можно вызывать изображения, видео и API данных?
Да. Один ключ достаёт до чат-, графических, видео- и решающих моделей и каталога на 5,000+ API за /v1/beta — всё списывается с одного баланса.
Попробуйте на одном вызове
Создайте ключ, пополните баланс и направьте свой текущий SDK на один базовый URL.