API
Хаб совместим с API OpenAI и Anthropic. Подойдут официальные SDK, AI SDK от Vercel и любые клиенты, в которых можно указать базовый адрес и ключ.
Адреса и авторизация
Ключ хаба передаётся так же, как ключ самого провайдера. Ключи начинаются с sk-ci2-.
| Протокол | Базовый адрес | Ключ |
|---|---|---|
| OpenAI: Chat Completions и Responses | https://hub.coreinfra.ai/openai/api/v1 | Authorization: Bearer |
| Anthropic: Messages | https://hub.coreinfra.ai/anthropic/api | x-api-key |
В инструкциях для агентов используются свои адреса: https://hub.coreinfra.ai/codex/api/v1 для Codex и https://hub.coreinfra.ai/claude/api для Claude Code. Они отдают агентам каталог моделей хаба в том виде, в котором его ждёт агент.
Эндпоинты
| Метод | Путь | Назначение |
|---|---|---|
| POST | /openai/api/v1/chat/completions | Chat Completions — диалог с моделью, в том числе потоком. |
| POST | /openai/api/v1/responses | Responses API — протокол Codex и современных SDK OpenAI. |
| GET | /openai/api/v1/models | Список моделей, доступных в протоколе OpenAI. |
| POST | /anthropic/api/v1/messages | Messages API — протокол Claude Code и SDK Anthropic. |
| POST | /anthropic/api/v1/messages/count_tokens | Подсчёт токенов во входных данных до запроса к модели. |
| GET | /anthropic/api/v1/models | Список моделей, доступных в протоколе Anthropic. |
Потоковые ответы (stream) работают так же, как у провайдеров. В протоколе Anthropic доступны модели, для которых хаб умеет считать токены: сейчас это все, кроме моделей z.ai и Moonshot AI.
Примеры
- Responses · cURL
- Responses · Python
- Messages · cURL
- Модели · cURL
curl https://hub.coreinfra.ai/openai/api/v1/responses \
-H "Authorization: Bearer $COREINFRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-sol",
"input": "Объясни кэш промптов в двух предложениях."
}'
import os
from openai import OpenAI
client = OpenAI(
base_url="https://hub.coreinfra.ai/openai/api/v1",
api_key=os.environ["COREINFRA_API_KEY"],
)
stream = client.responses.create(
model="gpt-6-sol",
input="Объясни кэш промптов в двух предложениях.",
stream=True,
)
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
curl https://hub.coreinfra.ai/anthropic/api/v1/messages \
-H "x-api-key: $COREINFRA_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"messages": [{ "role": "user", "content": "Объясни кэш промптов в двух предложениях." }]
}'
curl https://hub.coreinfra.ai/openai/api/v1/models \
-H "Authorization: Bearer $COREINFRA_API_KEY"
Конвертация протоколов
Codex говорит только на Responses API, Claude Code — только на Messages API, а большинство провайдеров поддерживают Chat Completions. Каждая модель принадлежит одному провайдеру, и если клиент обращается к ней по другому протоколу, хаб переводит запрос, ответ и поток событий между Messages API, Responses API и Chat Completions.
Если у модели есть прямой маршрут для протокола клиента, запрос идёт без конвертации. При переводе могут теряться поля, которых нет в протоколе провайдера.
Изображения
Изображения во входных данных принимаются только встроенными в запрос в base64: в Messages API — источником типа base64, в Chat Completions и Responses — адресом вида data:image/png;base64,…. Ссылки на внешние изображения и file_id провайдеров отклоняются с ошибкой 400.
Хаб — шлюз к моделям и должен видеть всё, что получает модель. Внешняя ссылка — канал, по которому провайдер скачал бы данные мимо хаба. Документы и другие файлы это правило не затрагивает.
Ошибки
Ошибки хаба приходят с кодом 400 и текстом для человека — агенты показывают его как есть. Программам удобнее смотреть на заголовок x-coreinfra-status, а в x-coreinfra-action-url хаб кладёт ссылку на страницу, где проблему можно решить.
| Ситуация | Текст ошибки | x-coreinfra-status |
|---|---|---|
| На балансе недостаточно денег | Пополните баланс на CoreInfra AI Hub. Баланс: …, зарезервировано: …, доступно: … | payment-required |
| Исчерпан недельный лимит | Лимит расходов хаба исчерпан | cost-limit-reached |
| Модель запрещена в настройках хаба | Модель … заблокирована настройками хаба | — |
| Модели нет в хабе | Модель «…» не поддерживается CoreInfra AI Hub | — |
| Ключ не передан или недействителен | Токен отсутствует или недействителен | — |
