認証
すべてのリクエストは、ヘッダーで API キーを送信します。アカウントごとにひとつのキーが、すべてのエンドポイントとモデルで使え、二種類のヘッダー形式のどちらでも指定できます。
ヘッダー · OpenAI SDK
Authorization: Bearer YOUR_API_KEY ヘッダー · Anthropic SDK
x-api-key: YOUR_API_KEY 受け付けるヘッダー
どちらのヘッダーも、エンドポイントがどの形式に対応していても、すべての /v1 エンドポイントで読み取られます。どちらか一方を送信してください。
| ヘッダー | 説明 |
|---|---|
Authorization: Bearer <key> | 最初に確認されます。Bearer は先頭を大文字の B にし、キーの前に空白をひとつ入れて書いてください。OpenAI SDK はこのヘッダーを送信します。 |
x-api-key: <key> | リクエストに Authorization: Bearer ヘッダーがない場合に読み取られます。Anthropic SDK はこのヘッダーを送信します。 |
OpenAI SDK では、キーとベース URL を設定します。SDK が Authorization: Bearer を送信します。
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": "Hello, Shannon!"}
]
)
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: 'Hello, Shannon!' }
]
});
console.log(response.choices[0].message.content); curl -X POST "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": "Hello, Shannon!"}
]
}' Anthropic SDK では、キーと、/v1 を含まないベース URL を設定します。SDK が x-api-key を送信します。
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com"
)
message = client.messages.create(
model="shannon-3",
max_tokens=1024,
messages=[
{"role": "user", "content": "Hello, Shannon!"}
]
)
print("".join(block.text for block in message.content if block.type == "text")) import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com'
});
const message = await client.messages.create({
model: 'shannon-3',
max_tokens: 1024,
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
]
});
console.log(message.content.filter((block) => block.type === 'text').map((block) => block.text).join('')); curl -X POST "https://api.shannon-ai.com/v1/messages" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
]
}' キーが必要なエンドポイント
| エンドポイント | キー |
|---|---|
POST /v1/chat/completions | 必須 |
POST /v1/messages | 必須 |
POST /v1/responses | 必須 |
POST /v1/tokenize | 必須 |
POST /v1/messages/count_tokens | 必須 |
GET /v1/models | 不要 |
あなたのキー
- キーは
sk-の後ろに、A–Z、a–z、0–9、-、_の文字が 43 文字続く形式で、全体で 46 文字です。 - アカウントごとに、キーはちょうどひとつです。キーと使用量を初めて開いたときに作成されます。
- キーは、アカウントの API へのフルアクセスを与えます。すべてのエンドポイント、すべてのモデル、残高全体が対象です。
- キーに有効期限はありません。ローテーションまたは無効化するまで使えます。
ローテーションと無効化
キーのローテーションと無効化は、キーと使用量のページで行います。 キーと使用量
| 操作 | 結果 |
|---|---|
| ローテーション | 新しいキーが発行され、古いキーは使えなくなります。新しいキーはすぐに使えます。 |
| 無効化 | キーは使えなくなり、新しいキーは発行されません。再び使えるキーを得るには、ローテーションしてください。 |
- どちらもただちに有効になります。古いキーでの次のリクエストには
401が返されます。古いキーがあらゆる場所で拒否されるまでの上限は 60 秒と考えてください。 - アカウントのすべてのクライアントが同じキーを使うため、ローテーションはそのすべてに影響します。ローテーションしたら、すぐに新しいキーをクライアントに設定してください。
- 残高、使用量、フラッド保護はキーではなくアカウントに属します。新しいキーでも、同じ残高と現在の一分間の同じリクエスト数が引き継がれます。
エラー
認証の失敗はすべてステータス 401、タイプ authentication_error です。メッセージでケースを見分けられます。
| ステータス | タイプ | メッセージ | 発生条件 |
|---|---|---|---|
401 | authentication_error | Missing authentication | リクエストに Authorization: Bearer ヘッダーも、sk- で始まる x-api-key ヘッダーもありません。小文字の bearer や、Bearer のない Authorization の値に対する応答もこれです。 |
401 | authentication_error | Invalid API key | キーがアカウントの現在のキーではありません。入力ミス、無効化済み、またはローテーションで置き換えられたキーです。 |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} /v1/messages以外のすべてのパスでは、errorオブジェクトにcode: "invalid_api_key"(キーがない場合も同様)とparam: nullも含まれます。- キーはボディが読み込まれる前に確認されます。有効なキーのないリクエストは、ボディが無効な場合や大きすぎる場合でも
401になります。 sk-で始まらないAuthorization: Bearerの値は、API キーとして扱われません。トークンが無効または期限切れであるというメッセージとともに401が返されます。
ブラウザと CORS
- API がクロスオリジンのブラウザリクエストに応答するのは、固定されたオリジンの一覧に対してだけです。別のオリジンのページ上の JavaScript は、
/v1の応答を読み取れません。 - API はサーバーから呼び出し、ページはそのサーバーとやり取りさせてください。そうすれば、キーがページのソースに含まれることもありません。
- サーバーサイドのコードやコマンドラインツールは影響を受けません。このルールを適用するのはブラウザだけです。
- shannon-ai.com へのサインインでは、
/v1リクエストは認証されません。そこではクッキーは読み取られず、キーが唯一の認証情報です。 - 許可されたオリジンに対して、ブラウザは
content-type、authorization、x-api-key、anthropic-version、anthropic-beta、openai-beta、x-request-idを送信でき、応答ヘッダーx-request-idを読み取れます。
キーを安全に保つ
- キーはサーバーに置いてください。ウェブページ、モバイルアプリ、公開リポジトリには入れないでください。キーを入手した人は、あなたの残高をすべて使えてしまいます。
- キーはコードに書き込まず、環境変数またはシークレットストアから読み込んでください。
- キーが漏えいした可能性がある場合は、キーと使用量でローテーションしてください。古いキーはただちに使えなくなります。
- 漏えいが起きたら、キーと使用量のリクエスト一覧を確認してください。キーが過去 30 日間に行ったすべてのリクエストが表示されます。