概要
API の全体像:すべてのエンドポイント、リクエストとエラーの形、呼び出しの課金方法、OpenAI または Anthropic の SDK から移行する際に知っておくべきこと。
エンドポイント
すべてのエンドポイントは、単一のベース URL の下にあり、HTTPS で提供されます。
ベース URL
https://api.shannon-ai.com | エンドポイント | 形式 | 用途 |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | 会話を送信して、次の回答を受け取ります。ストリーミングの有無を選べます。 |
POST /v1/messages | Anthropic Messages | 同じ内容を、Anthropic SDK のリクエストと応答の形式で扱います。 |
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 キー。x-api-key を送信する場合を除き、GET /v1/models 以外のすべてのエンドポイントで必須です。 |
x-api-key: <key> | Anthropic SDK が送信するヘッダーでの、同じキー。すべてのエンドポイントで読み取られます。 |
Content-Type: application/json | すべての POST で必須です。ない場合、応答は 415 です。 |
x-request-id: <your id> | 任意。リクエストに付ける独自の ID。応答ヘッダー x-request-id にそのまま返されます。指定しない場合、API が十六進数 12 文字の ID を作成します。 |
- すべての
POSTのボディは、最大 32 MiB の単一の JSON オブジェクトです。 - API が知らないフィールドは、エラーにならず、何の影響もありません。他のプロバイダー向けに書かれたリクエストが、余分なフィールドのために失敗することはありません。
- 既知のフィールドの JSON 型が正しくない場合や、必須フィールドがない場合は、
422で応答します。有効な JSON ではないボディには400で応答します。 modelは、モデルと料金のページにある ID のいずれかです。大文字と小文字は区別されません。
応答は JSON、またはリクエストで stream を true に設定した場合は server-sent events のストリームです。各エンドポイントは、それぞれの形式で応答します。すべての応答に x-request-id ヘッダーが付きます。
リクエストが通過する確認
リクエストは、モデルが実行される前に、決まった順序で確認されます。最初に失敗した確認が応答するため、401 が返った段階では、ボディについてまだ何も分かりません。
| 確認項目(この順序) | 失敗時のステータス |
|---|---|
| API キー | 401 |
| ボディ:サイズ、コンテンツタイプ、JSON、フィールドの型 | 413 · 415 · 400 · 422 |
| モデル ID | 400 |
| フラッド保護:アカウントあたり一分間に 120 リクエスト | 429 |
| 残高:リクエストの出力バジェットが収まること | 429 |
エラーの形式
エラーは、type と message を持つ error を含む JSON オブジェクトです。/v1/messages は Anthropic SDK が期待する形で包み、それ以外のパスはすべて 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で報告します。キーと使用量のページには、残高と各リクエストのコストが表示されます。 - すべてのリクエストは平等に処理されます。リクエスト頻度に関する唯一の制限は、フラッド保護(アカウントあたり一分間に 120 リクエスト)です。並列に送信されたリクエストは順番待ちになります。
モデルによって異なるフィールド
どのモデルも同じリクエストを受け付けます。一部のフィールドは、特定のモデルでのみ有効です。どのモデルかは表に示しています。すべてのフィールドは、各エンドポイントのページに一覧があります。
| フィールド | 説明 | 適用モデル |
|---|---|---|
system | モデルへの指示:Chat Completions では system メッセージ、Messages では system、Responses では instructions。 | ホスト型オープンウェイトモデル、shannon-1.6-*、shannon-2-*、shannon-coder-1 |
temperature | サンプリング温度。 | ホスト型オープンウェイトモデル、shannon-1.6-*、shannon-coder-1 |
top_p | Nucleus サンプリング。 | ホスト型オープンウェイトモデル |
seed | サンプリング用の固定シード。 | ホスト型オープンウェイトモデル |
stop | 最大 4 個の停止シーケンス。 | ホスト型オープンウェイトモデル |
reasoning_effort | モデルが回答する前にどれだけ推論するか。Responses では reasoning.effort、Messages では thinking。 | ホスト型オープンウェイトモデル |
web_search | true を指定すると、このリクエストでモデルがウェブを検索できます。Chat Completions と Messages にある、この API 独自のフィールドです。 | shannon-coder-1 を除く Shannon モデル |
max_tokens | 出力バジェット。すべてのモデルで、残高から確保される量を決めます。 | 回答の長さの上限として:ホスト型オープンウェイトモデル、shannon-1.6-*、shannon-coder-1 |
OpenAI SDK から移行する場合
- ベース URL を
https://api.shannon-ai.com/v1に設定し、キーを Shannon のキーにします。すると、Chat Completions と Responses の呼び出しは、SDK をそのまま使って動作します。 modelは Shannon の ID でなければなりません。gpt-4oのような他のプロバイダーのモデル名には、400とunknown modelで応答します。- 推論は専用のフィールドで届きます。メッセージとストリームのデルタで、
contentと並んでreasoning_contentに入ります。 - ストリームは、最後のチャンクに必ず
usageをfinish_reasonとともに含みます。 - ストリーム内のツール呼び出しは、完全な
arguments文字列を含むひとつのチャンクとして届きます。 - 応答の選択肢はひとつです。
- 上の表にない OpenAI API のパス(
/v1/embeddingsなど)には、404で応答します。
Anthropic SDK から移行する場合
- ベース URL を
https://api.shannon-ai.comに設定し(/v1は付けません)、キーを Shannon のキーにします。SDK はそれをx-api-keyとして送信します。 modelは Shannon の ID でなければなりません。- この API では
max_tokensは任意です。デフォルトは 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、キー、そしてモデルとして Shannon の ID です。 CLI コーディングツール