Обзор
Карта API: все эндпоинты, как выглядят запрос и ошибка, как оплачиваются вызовы и что нужно знать, если вы пришли из SDK OpenAI или Anthropic.
Эндпоинты
Все эндпоинты находятся под одним базовым URL и обслуживаются по HTTPS.
https://api.shannon-ai.com | Эндпоинт | Формат | Для чего |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | Отправьте разговор, получите следующий ответ. Со стримингом или без. |
POST /v1/messages | Anthropic Messages | То же самое, в формах запроса и ответа SDK Anthropic. |
POST /v1/responses | OpenAI Responses | То же самое, в формах Responses. Эндпоинт не хранит состояние: отправляйте разговор с каждым запросом. |
GET /v1/models | Список моделей OpenAI | Список моделей с контекстным окном, ценами и возможностями. Ключ не нужен. |
POST /v1/tokenize | Shannon API | Подсчитайте токены текста или чат-запроса для размещенной модели с открытыми весами. Бесплатно. |
POST /v1/messages/count_tokens | Подсчет токенов Anthropic | Подсчитайте входные токены запроса Messages для размещенной модели с открытыми весами. Бесплатно. |
Три эндпоинта, производящие текст, обращаются к одним и тем же моделям. Выберите тот, чей формат уже использует ваш код.
Основы запросов
| Заголовок | Описание |
|---|---|
Authorization: Bearer <key> | Ваш API-ключ. Обязателен на каждом эндпоинте, кроме GET /v1/models, если вы не отправляете x-api-key. |
x-api-key: <key> | Тот же ключ в заголовке, который отправляют SDK Anthropic. Читается на каждом эндпоинте. |
Content-Type: application/json | Обязателен на каждом POST. Без него ответ — 415. |
x-request-id: <your id> | Необязателен. Ваш собственный id запроса; он возвращается в заголовке ответа x-request-id. Без него API создает id из 12 шестнадцатеричных символов. |
- Тело каждого
POST— один JSON-объект, до 32 MiB. - Поле, которое API не знает, не вызывает ошибки и ни на что не влияет. Запрос, написанный для другого провайдера, не падает из-за лишнего поля.
- На известное поле с неверным типом JSON или на отсутствие обязательного поля отвечают
422. На тело, не являющееся корректным JSON, отвечают400. model— один из id на странице «Модели и цены». Регистр не имеет значения.
Ответ — это JSON или поток server-sent events, если в запросе stream равен true. Каждый эндпоинт отвечает в своем формате. В каждом ответе есть заголовок x-request-id.
Какие проверки проходит запрос
Запрос проверяется в строгом порядке до запуска модели. Отвечает первая непройденная проверка, поэтому 401 пока ничего не говорит о теле.
| Проверяется, в таком порядке | Статус при сбое |
|---|---|
| API-ключ | 401 |
| Тело: размер, тип содержимого, JSON, типы полей | 413 · 415 · 400 · 422 |
| Id модели | 400 |
| Защита от флуда: 120 запросов в минуту на аккаунт | 429 |
| Баланс: бюджет вывода запроса должен поместиться | 429 |
Структура ошибки
Ошибка — это JSON-объект с error, который содержит type и message. /v1/messages оборачивает его так, как ожидают SDK Anthropic; все остальные пути используют форму OpenAI.
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} - Читайте
typeиmessage.codeиparamприсутствуют только в некоторых ошибках: считайте их необязательными.paramвсегда равенnull. - После начала потока статус уже
200. Тогда сбой приходит как фрейм ошибки внутри потока. - Каждый ответ с ошибкой содержит заголовок
x-request-id.
| Статус | Тип | Когда |
|---|---|---|
400 | invalid_request_error | Тело запроса не является корректным JSON, id модели неизвестен или модель не принимает отправленный вами вид ввода. |
401 | authentication_error | Ключ отсутствует или недействителен. |
404 | not_found_error | Такого пути нет. |
405 | api_error | Путь существует, но метод неверный. |
413 | invalid_request_error | Тело запроса больше 32 MiB. |
415 | invalid_request_error | Content-Type не равен application/json. |
422 | invalid_request_error | У поля неверный тип JSON или отсутствует обязательное поле. |
429 | rate_limit_error | Баланса не хватает на запрос, за минуту пришло больше 120 запросов, вызовы Shannon Coder в окне исчерпаны или модель занята. Сообщение указывает, что именно. |
5xx | api_error | Статус 500, 502, 503 или 504: запрос был корректным, но на него не удалось ответить. Отправьте его снова. У 500 может быть тип server_error. |
Биллинг и баланс
- На аккаунт приходится один баланс, и чат с API делят его: сначала лимит плана на сегодня, затем купленные кредиты. Собственной квоты у API нет.
- Запрос резервирует свой бюджет вывода (
max_tokens, по умолчанию 4,096), а затем с него списываются токены, которые он реально использовал, по цене модели. - Каждый ответ сообщает число токенов в
usage. Страница Keys & usage показывает баланс и стоимость каждого запроса. - Все запросы обслуживаются одинаково. Единственное ограничение частоты запросов — защита от флуда: 120 запросов в минуту на аккаунт. Параллельно отправленные запросы ждут в очереди.
Лимиты и баланс Модели и цены Keys & usage
Поля, зависящие от модели
Все модели принимают один и тот же запрос. Несколько полей действуют только на некоторых моделях; таблица указывает, где именно. Страницы эндпоинтов перечисляют все поля.
| Поле | Описание | Применяется на |
|---|---|---|
system | Инструкции для модели: сообщение system в Chat Completions, system в Messages, instructions в Responses. | Размещенные модели с открытыми весами, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
temperature | Температура сэмплирования. | Размещенные модели с открытыми весами, shannon-1.6-*, shannon-coder-1 |
top_p | Ядерное сэмплирование (nucleus sampling). | Размещенные модели с открытыми весами |
seed | Фиксированный seed для сэмплирования. | Размещенные модели с открытыми весами |
stop | До 4 стоп-последовательностей. | Размещенные модели с открытыми весами |
reasoning_effort | Сколько модель рассуждает перед ответом. reasoning.effort в Responses, thinking в Messages. | Размещенные модели с открытыми весами |
web_search | true позволяет модели искать в интернете для этого запроса. Поле этого API, в Chat Completions и Messages. | Модели Shannon, кроме shannon-coder-1 |
max_tokens | Бюджет вывода. На любой модели он задает сумму, резервируемую на вашем балансе. | Как предел длины ответа: размещенные модели с открытыми весами, shannon-1.6-*, shannon-coder-1 |
Если вы пришли из OpenAI SDK
- Задайте базовый URL
https://api.shannon-ai.com/v1, а в качестве ключа — свой ключ Shannon. Вызовы Chat Completions и Responses тогда работают с SDK как есть. modelдолжен быть id Shannon. На имя модели другого провайдера, напримерgpt-4o, отвечают400иunknown model.- Рассуждения приходят в отдельном поле:
reasoning_contentрядом сcontent, в сообщении и в дельтах потока. - Поток всегда передает
usageв последнем чанке вместе сfinish_reason. - Вызов инструмента в потоке приходит одним чанком с полной строкой
arguments. - В ответе один вариант.
- На пути API OpenAI, которых нет в таблице выше, например
/v1/embeddings, отвечают404.
Если вы пришли из Anthropic SDK
- Задайте базовый URL
https://api.shannon-ai.com, без/v1, а в качестве ключа — свой ключ Shannon. SDK отправит его какx-api-key. modelдолжен быть id Shannon.max_tokensв этом API необязателен. Значение по умолчанию — 4,096.- Ответ содержит блоки контента типов
thinking,textиtool_use. Первый блок не всегда текст: выбирайте блоки поtype. stop_reasonравенend_turnилиtool_use. Поток модели Shannon может также закончиться сmax_tokens.anthropic-versionиanthropic-betaпринимаются, поэтому SDK работает без изменений. Запросу они не нужны.- Ошибки на
/v1/messagesимеют форму Anthropic:{"type": "error", "error": {…}}.
Инструменты для кодинга, работающие с этими форматами, настраиваются так же: базовый URL, ключ и id Shannon в качестве модели. CLI-инструменты для кодинга