メインコンテンツまでスキップ

認証とスコープ

Kaleidr プラットフォーム API へのすべての呼び出しには認証情報が必要です。認証情報は 3 種類あり、API はそれぞれを異なる方法で扱います。

  • 公開可能キーは、ブラウザー内で組織を識別します。単独で API を呼び出すことはできず、セッションと交換する必要があります。
  • セッショントークンは、ブラウザーが実際の API 呼び出しに使う認証情報です。有効期間は短く、1 つのウェブサイトのオリジンと 1 つの製品に紐付けられます。
  • サーバーキーは、バックエンドが各リクエストで直接送信する秘密情報です。

このページでは、それぞれの送信方法、セッション交換の仕組み、スコープによって利用できる機能、vendor スコープの付与方法、各認証エラーの原因と対処方法を説明します。認証情報が漏えいした場合に何ができるかについては、セキュリティモデルを参照してください。

認証情報の種類​

認証情報プレフィックス保存場所使用方法プラン
公開可能キーkld_pk_live_…ページのソースコードセッション交換に一度送信。それ以外のエンドポイントでは拒否されるFree、Pro、Enterprise
セッショントークンkld_sess_live_…ブラウザーのメモリ発行先のページからの実行時 API 呼び出しすべてで送信公開可能キーまたは公開済みマップから発行
サーバーキーkld_sk_live_…バックエンドのみ実行時の API 呼び出しすべてで送信。Origin ヘッダーがあるリクエストは拒否Pro、Enterprise
レガシーキーkld_live_…バックエンドサーバーキーと同様に直接使用できる。ローテーションするとサーバーキーが生成される既存キーのみ

キー管理 API で environment: "test" を指定して発行したキーは、live の代わりに test を使用します(kld_pk_test_…、kld_sk_test_…)。テストキーではベースマップのタイルを読み込めません。

キーの全体が表示されるのは作成時またはローテーション時の 1 回だけです。Kaleidr はハッシュ値のみを保存するため、紛失したキーは復元できません。ローテーションしてください。

認証情報の送信​

認証情報はどちらかのヘッダーで送信できます。すべてのエンドポイントで両方を受け付けます。

Authorization: Bearer kld_sk_live_…
X-Api-Key: kld_sk_live_…

両方を含むリクエストでは、Authorization の値が Kaleidr のプレフィックスで始まる場合はそちらが使用され、それ以外の場合は X-Api-Key が読み取られます。サーバーキーを URL に含めないでください。

実行時エンドポイント(セッション交換以外)での認証情報ごとの動作は次のとおりです。

認証情報実行時エンドポイントでの結果
公開可能キー401 publishable_requires_session。先にセッションへ交換してください。
Origin ヘッダーのないサーバーキー受理され、その後 IP 許可リスト、スコープ、許可製品、クォータ、レート制限が確認される。
Origin ヘッダーのあるサーバーキー403 server_key_in_browser。ブラウザーはクロスオリジンリクエストに Origin を付けるため、API はウェブページで使われたサーバーキーを識別できる。
発行元と同じオリジンからのセッショントークン受理される。
異なる Origin からのセッショントークン403 session_origin_mismatch。
Origin のない公開済みマップのセッショントークン403 session_origin_mismatch。

JavaScript SDK はこれと同じ規則を先に適用します。Kaleidr.mount はブラウザーで kld_sk_… キーを検出すると、リクエストを送らずに拒否します。

セッション交換​

公開可能キーは 1 つのエンドポイントでセッショントークンに交換します。SDK はキー付きのマウントごとに自動で交換し、トークンを更新します。自作のブラウザークライアントを構築する場合だけ、直接呼び出す必要があります。

POST https://api.kaleidr.com/inference-api/b2b/v1/sdk/sessions
X-Api-Key: kld_pk_live_…
Content-Type: application/json

{ "product": "chat" }

product は必須で、chat、editor、viewer、tile のいずれかです。リクエストには Origin ヘッダーが必要です。ブラウザーは自動で追加します。

