Chat Completions
POST /v1/chat/completions приймає розмову та повертає наступне повідомлення моделі у форматі OpenAI Chat Completions. Використовуйте його з будь-якого SDK від OpenAI або через звичайний HTTP; ця сторінка — довідник по полях.
POST https://api.shannon-ai.com/v1/chat/completions
Найменший запит — це id моделі та одне повідомлення користувача.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.chat.completions.create(
model="shannon-3",
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
print(response.choices[0].message.content) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.chat.completions.create({
model: "shannon-3",
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
console.log(response.choices[0].message.content); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [{"role": "user", "content": "Say hello in one sentence."}]
}' Відповідь — це один JSON-об'єкт:
{
"id": "chatcmpl-5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
"object": "chat.completion",
"created": 1791625200,
"model": "shannon-3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello, it is good to meet you.",
"reasoning_content": "The user wants a greeting in one sentence. Keep it short and friendly."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1184,
"completion_tokens": 46,
"total_tokens": 1230
}
} Заголовки
Заголовки запиту
| Заголовок | Значення | Опис |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Ваш API-ключ. Замість нього на кожному ендпоінті приймається x-api-key: YOUR_API_KEY. |
Content-Type | application/json | Обов'язковий. Будь-яке інше значення повертає 415. |
x-request-id | Необов'язковий. Ваш власний id запиту. Він повертається у відповіді без змін. |
Заголовки відповіді
| Заголовок | Опис |
|---|---|
x-request-id | У кожній відповіді, включно з помилками та стрімами: значення, яке ви надіслали, або 12 шістнадцяткових символів, якщо ви нічого не надсилали. Наводьте його, повідомляючи про проблему. |
content-type | application/json або text/event-stream, коли stream дорівнює true. |
Поля запиту
Обов'язкове лише messages. Стовпець Застосовують називає моделі, на яких поле змінює відповідь. Хостовані open-weight моделі — це дванадцять id зі списку моделей; сімейство Shannon 3 — це shannon-3, shannon-3-pro, shannon-3.1 і shannon-3.1-pro. Моделі та ціни
| Поле | Тип | За замовчуванням | Опис | Застосовують |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Модель, що відповідає: id зі списку моделей. Надсилайте його в кожному запиті. Регістр не враховується. Id, який не опубліковано, повертає 400 unknown model. | Усі моделі |
messages | array | Обов'язкове. Розмова, найстаріше повідомлення першим. Див. нижче «Повідомлення». | Усі моделі | |
stream | boolean | false | true надсилає відповідь як server-sent events у міру її написання. | Усі моделі |
max_tokens | integer | 4096 | Верхня межа відповіді в токенах. Значення поза межами від 1 до 65,536 зводиться до цього діапазону. Це також сума, яку резервують на вашому балансі, поки виконується запит. Див. нижче «Довжина виводу». | Хостовані open-weight моделі, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Те саме, що й max_tokens. Якщо надіслано обидва, використовується max_tokens. | Хостовані open-weight моделі, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Температура семплювання. На хостованих open-weight моделях значення за замовчуванням 1, а значення утримуються між 0 і 2. | Хостовані open-weight моделі, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Nucleus-семплювання. Значення утримуються між 0 і 1. | Хостовані open-weight моделі |
seed | integer | Seed семплера, будь-яке ціле число. Без нього seed виводиться з моделі та розмови, тож той самий запит, надісланий двічі, використовує той самий seed. | Хостовані open-weight моделі | |
stop | string | array | Рядок або масив рядків. Використовується до 4. Відповідь закінчується перед першим із тих, що з'явилися; сам стоп-текст не повертається. | Хостовані open-weight моделі | |
reasoning_effort | string | high | Скільки модель міркує перед відповіддю: off, low, medium або high. none і minimal означають off, default означає medium, max означає high. Будь-яке інше значення повертає 400. | Хостовані open-weight моделі |
reasoning | object | Те саме налаштування в об'єктній формі: {"effort": "low"}. Якщо надіслано обидва, використовується reasoning_effort. | Хостовані open-weight моделі | |
tools | array | Функції, які модель може викликати, кожна як {"type": "function", "function": {"name", "description", "parameters"}}. Виклики моделі повертаються в tool_calls; ваш код їх виконує. | Усі моделі | |
tool_choice | string | object | auto | "auto" дозволяє моделі вирішувати. "required" змушує її викликати інструмент. {"type": "function", "function": {"name": "…"}} змушує викликати саме цей інструмент. | Хостовані open-weight моделі |
response_format | object | {"type": "json_object"} для JSON-відповіді або {"type": "json_schema", "json_schema": {…}} для відповіді за вашою схемою. | Усі рівні Shannon; хостовані open-weight моделі, як указано для кожного id | |
web_search | boolean | false | true дозволяє моделі шукати в вебі перед відповіддю. | shannon-1.6-*, shannon-2-*, сімейство Shannon 3 |
Інші поля OpenAI, як-от n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store і prompt_cache_key, приймаються, щоб наявний клієнтський код працював без змін. Вони не змінюють відповідь: завжди є один варіант (choice), а стрім завжди завершується usage.
Поле з неправильним типом JSON, наприклад "max_tokens": "100", повертає 422. Запит без messages теж.
Інструменти, структурований вивід, міркування та веб-пошук мають власні сторінки: Виклик функцій, Структуровані відповіді, Зусилля міркування, Вбудований веб‑пошук.
Запит із параметрами
Цей запит задає системне повідомлення, поля семплювання та зусилля міркування. Він використовує хостовану open-weight модель, яка застосовує все це.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.chat.completions.create(
model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
messages=[
{"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
{"role": "user", "content": "Why is the sky blue?"},
],
max_tokens=512,
temperature=0.3,
top_p=0.9,
seed=7,
stop=["\n\n"],
reasoning_effort="low",
)
message = response.choices[0].message
print(message.reasoning_content) # the reasoning
print(message.content) # the answer
print(response.usage) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.chat.completions.create({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
messages: [
{ role: "system", content: "You are a physics teacher. Answer in two sentences." },
{ role: "user", content: "Why is the sky blue?" },
],
max_tokens: 512,
temperature: 0.3,
top_p: 0.9,
seed: 7,
stop: ["\n\n"],
reasoning_effort: "low",
});
const message = response.choices[0].message;
console.log(message.reasoning_content); // the reasoning
console.log(message.content); // the answer
console.log(response.usage); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"messages": [
{"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
{"role": "user", "content": "Why is the sky blue?"}
],
"max_tokens": 512,
"temperature": 0.3,
"top_p": 0.9,
"seed": 7,
"stop": ["\n\n"],
"reasoning_effort": "low"
}' Відповідь має ту саму форму, що й вище. Її usage на хостованих open-weight моделях додає дві деталі: токени промпту, прочитані з кешу, та токени, витрачені на міркування.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Довжина виводу
max_tokens робить дві речі. По-перше, це кількість токенів, які резервуються на вашому балансі на початку запиту. Коли відповідь завершено, цю суму замінюють токени, фактично використані запитом. Якщо max_tokens більше за те, що залишилося на вашому балансі, запит повертає 429 Quota exceeded, навіть якщо сама відповідь вмістилася б. Надішліть менше max_tokens, щоб зарезервувати менше.
shannon-coder-1 на цьому ендпоінті рахується інакше: кожен запит — це один із викликів Shannon Coder за вашим планом, і для нього токени не резервуються. Ліміти та баланс
По-друге, він обмежує довжину відповіді на цих моделях:
| Моделі | Що робить max_tokens |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Відповідь зупиняється, коли досягає ліміту. Тоді стрім завершується з finish_reason length. |
| Хостовані open-weight моделі | Текст відповіді зупиняється на max_tokens. Міркування в нього не зараховуються. Значення менші за 256 діють як 256. |
Без max_tokens або max_completion_tokens значення дорівнює 4,096. На shannon-coder-1 — 65,536.
Повідомлення
Кожне повідомлення — це об'єкт із role і content. content — це рядок або масив частин, коли повідомлення містить більше, ніж текст.
| Роль | Опис | Застосовують |
|---|---|---|
system | Інструкції для моделі. Розміщуйте їх першими. На рівнях Shannon використовується перше повідомлення system. | Хостовані open-weight моделі, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Читається як system. | Хостовані open-weight моделі |
user | Те, про що ви питаєте. На рівнях Shannon останнє повідомлення user — це промпт, а повідомлення перед ним — історія. | Усі моделі |
assistant | Попередні відповіді моделі. Зберігайте її tool_calls, коли надсилаєте після них результат інструмента. | Усі моделі |
tool | Результат виклику інструмента: tool_call_id містить id виклику, а content — результат як рядок. | Усі моделі |
Для id із сімейства Shannon 3 інструкції, які мають виконуватися, розміщуйте в повідомленні user.
На рівнях Shannon запит без тексту користувача й без tools повертає 400 No user message provided.
Частини вмісту
| Частина | Опис | Доступно на |
|---|---|---|
{"type": "text", "text": "…"} | Звичайний текст. | Усі моделі |
{"type": "image_url", "image_url": {"url": "…"}} | Зображення як URL data: із вмістом base64 або як URL http(s). | Сімейство Shannon 3, shannon-1.6-lite, shannon-1.6-pro і хостовані open-weight моделі, що підтримують вхідні зображення |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Документ (PDF, Word, PowerPoint або Excel), у base64 або за URL. | Сімейство Shannon 3 |
Розміри, ліміти та повний перелік форм мають власну сторінку. Зображення та файли
Об'єкт відповіді
| Поле | Тип | Опис |
|---|---|---|
id | string | chatcmpl-, за яким ідуть 32 шістнадцяткові символи. |
object | string | Завжди chat.completion. |
created | integer | Час відповіді в секундах Unix. |
model | string | Канонічний id моделі, що відповіла. Його написання може відрізнятися від id, який ви надіслали. |
choices | array | Завжди рівно один варіант (choice) з index 0. |
choices[0].message.role | string | Завжди assistant. |
choices[0].message.content | string | null | Текст відповіді. З tool_calls на рівнях Shannon він дорівнює null; хостовані open-weight моделі можуть надсилати текст поряд із викликами. |
choices[0].message.reasoning_content | string | null | Міркування, які модель написала перед відповіддю, або null, якщо їх немає. |
choices[0].message.tool_calls | array | Є лише тоді, коли модель викликає інструменти. Кожен запис має id, type function і function з name та arguments як рядком JSON. |
choices[0].message.annotations | array | Лише в запиті з web_search: true, пошук якого щось знайшов. По одному url_citation на кожне джерело, яке називає позначка в content, з url, title, start_index і end_index (позиція позначки, порахована в символах, кінець не включено). |
choices[0].finish_reason | string | Чому відповідь закінчилася. Див. «Причини завершення». |
usage | object | Токени запиту. Див. «Використання». |
sources | array | Лише в запиті з web_search: true, пошук якого щось знайшов: результати, які отримала модель, кожен з index, title і url. [1] у відповіді — це запис з index 1. |
Причини завершення
| finish_reason | Опис |
|---|---|
stop | Модель завершила відповідь, або з'явився рядок stop. |
tool_calls | Модель викликає один чи кілька інструментів. Виконайте їх і надішліть результати в повідомленнях tool. |
length | Відповідь обрізано на межі виводу. Повідомляється у стрімах shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 і сімейства Shannon 3. |
Відповідь без стрімінгу повідомляє stop або tool_calls.
Використання
| Поле | Тип | Опис | Доступно на |
|---|---|---|---|
usage.prompt_tokens | integer | Вхідні токени. | Усі моделі |
usage.completion_tokens | integer | Вихідні токени: міркування, відповідь і виклики інструментів разом. | Усі моделі |
usage.total_tokens | integer | prompt_tokens плюс completion_tokens. | Усі моделі |
usage.prompt_tokens_details.cached_tokens | integer | Частина prompt_tokens, прочитана з кешу запитів. | Хостовані open-weight моделі |
usage.completion_tokens_details.reasoning_tokens | integer | Частина completion_tokens, витрачена на міркування. | Хостовані open-weight моделі |
На хостованих open-weight моделях prompt_tokens — це ваші повідомлення та визначення інструментів, пораховані власним токенізатором моделі, плюс токени будь-яких зображень. Ендпоінти підрахунку токенів повертають те саме число до надсилання. Підрахунок токенів
На рівнях Shannon prompt_tokens рахує все, що модель прочитала, щоб написати відповідь, тому воно більше за один лише текст ваших повідомлень.
Стрімінг
Якщо stream встановлено в true, відповідь надходить як події chat.completion.chunk і закінчується data: [DONE]. Останній фрагмент перед ним містить finish_reason і usage; stream_options не потрібні. Форми фрагментів, keep-alive рядки та помилки всередині стріму мають власну сторінку. Стримінг
Помилки
Помилка — це JSON-об'єкт із членом error. Перевірки виконуються в такому порядку: API-ключ, тіло запиту, id моделі, потім баланс. У таблиці наведено те, що цей ендпоінт повертає найчастіше. Повний перелік із вказівками, що повторювати, має окрему сторінку. Обробка помилок
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Статус | Тип | Повідомлення | Коли |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | API-ключ не надіслано, або ключ невідомий чи відкликаний. |
400 | invalid_request_error | unknown model: <id> | model не є опублікованим id. |
400 | invalid_request_error | No user message provided | Рівні Shannon: у запиті немає тексту користувача й немає tools. |
400 | invalid_request_error | <id> does not accept image input | Частину із зображенням надіслано до хостованої open-weight моделі без підтримки вхідних зображень. |
400 | invalid_request_error | <id> does not accept response_format | response_format надіслано до хостованої open-weight моделі без структурованого виводу. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning_effort містить значення поза списком. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages відсутнє або поле має неправильний тип JSON. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens більше за те, що залишилося на вашому балансі. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Захист від флуду: понад 120 запитів за одну хвилину з вашого облікового запису. |
500 | server_error | The model backend failed to answer. Please retry. | Модель не сформувала відповіді. Надішліть запит ще раз. |
502 | api_error | The model backend failed to answer. Please retry. | Те саме для сімейства Shannon 3 і хостованих open-weight моделей. |