spicyapiドキュメント
API で開発する
本文

認証

キーの形式、キーごとの制限、参照できるタスク、キー漏えい時に直ちに行う対処。

作成、読み取り、課金を行うすべての API 呼び出しで、Authorization に API キーを送ります。評価用の公開モデルカタログだけは例外で、キーが不要です。

Authorization: Bearer sk-spicy-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ネイティブ API(/api/v1/*)は Bearer キーだけを受け付け、Cookie やクエリのパラメーターは使えません。

テキスト・動画の互換エンドポイント(/v1、/v1beta)は同じキーを使い、Anthropic SDK の x-api-key と Google GenAI SDK の x-goog-api-key も受け付けます。公式 SDK はベース URL の変更だけで使えます。テキストとストリーミング参照。この 2 ヘッダーは /api/v1 では効かず、URL のクエリ内のキーは、どのエンドポイントでも使えません。

API キーとコンソールは別です

API キーを受け付けるのは /api/v1、/v1、/v1beta です。ウェブコンソールは独自のブラウザーセッションを使います。ログインを API キーには使えず、漏れた API キーでコンソールへログインすることもできません。違う種類の認証情報は常に 401 で、権限エラーではありません。

キーの形式

固定の sk-spicy- に、小文字の 16 進数 48 文字が続きます。

部分目的
sk-spicy-ログ、リポジトリ、GitHub の秘密情報検出で見分けられる固定の接頭辞
次の 8 文字記録を速く探すための検索部分。検証はキー全体で行う
残りの 40 文字秘密情報の残り。全体に pepper を加えた SHA-256 ハッシュだけを保存するため、当社も元のキーを読み戻せない

接頭辞は意図したものです。他人が残高を使った後で気付くより、検出され通知される方がよいためです。

キーは 1 回だけ表示します

閉じる前にコピーするか、ファイルとして保存 を押します。失ったら新しいキーを作ります。復元はできません。復元できるなら平文保存という意味になるため、この設計にしています。

キーを作る

  1. コンソール → API キー で キーを作成 を押します。
  2. production backend、staging worker など、使用するサービスの名前を付けます。失効するとき見分ける必要があります。
  3. 必要なら 詳細設定 で支出上限、許可モデル、IP の許可リスト、有効期限を設定します。すべて後で変更できます。
  4. コピーか ファイルとして保存 を使い、保存できたことを確認します。閉じると再表示できません。

作成にはチームの owner、admin、developer の役割が必要です。左上で選んだチームに属し、使用量と上限もそのチームへ計上します。各チームは有効なキーを最大 50 個持てます。有料処理には認証済みメールと残高も必要です。アカウント設定を参照してください。

キーの保管場所

  • 手元のテスト: ターミナルで export SPICY_API_KEY="…" を使います。ウィンドウを閉じるまで有効です。またはコードが読む .env に置き、最初のコミット前に .env を .gitignore へ入れます。
  • サーバーやホスティング: 秘密情報または環境変数の設定へ置き、コードで環境の SPICY_API_KEY を読みます。
  • ソース、チャット、スクリーンショット、問い合わせ、AI 補助のプロンプトへは決して貼りません。

クライアントへ配布しない

ブラウザーやアプリに入れた情報は取り出せます

バンドル、難読化、複数ファイルへの文字列分割は保護になりません。開発ツールや逆コンパイラーで取得でき、漏れたキーは残高か上限を使い切るまで動きます。

フロントエンドで生成するなら、自分のバックエンドを経由します。ブラウザーが自分へ、自分が当社へ呼び出します。その層でユーザー別の上限も適用できます。

モバイルアプリ、デスクトップクライアント、公開 notebook、CI ログ、サポートへ貼る curl -v の出力にも同じことが当てはまります。

自分のブラウザーで、自分だけが使うツールは別です。 API はブラウザーからの呼び出しに対応するため、SillyTavern 拡張や、自分のキーを貼るロールプレイアプリは直接呼べます。上の規則は、他人が読み込むものへキーを入れる場合です。各ツールに日次上限付きの別キーを与え、支出を確認し、個別に失効できるようにします。

キーごとの制限

作成時または後でコンソールから設定します。サーバー側で適用します。

制限効果到達時の業務コード
日次支出上限新規キーは設定しなければ上限なし。自分で金額を設定し、設定ミスや漏えいの支出を制限。UTC の日ごとに更新40202
月次予算UTC の現在の暦月で使える額40202
累計支出上限キーの生涯の支出額。パートナーへ渡すキーに便利40202
有効期限UTC の指定日の終了時に無効401
IP の許可リスト一覧のアドレス・CIDR だけ許可。サーバー連携に推奨40302
モデルの許可リストテストを安価なモデルだけにするなど。無制限なら後で追加したモデルも呼べる40301

キーのカードで現在の上限を表示し、いつでも変更できます。

上限には支出済み額と、実行中タスクの予約額も含むため、進行中に上限へ届くことがあります。msg はどの上限かを示します。40202 の msg がプラットフォームの枠を示すなら、キーの問題ではありません。別キーを作っても直らないため、後で再試行します。

IP の一覧は最後のプロキシではなく、エッジが見る実際の公開アドレスに照合します。送信元アドレスはサーバー要求が出る公開 IP です。多くのホストはネットワーク設定に載せ、手元なら curl https://ifconfig.me で分かります。

タスクは作成したキーに属する

API から見えるのは、作成した API キーだけです。同じチームでも他のキーでは次のようになります。

別のキーで行う操作結果
読み取り(recordInfo)、再試行、破棄、ダウンロードリンク取得存在しないタスクと同じ 404
履歴(GET /api/v1/jobs)、使用量(GET /api/v1/usage)そのキー自身のタスクと支出だけ
同じ Idempotency-Key で作成を再送元の ID を含まない 409

キー変更後の 409 は、タスク未作成を意味しません

あるキーでタイムアウトし、別キーで再送した場合、409 の背後で、すでに実行・課金されるタスクがある可能性があります。「作られていない」と見なし、新しい冪等性キーで再送しないでください。二重生成への支払いになります。最初の API キーで再送するか、コンソールで探します。

2 つはキーと独立しています。タスクの Webhook は作成キーの失効後も届きます。また、どのキーで作ってもチームの全タスクを コンソール → ログ で確認でき、詳細に 使用したキー を表示します。

キーの交換

  • production、staging、local など環境ごとに 1 キーを使い、他に影響せず失効できます。
  • 計画的な交換: 新しいキーを作り、新しいタスクだけで使います。古いキーの全タスクが終端へ達し(遅くとも各 deadlineAt)、結果を回収してから古いものを失効します。古いキーがまだ信頼できる場合だけの手順です。
  • 失効は即時で、元に戻せません。 キャッシュの待機も再有効化もなく、新規作成が必要です。

漏えい後

直ちに失効する

コンソール → API キー で操作を開き、失効 を選びます。即時に適用します。

自分の進行中タスクを待たないでください。そのキーで API から読むことはできなくなりますが、受理済みタスクは継続し課金されます。Webhook または コンソール → ログ から回収します。漏えい時は待つべきではありません。

代わりを作る

新しいキーを作り、サーバー設定を更新します。準備中も漏れたキーを有効に残さないでください。

使用状況を確認する

漏えい期間の コンソール → ログ で、知らないモデル、異常な件数、説明できない支出を探します。詳細の 使用したキー と、CSV をエクスポート の各タスクのキー ID で確認できます。キーのページにも最終使用時刻があります。

新しいキーの制限を強める

適切な IP の許可リストと日次上限を設定し、コード、ログ、配布設定から元の露出を除きます。

予想外の支出があれば、タスク ID または request_id を添え コンソール → サポート へ連絡します。

認証失敗の応答

{
  "code": 401,
  "msg": "Credentials are invalid or expired",
  "request_id": "req_01k3m8x9q2z4v7n5p6r8s0t1w2"
}

HTTP 状態も 401 です。すべての認証失敗が code: 401 を返し、msg で種類を示します。

msg の始まり状況対処
Missing credentialsキーが届いていないAuthorization: Bearer … と、送信プロセスの SPICY_API_KEY を確認。別のターミナルの変数は引き継がれない
API key format is not recognized送信値が SpicyAPI のキーではないsk-spicy- で始まるか、Bearer の不足、文字の不足・追加、引用符、改行を確認
Credentials are invalid or expired正しい形式だが存在しない、失効済み、期限切れ存在を探られないよう意図的に区別しない。コンソール → API キー で状態確認か新規作成

文章ではなく code で分岐します。言い回しは変わり、エラー言語に従います。詳しくはエラーを参照してください。

メール未認証やアカウント停止など、アカウント自身が呼べない場合は 403 です。キーを変えても直りません。

このページの内容