Chat Completions
POST /v1/chat/completions は会話を受け取り、OpenAI Chat Completions 形式でモデルの次のメッセージを返します。OpenAI SDK からでも、素の 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。stream が true の場合は text/event-stream。 |
リクエストフィールド
必須なのは messages だけです。適用モデル 列は、そのフィールドが応答に影響するモデルを示します。ホスト型オープンウェイトモデルとは、モデルリストにある十二個の 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 の範囲外の値は、その範囲内に丸められます。リクエストの実行中に残高から確保しておく量でもあります。下記の「出力の長さ」を参照してください。 | ホスト型オープンウェイトモデル、shannon-1.6-lite、shannon-1.6-pro、shannon-coder-1 |
max_completion_tokens | integer | max_tokens と同じです。両方を送信した場合は max_tokens が使われます。 | ホスト型オープンウェイトモデル、shannon-1.6-lite、shannon-1.6-pro、shannon-coder-1 | |
temperature | number | サンプリング温度。ホスト型オープンウェイトモデルではデフォルトが 1 で、値は 0〜2 の範囲に収められます。 | ホスト型オープンウェイトモデル、shannon-1.6-lite、shannon-1.6-pro、shannon-coder-1 | |
top_p | number | 0.95 | Nucleus サンプリング。値は 0〜1 の範囲に収められます。 | ホスト型オープンウェイトモデル |
seed | integer | サンプラーのシード(任意の整数)。指定しない場合、シードはモデルと会話から導出されるため、同じリクエストを二度送信すると同じシードが使われます。 | ホスト型オープンウェイトモデル | |
stop | string | array | 文字列、または文字列の配列。最大 4 個まで使われます。最初に現れたものの手前で回答が終了し、停止テキスト自体は返されません。 | ホスト型オープンウェイトモデル | |
reasoning_effort | string | high | モデルが回答する前にどれだけ推論するか:off、low、medium、high。none と minimal は off、default は medium、max は high を意味します。それ以外の値には 400 が返されます。 | ホスト型オープンウェイトモデル |
reasoning | object | 同じ設定のオブジェクト形式:{"effort": "low"}。両方を送信した場合は reasoning_effort が使われます。 | ホスト型オープンウェイトモデル | |
tools | array | モデルが呼び出せる関数。それぞれ {"type": "function", "function": {"name", "description", "parameters"}} の形式で指定します。モデルの呼び出しは tool_calls で返され、お使いのコードがそれを実行します。 | すべてのモデル | |
tool_choice | string | object | auto | "auto" はモデルに判断させます。"required" はツールを必ず呼び出させます。{"type": "function", "function": {"name": "…"}} は指定したツールを呼び出させます。 | ホスト型オープンウェイトモデル |
response_format | object | JSON の回答には {"type": "json_object"}、スキーマに従う回答には {"type": "json_schema", "json_schema": {…}} を指定します。 | すべての Shannon ティア。ホスト型オープンウェイトモデルは ID ごとの一覧のとおり | |
web_search | boolean | false | true を指定すると、モデルは回答前にウェブを検索できます。 | shannon-1.6-*、shannon-2-*、Shannon 3 ファミリー |
n、user、stream_options、parallel_tool_calls、presence_penalty、frequency_penalty、logit_bias、logprobs、metadata、store、prompt_cache_key など、その他の OpenAI フィールドは、既存のクライアントコードをそのまま動かせるよう受け付けられます。これらは応答を変えません。選択肢は常にひとつで、ストリームは必ず使用量で終わります。
JSON の型が正しくないフィールド(たとえば "max_tokens": "100")には 422 が返されます。messages のないリクエストも同様です。
ツール、構造化出力、推論、ウェブ検索には、それぞれ専用のページがあります。 関数呼び出し, 構造化出力, 推論 effort, 内蔵Web検索.
オプション付きのリクエスト
このリクエストは、システムメッセージ、サンプリングフィールド、推論 effort を指定します。これらすべてを適用するホスト型オープンウェイトモデルを使用しています。
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 に二つの詳細が加わります:キャッシュから読み取ったプロンプトトークンと、推論に使ったトークンです。
{
"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 で終了します。 |
| ホスト型オープンウェイトモデル | 回答テキストは max_tokens で止まります。推論はこれに含まれません。256 未満の値は 256 として扱われます。 |
max_tokens も max_completion_tokens もない場合、値は 4,096 です。shannon-coder-1 では 65,536 です。
メッセージ
各メッセージは、role と content を持つオブジェクトです。content は文字列、またはメッセージがテキスト以外も含む場合はパートの配列です。
| ロール | 説明 | 適用モデル |
|---|---|---|
system | モデルへの指示。先頭に置いてください。Shannon ティアでは、最初の system メッセージが使われます。 | ホスト型オープンウェイトモデル、shannon-1.6-*、shannon-2-*、shannon-coder-1 |
developer | system として読み取られます。 | ホスト型オープンウェイトモデル |
user | あなたの質問や依頼。Shannon ティアでは、最後の user メッセージがプロンプトで、それより前のメッセージが履歴です。 | すべてのモデル |
assistant | モデルの以前の応答。その後にツールの結果を送信する場合は、tool_calls を残してください。 | すべてのモデル |
tool | ツール呼び出しの結果:tool_call_id に呼び出しの ID、content に結果を文字列で指定します。 | すべてのモデル |
Shannon 3 ファミリーの ID では、必ず守らせたい指示を user メッセージに入れてください。
Shannon ティアでは、ユーザーのテキストも tools もないリクエストに 400 の No user message provided が返されます。
コンテンツパート
| パート | 説明 | 利用可能なモデル |
|---|---|---|
{"type": "text", "text": "…"} | プレーンテキスト。 | すべてのモデル |
{"type": "image_url", "image_url": {"url": "…"}} | 画像。base64 コンテンツの data: URL、または http(s) URL で指定します。 | Shannon 3 ファミリー、shannon-1.6-lite、shannon-1.6-pro、および画像入力に対応するホスト型オープンウェイトモデル |
{"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 | 選択肢は常にちょうどひとつで、index は 0 です。 |
choices[0].message.role | string | 常に assistant。 |
choices[0].message.content | string | null | 回答のテキスト。tool_calls がある場合、Shannon ティアでは null です。ホスト型オープンウェイトモデルは、呼び出しと並べてテキストを送信することがあります。 |
choices[0].message.reasoning_content | string | null | 回答の前にモデルが書いた推論。ない場合は null です。 |
choices[0].message.tool_calls | array | モデルがツールを呼び出す場合にのみ含まれます。各エントリには id、type が function、そして name と JSON 文字列の arguments を持つ function があります。 |
choices[0].message.annotations | array | 検索で何かが見つかった web_search: true のリクエストにのみ含まれます。content 内のマーカーが示すソースごとに ひとつの url_citation があり、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 のうち、プロンプトキャッシュから読み取られた部分。 | ホスト型オープンウェイトモデル |
usage.completion_tokens_details.reasoning_tokens | integer | completion_tokens のうち、推論に使われた部分。 | ホスト型オープンウェイトモデル |
ホスト型オープンウェイトモデルでは、prompt_tokens は、メッセージとツール定義をモデル独自のトークナイザーで数えた値に、画像のトークンを加えたものです。トークンカウント用エンドポイントは、送信前に同じ数値を返します。 トークンカウント
Shannon ティアでは、prompt_tokens は応答を書くためにモデルが読み取ったすべてを数えるため、メッセージのテキストだけよりも大きくなります。
ストリーミング
stream を true にすると、応答は chat.completion.chunk イベントとして届き、data: [DONE] で終わります。その直前の最後のチャンクに finish_reason と usage が含まれ、stream_options は不要です。チャンクの形式、キープアライブ行、ストリーム内のエラーについては、専用のページがあります。 ストリーミング
エラー
エラーは error メンバーを持つ JSON オブジェクトです。チェックは 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 | 画像入力に対応していないホスト型オープンウェイトモデルに、画像パートが送信されました。 |
400 | invalid_request_error | <id> does not accept response_format | 構造化出力に対応していないホスト型オープンウェイトモデルに response_format が送信されました。 |
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 ファミリーとホスト型オープンウェイトモデルでも同じです。 |