コンテンツへスキップ
認証

認証

すべてのリクエストは、ヘッダーで 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)

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"))

キーが必要なエンドポイント

エンドポイント キー
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
  }
}
  • /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 日間に行ったすべてのリクエストが表示されます。