{
"session_token": "kld_sess_live_eyJhbGciOi…",
"expires_in": 900,
"product": "chat",
"basemap_style_id": null
}
フィールド意味
session_token実行時呼び出しに使う認証情報。形式は kld_sess_{env}_{token}。
expires_in有効期間(秒)。キー付きセッションは 900 秒間有効。この値はハードコードせず、フィールドを読み取ってください。
productセッションが紐付けられる製品。
basemap_style_id組織のデフォルトベースマップ。設定されていない場合は null。

セッションの紐付け先​

  • 1 つのオリジン。 交換リクエストの Origin。他のオリジンからの呼び出しは拒否されます。
  • 1 つの製品。 tile セッションからチャットのエンドポイントは呼び出せません。
  • 限定されたスコープ。 セッションには製品に必要なスコープのみが付与されます。チャットは ai、エディターは design、タイルは maps、ビューアーはなしです。キーに vendor があり、プラン(Enterprise)で許可されている場合、チャットセッションには vendor も付与されます。他の製品のセッションにはこのスコープは付与されません。

更新​

クライアントから有効期間の延長は要求できません。expires_in が切れる前に再交換してください。SDK は期限の 90 秒前に更新します。また、バックグラウンドのタブが表示されたときに期限まで 90 秒以内または期限切れの場合も更新し、更新失敗後は 30 秒ごとに再試行します。最初の交換に失敗した場合はマウントが失敗し、再試行は行われません。

product: "tile" の交換ごとに、組織の枠からマップ読み込み 1 回分が消費されます。他の製品の交換には料金がかかりません。交換には実行時呼び出しとは別に、キーごとの独立したレート制限があります。クォータとレート制限を参照してください。

チェックの順序​

交換は、最初に失敗したチェックで停止します。

順序チェックエラー
1キーが有効である401 Invalid or missing API key
2キーの交換に関するレート制限429 rate_limited
3公開可能キーである403 publishable_key_required
4リクエストに Origin ヘッダーがある403 origin_required
5許可オリジンが設定されている場合は、そのリストに含まれる403 origin_not_allowed
6キーがこの製品を除外していない403 product_not_allowed
7プランにこの製品が含まれる403 tier_capability_not_allowed
8キーに製品が必要とするスコープがある403 insufficient_scope。キーにスコープがあっても現在のプランが許可しない場合は tier_capability_not_allowed
9tile の場合、マップ読み込み枠が残っている429 map_load_quota_exceeded

ターミナルで試す​

curl -s https://api.kaleidr.com/inference-api/b2b/v1/sdk/sessions \
-H "X-Api-Key: kld_pk_live_…" \
-H "Origin: https://www.example.com" \
-H "Content-Type: application/json" \
-d '{"product":"chat"}'

Origin はブラウザー以外のクライアントでも設定できる通常のヘッダーなので、この方法が使えます。そのため、許可オリジンリストは秘密情報ではなくブラウザーの制御として扱われます。CORS と許可オリジンを参照してください。

公開済みマップのセッション​

Studio で公開したマップの Kaleidr AI タイルで Control Tower または Popup Window をオンにすると、ページにキーを置かずに訪問者にチャットを提供できます。代わりにページがマップの公開 ID と、開く機能を交換します。

POST https://api.kaleidr.com/inference-api/b2b/v1/sdk/share-sessions
Content-Type: application/json

{ "share_id": "your-map-id", "feature": "control_tower" }
{ "session_token": "kld_sess_live_eyJhbGciOi…", "expires_in": 300, "product": "chat" }

このセッションはチャット専用で、ai スコープを持ち、有効期間は 300 秒です。料金はマップ所有者の組織に計上されます。vendor は付与されません。要求元のページでのみ使用でき、Origin がない場合や異なるオリジンからの呼び出しは拒否されます。拒否内容は次のとおりです。

ステータスコード原因
403origin_requiredリクエストに Origin ヘッダーがない。
404not_foundこの ID の公開済みマップも共有リンクも存在しないか、共有リンクのマップが公開停止されている。
403chat_disabledマップの Kaleidr AI が、要求された機能をオンにしていない。
403origin_not_allowedページがマップの許可ドメインに含まれない。
403owner_has_no_organizationマップの所有者に請求先組織がない。
403tier_capability_not_allowed所有者のプランにチャットが含まれない。
429rate_limitedこのマップまたはこのアドレスからの交換が多すぎる。

