Преглед
Картата на 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 | Пребройте токените на текст или на чат заявка за хостван open-weight модел. Безплатно. |
POST /v1/messages/count_tokens | Броене на токени на Anthropic | Пребройте входните токени на заявка Messages за хостван open-weight модел. Безплатно. |
Трите ендпоинта, които създават текст, стигат до едни и същи модели. Изберете този, чийто формат вашият код вече използва.
Основи на заявките
| Хедър | Описание |
|---|---|
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 създава такова от 12 шестнадесетични знака. |
- Тялото на всяка
POSTзаявка е един JSON обект, до 32 MiB. - Поле, което API не познава, не причинява грешка и няма ефект. Заявка, написана за друг доставчик, не се проваля заради допълнително поле.
- Познато поле с грешен JSON тип или липсващо задължително поле получава отговор
422. Тяло, което не е валиден JSON, получава отговор400. modelе едно от id-тата на Models & pricing. Главните и малките букви нямат значение.
Отговорът е 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. | Хоствани open-weight модели, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
temperature | Температура на семплиране. | Хоствани open-weight модели, shannon-1.6-*, shannon-coder-1 |
top_p | Nucleus семплиране. | Хоствани open-weight модели |
seed | Фиксиран seed за семплирането. | Хоствани open-weight модели |
stop | До 4 последователности за спиране. | Хоствани open-weight модели |
reasoning_effort | Колко разсъждава моделът, преди да отговори. reasoning.effort при Responses, thinking при Messages. | Хоствани open-weight модели |
web_search | true позволява на модела да търси в мрежата за тази заявка. Поле на това API, при Chat Completions и Messages. | Моделите на Shannon, освен shannon-coder-1 |
max_tokens | Изходният бюджет. При всеки модел той задава сумата, резервирана от баланса Ви. | Като ограничение на дължината на отговора: хостваните open-weight модели, shannon-1.6-*, shannon-coder-1 |
Ако идвате от SDK на OpenAI
- Задайте базовия 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.
Ако идвате от SDK на Anthropic
- Задайте базовия 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 инструменти за програмиране