認証
テナント、エンドユーザー、プロキシモードでの API アクセスに使うヘッダー方式。
資格情報の種類
| 方式 | ヘッダー | 主体(Acts as) |
|---|---|---|
| テナント API key | X-API-Key: tk_…(または Authorization: Bearer tk_…) | あなたのテナント |
| プロキシモードのエンドユーザー | X-API-Key: tk_… + X-End-User: <your-user-id> | あなたのバックエンドが表明した特定のエンドユーザー |
| プラットフォームのエンドユーザー | Authorization: Bearer <jwt> | /auth/login または OAuth 経由でサインインしたエンドユーザー |
オプションの X-Space-Id ヘッダーで特定のスペースを選択できます。指定しない場合はユーザーのデフォルトスペースが使われます。
どの方式であっても、それは principal(tenant · user · space)に解決され、データベースセッションはそのアイデンティティに Postgres の行レベルセキュリティ(RLS)でスコープされます。したがって分離は API より下層で強制され、アプリケーションコードによるものではありません。
どれを使うべきか?
- サーバー間連携(あなたの製品が会話を駆動する場合): プロキシモードを使います。バックエンドがテナントキーを保持し、リクエストごとにエンドユーザーのアイデンティティを表明します。ユーザーがキーを見ることはありません。
- ユーザーがプラットフォームに直接ログインする自社クライアントアプリ: エンドユーザー JWT を使います。
- 管理系の自動化(ドキュメント、エージェント、使用量の管理): 管理エンドポイントに対して素の テナントキーを使います。
テナント API key はサーバーサイドのシークレットです。ブラウザコードやモバイルアプリに絶対に組み込まないでください。ブラウザ向けには、共有トークン(share token)で認証する埋め込みウィジェットを使ってください。
プロキシモードの例
curl https://chat.agent4.io/chat \
-H "X-API-Key: tk_live_…" \
-H "X-End-User: crm-user-8841" \
-H "Content-Type: application/json" \
-d '{ "message": "What documents do I need for a refinance?" }'エンドユーザー id は、あなたのシステム上の任意の安定した識別子です。プラットフォームは初回検出時にユーザーとそのデフォルトスペースを作成し、すべての履歴・メモリ・ドキュメントをそのユーザーにスコープします。
エラー
| ステータス | 意味 |
|---|---|
401 | 資格情報が欠落しているか無効 |
403 | アイデンティティは有効だが、要求されたスペース/エージェントへのアクセス権がない |
429 | 月間トークンクォータを使い切った |