設定方法は公開地図で Kaleidr AI を使うを参照してください。

スコープ​

キーにはスコープが含まれます。エンドポイントの各グループでいずれかが必要です。

スコープ利用可能になる機能必要な対象
ai/chat/* および /retrieval/* エンドポイントチャット、およびチャットや検索エンドポイントを呼び出すバックエンド
design/design/* エンドポイントエディターのセッション、およびデザインエンドポイントを呼び出すバックエンド
mapsベースマップのセッションTile
vendorそれ自体でエンドポイントは使えないが、組織が公開したデータをチャットの回答に利用できる。データをアップロードした場合のチャット

特に指定しなければ、新しいキーには ai、maps、design が付与されます。Free プランでは、リクエストでどの製品を指定しても、キーには Free の全機能、つまりこの 3 スコープと 4 製品(chat、editor、viewer、tile)が付与されます。vendor は既定では付与されず、含むキーを作成できるのは Enterprise の組織だけです。

プランが許可していないスコープや製品を指定してキーを作成しようとすると、403 tier_capability_not_allowed で拒否されます。エラーなしにリクエストの指定が削除されることはありません。典型例は Free や Pro での vendor の要求です。

スコープはキー作成時に固定されます。 作成後にエンドポイントや設定から変更することはできません。ローテーション後のキーは元のスコープを引き継ぎますが、現在のプランが許可しないスコープは除外されます。変更するには新しいキーを作成し、古いキーを取り消してください。

Free でのローテーションには Free のルールが適用されます。 Free プランで公開可能キーをローテーションすると、元のキーの内容に関係なく、代わりのキーには Free の全機能(ai、maps、design、4 製品)が付与されます。Free ではサーバーキーやレガシーキーをローテーションできず、403 free_plan_publishable_only が返されます。

キーが利用できる範囲はキーとプランの狭い方で決まる​

各リクエストでは、キーに保存されたスコープと製品を、組織の現在のプランで利用できる機能と照合します。プランを変更してもキー自体は変更されませんが、そのキーでできることは変わります。

  • insufficient_scope:キーにそのスコープがもともと付与されていません。対処:付与済みのキーを使用します。
  • tier_capability_not_allowed:キーにスコープはありますが、現在のプランに含まれません。対処:プランを変更します。

vendor はエンドポイントを直接開放しないため、上記 2 つ目の例外です。Enterprise より下位のプランで vendor が保存されたキーを使ってもリクエストは拒否されず成功しますが、回答に組織のデータは使用されません。

製品リストが空のキーでは、プランに含まれるすべての製品を利用できます。スコープがないキーはすべての場所で拒否されます。

製品制限はすべてのキーに適用される​

allowed_products により、キーを chat、editor、viewer、tile の一部だけに制限できます。この制限はすべての種類のキーで、使用時に適用されます。

キー制限を確認するタイミング拒否コード
公開可能キーセッション交換時。要求した product を照合403 product_not_allowed
サーバーキーまたはレガシーキー実行時リクエストごと。エンドポイントの所属製品を照合403 product_not_allowed

各エンドポイントグループは、必要なスコープに応じて特定の製品に属します。

エンドポイントスコープ制限付きキーで許可が必要な製品
/chat/*、/retrieval/*aichat
/design/*designeditor

したがって、"allowed_products": ["tile"] を指定して作成されたサーバーキーは、ai スコープを持っていても、/chat/control/stream への呼び出しで 403 product_not_allowed が返されます。viewer のみに制限されたサーバーキーでは実行時エンドポイントを呼び出せません。公開済みマップにはキーが必要ないためです。スコープで許可されたすべてのエンドポイントにアクセスさせる場合は、製品リストを空にしてください。

セッショントークンは交換時に 1 つの製品に紐付けられているため、ここでは再確認されません。

FreeProEnterprise
公開可能キーはいはいはい
サーバーキーいいえはいはい
ai、maps、designはいはいはい
vendorいいえいいえはい

Pro では Free の機能に加えて、サーバーキーとより多いアクティブキー数が利用できます。プランの完全な比較表は API キーの取得にあります。

vendor スコープ​

vendor 自体はエンドポイントを開放しません。このキーで作成されたチャットの回答が、Kaleidr の一般知識に加えて、組織が公開した独自データを参照できるかどうかを制御します。アップロードから回答までの流れは独自データの概要を参照してください。

利用できるプランは次のとおりです。

  • Free と Pro では vendor を保持できません。vendor_acknowledged の有無に関係なく、そのスコープを含むキーの作成は 403 tier_capability_not_allowed で拒否され、キーは作成されません。
  • Enterprise では vendor を持つキーを作成できます。

このスコープはキーを通じてデータを読み取るためのものです。データのアップロードには別の権限が必要で、キーではなく組織のオーナーまたは管理者に付与されます。アップロードも Enterprise 限定で、Free と Pro ではビジネスデータをアップロードできません。ログイン済みユーザーが Kaleidr Studio のマップに追加するファイルは別の機能で、すべてのプランで利用できますが、どのスコープからも読み取れません。マップ上のデータセットを参照してください。

API Keys ページでは vendor を付与できません。キー管理 API で作成してください。

curl -s https://api.kaleidr.com/shared-api/api-keys \
-H "Authorization: Bearer $KALEIDR_ACCOUNT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "store-locator-chat",
"key_type": "publishable",
"scopes": ["ai", "vendor"],
"vendor_acknowledged": true,
"allowed_origins": ["https://www.example.com"]
}'

vendor を持つ公開可能キーには vendor_acknowledged: true が必要です。指定しない場合、422 vendor_scope_requires_acknowledgement が返されます。公開可能キーはページの公開ソースに含まれるため、そのキーが読み取れるデータはページ訪問者なら誰でも読み取れます。サーバーキーではこの確認は不要です。

公開可能キーに vendor を付ける前に:

  • ウェブサイトごとにキーを分けてください。独自データに基づく回答を必要とするサイトだけに vendor を付与します。
  • 公開されたデータは、そのサイトで一般公開されているものとして扱ってください。仕入れ原価、未公開の料金、ページに載せたくない内容は公開しないでください。
  • すでに発行済みのセッションには新しいスコープが加わりません。vendor を持つキーがそのスコープを与えるのは、その後に交換されたセッションだけです。

vendor を取り消すには、キーを失効させ、このスコープを含まない新しいキーを作成します。取り消しは発行済みのセッションを含め、次のリクエストから有効になります。

組織が Enterprise プランを離れた場合​

Enterprise から Pro または Free に変更してもキーは書き換えられず、すべてが使用不能になるわけではありません。

対象変更後の動作
vendor を持つキーその他の機能は引き続き利用できますが、回答に組織のデータは使われなくなります。エラー、ステータス、フィールドでは通知されません。
変更前に発行されたブラウザーセッション終了します。次のリクエストでは 401 が返り、SDK が vendor のない新しいセッションを取得します。
vendor を持つキーのローテーションPro では 201 で成功します。新しいキーは同じスコープを引き継ぎますが、vendor は除外されます。製品リストは変わりません。Free では、公開可能キーの代替キーに ai、maps、design と 4 製品が付与され、旧キーの設定は関係ありません。サーバーキーとレガシーキーのローテーションは 403 free_plan_publishable_only で拒否されます。
vendor を持つキーの作成403 tier_capability_not_allowed で拒否されます。
公開したリリースどのプランでもオーナーと管理者はアップロード API で一覧の取得、公開解除、削除ができます。Free と Pro ではアップロードと公開が 403 vendor_data_not_on_plan で拒否されます。

Enterprise に戻ると、まだ vendor を保持しているキーは再びデータにアクセスできます。下位プランでローテーションした代替キーにはスコープが復元されないため、新しいキーを作成してください。

キーの制限​

制限対象API Keys ページで設定キー管理 API で設定拒否
許可オリジン公開可能キーはいはい(allowed_origins)交換時に 403 origin_not_allowed
許可製品すべてのキーいいえはい(allowed_products)公開可能キーでは交換時、サーバーキーとレガシーキーでは実行時リクエストごとに 403 product_not_allowed。製品制限を参照してください。
IP 許可リストサーバーキーとレガシーキーいいえはい(allowed_ips)403 ip_not_allowed
月間上限すべてのキーいいえはい(monthly_cap_tokens)429 quota_exceeded
有効期限すべてのキーいいえはい(expires_at)期日後に 401
スコープすべてのキーいいえ作成時のみ(scopes)403 insufficient_scope

許可オリジン。 最大 100 件で、各項目はパスのない scheme://host[:port] 形式です。公開可能キーでは空リストがすべてのオリジンを意味します。詳細と拒否条件はCORS と許可オリジンを参照してください。

IP 許可リスト。 IP アドレスまたは CIDR ブロックを最大 100 件登録できます。すべてのアドレスに一致するブロック(/0)は拒否されます。すべてのアドレスを許可するには空のリストにしてください。リストが設定されていて呼び出し元のアドレスを確認できない場合も、リクエストは拒否されます。

月間上限。 請求期間中に、このキーが組織の AI クレジットから使える量の上限です。クォータとレート制限を参照してください。

発行済みセッションへの変更の反映​

セッションはリクエストごとに親キーの状態を確認するため、アクセスの取り消しはすぐに反映されます。アクセスを追加するには新たな交換が必要です。

キーまたはアカウントへの変更発行済みセッションへの影響
キーの取り消し、または猶予期間なしのローテーション次のリクエストで 401。
セッションのオリジンをキーの許可リストから削除次のリクエストで 401。
セッションの製品をキーの許可製品から削除次のリクエストで 401。
プランのダウングレード変更前に発行されたセッションは 401。変更後のセッションは、そのプランで利用できない機能に対して 403 tier_capability_not_allowed。
月間上限の追加または引き下げ次のリクエストから適用。
月間上限の削除次の交換から適用。
プランのアップグレード次の交換から適用。

セッションは数分しか持続しないため、「次の交換から」でも待ち時間は短くなります。SDK の更新処理によって、コード変更なしで反映されます。

キー管理 API​

kaleidr.com/api-keys の API Keys ページでは、キーの名前、種類、許可オリジンを設定できます。それ以外の設定は、このページと同じ API を使って行います。

  • ベース URL: https://api.kaleidr.com/shared-api/api-keys
  • 認証: Authorization: Bearer に、組織のオーナーまたは管理者である Kaleidr ログインアカウントのアクセストークンを設定します。プラットフォームキーは使用できません。現時点ではキー管理専用の長期認証情報はありません。
  • 組織: 指定がなければメインの組織が使われます。別の組織を指定する場合は、キー作成時は JSON 本文に org_id を、それ以外のルートではクエリパラメーター ?org_id= を設定します。作成ルートに付けたクエリの org_id は無視されます。
メソッドとパス用途成功時
POST /キーを作成201、キーオブジェクトと plaintext_key
GET /有効なキーを新しい順に一覧表示200
GET /{id}/events?limit=1..200キーの監査イベント200
PATCH /{id}制限を変更200、キーオブジェクト
POST /{id}/rotateキーを置き換え201、新しいキーと plaintext_key
POST /{id}/revokeキーを取り消し200、キーオブジェクト

削除用のルートはありません。使わなくなったキーは取り消してください。

キー作成時に指定できるフィールドは次のとおりです。

フィールド型デフォルト備考
name1~200 文字の文字列必須
org_idUUIDメインの組織キーを作成する組織。本文で送信します。このルートではクエリパラメーターは無視されます。
key_type"publishable" または "server""publishable"Free では "server" が 403 free_plan_publishable_only で拒否されます。
environment"live" または "test""live"
scopes文字列の配列["ai", "maps", "design"]ai、maps、design、vendor から選びます。それ以外は 422 unknown_scope。プランで許可されないスコープ(Enterprise 未満の vendor)は 403 tier_capability_not_allowed。
allowed_origins文字列の配列、最大 100 件[]公開可能キーでは空リストがすべてのオリジンを意味します。
allowed_products文字列の配列[]chat、editor、viewer、tile から選びます。空ならすべて。その他は 422 unknown_product。公開可能キー、サーバーキー、レガシーキーのすべてに適用されます。製品制限を参照してください。
allowed_ips文字列の配列、最大 100 件[]IP アドレスまたは CIDR ブロック。
monthly_cap_tokens0 以上の整数なし1 以上で上限を設定。0 または null は上限なし。
expires_at将来の日付と時刻なし
vendor_acknowledged真偽値falsevendor を含む公開可能キーで必須(Enterprise)。

PATCH で指定できるのは name、allowed_origins、allowed_products、allowed_ips、monthly_cap_tokens、expires_at です。変更するフィールドだけを送信してください。明示的な null は値をクリアします。scopes は受け付けません。

rotate には { "grace_hours": 0 } を指定でき、値の範囲は 0~8760 です。代替キーは元のスコープを継承しますが、現在のプランで許可されないものは除外されます。Free では代替キーに常に Free の全機能が付与され、サーバーキーやレガシーキーはローテーションできません(403 free_plan_publishable_only)。0 にすると旧キーとそのセッションは直ちに使えなくなります。猶予期間を設けた場合は期間終了まで旧キーが利用でき、アクティブキー数の上限にも引き続きカウントされ、再ローテーションはできません。API Keys ページでは 24 時間の猶予期間でローテーションします。

これらのルートのエラーはエラー:キー管理を参照してください。

認証エラー​

401 は API がその認証情報を受け付けないことを示します。403 は認証情報が認識されたものの、要求が拒否されたことを示します。いずれも {"detail": "<code>"} の形式です。

ブラウザーでは、認証情報やオリジンの理由で拒否されたレスポンスに CORS ヘッダーが付かないため、ページには本文ではなく CORS エラーが見えます。その後のスコープやプランの検証で拒否された場合はレスポンスを読み取ることができ、SDK は kaleidr session exchange failed (403) と報告します。どちらの場合も、ブラウザーの Network タブから該当リクエストを開いてコードを確認してください。CORS と許可オリジンを参照してください。

ステータスコード原因対処方法
401Invalid or missing API key認証情報がない、キーが不明・失効済み・期限切れ、セッションの期限切れ、親キーが失効したセッション、オリジンや製品の権限を失ったセッション、プランのダウングレード前に発行されたセッション、組織が停止中またはプラン未設定。API Keys ページでキーの値と状態を確認します。セッションは再交換してください。
401publishable_requires_session公開可能キーが実行時エンドポイントに送られた。セッションに交換するか、バックエンドからサーバーキーで呼び出します。
403publishable_key_requiredサーバーキーまたはレガシーキーでセッション交換を呼び出した。交換には kld_pk_… キーを使用します。
403origin_requiredセッション交換に Origin ヘッダーがない。ブラウザーのページから呼び出します。
403origin_not_allowedページのオリジンがキーの許可オリジン、または公開済みマップの許可ドメインに含まれない。正確なオリジンをキーに、またはドメインをマップに追加します。
403product_not_allowed許可製品に要求した製品が含まれない。セッション交換で指定した product、またはサーバーキー・レガシーキーが呼んだエンドポイントの所属製品。allowed_products を変更するか、別のキーを使います。
403insufficient_scopeキー作成時にエンドポイントまたは製品が必要とするスコープを付与していない。必要なスコープを持つキーを使います。スコープは編集できません。
403tier_capability_not_allowedキーにはスコープや製品があるが、現在のプランに含まれない。kaleidr.com/billing でプランを変更します。
403server_key_in_browserサーバーキーが Origin ヘッダー付きで送信された。バックエンドに移してください。ページのソースに含まれていた場合はキーをローテーションします。
403session_origin_mismatchセッショントークンを発行元と異なるオリジンで使用、または公開済みマップのセッションを Origin なしで使用。使用するページ上でセッションを再交換します。
403ip_not_allowedIP 許可リストを設定したサーバーキーやレガシーキーがリスト外のアドレスから使われた。許可アドレスから呼び出すか、allowed_ips を変更します。
403chat_disabled公開済みマップの交換で、マップの Kaleidr AI が要求された機能をオンにしていない。Studio でマップの Kaleidr AI タイルの Control Tower または Popup Window をオンにします。
403owner_has_no_organization公開済みマップの交換で、所有者に組織がない。所有者が組織を作成または参加する必要があります。
404not_found公開済みマップの交換で、その ID のマップも共有リンクも存在しない。ID と公開状態を確認してください。

429 や 5xx の応答も含めた一覧はエラーを参照してください。

関連情報​