エラー
これは Kaleidr プラットフォーム API が返すエラーの完全な一覧です。各エラーには HTTP ステータスと、処理を分岐する際に使用できる短く安定した文字列であるコードがあります。ステータスだけでは原因を判断できません。403 には複数の原因があり、429 は「リクエスト頻度を下げる必要がある」場合と「クォータを使い切った」場合の両方を表します。
コードが常に同じフィールドにあるとは限らないため、まずレスポンス形式を確認します。
レスポンス形式
| 形式 | 例 | 用途 |
|---|---|---|
| ラップされたコード | {"detail": "origin_not_allowed"} | 401、403、404、413、500、503 のほぼすべて、422 のリクエスト制限コード、および 2 種類の 429(map_load_quota_exceeded とアップロード API の ingest_rate_limited)。コードは detail の文字列です。 |
| フラットなオブジェクト | {"error": "rate_limited", "detail": "API key rate limit exceeded. Slow down."} | その他すべての 429。コードは error、detail はユーザー向けの説明文です。クォータエラーには追加のフィールドがあります。 |
| 検証エラーのリスト | {"detail": [{"loc": ["body", "product"], "msg": "…", "type": "…"}]} | リクエスト本文やクエリの形式が不正な場合の 422。detail は問題ごとに要素を持つ配列です。 |
| 200 で返されるエラー | {"error": "Route planning failed."} | POST /chat/control/route のみ。後述を参照してください。 |
いずれの形式からもコードを読み取る関数:
async function kaleidrError(res) {
const body = await res.json().catch(() => ({}));
const code =
typeof body.error === 'string' ? body.error : // flat 429
typeof body.detail === 'string' ? body.detail : // wrapped code
Array.isArray(body.detail) ? 'validation_error' : // 422
'unknown_error';
return { status: res.status, code, body, retryAfter: Number(res.headers.get('retry-after')) || null };
}
重要なヘッダーは 2 つあります。429 レスポンスの Retry-After は秒単位の待機時間を表し、X-Request-Id がある場合はサポートに問い合わせる際にリクエストを特定できます。
認証: 401
API が認証情報を受け付けません。
| コード | 発生条件 | 対処方法 |
|---|---|---|
Invalid or missing API key | 認証情報が送信されていない、またはキーが不明・失効・期限切れです。ほかにも、期限切れのセッショントークン、キーが失効または猶予期間なしでローテーションされたセッション、キーからオリジンや製品が削除されたセッション、プランのダウングレード前に発行されたセッション、停止中またはプランのない組織が該当します。 | kaleidr.com/api-keys でキーと状態を確認します。セッションの場合は交換し直します。有効なキーでも失敗が続く場合は少し待って再試行してください。一時的なプラットフォーム障害でも同じ応答が返ることがあります。 |
publishable_requires_session | 公開可能キー(kld_pk_…)がランタイムエンドポイントに送信されました。 | ブラウザーでは SDK に交換させるか、最初に POST /sdk/sessions を呼び出します。バックエンドではサーバーキーを使用します。 |
認可: 403
API は認証情報を認識しましたが、このリクエストを拒否しています。
| コード | 発生条件 | 対処方法 |
|---|---|---|
insufficient_scope | このエンドポイントまたは製品に必要なスコープを持たずにキーが作成されました。 | 必要なスコープを持つキーを使用します。既存のキーにスコープを追加することはできません。 |
tier_capability_not_allowed | キーは該当するスコープまたは製品を持っていますが、組織の現在のプランには含まれていません。公開マップの所有者のプランにチャットが含まれない場合にも返されます。ただし vendor は例外です。Enterprise 未満のプランで vendor を持つキーは拒否されず、回答が自社データを使用しなくなります。 | プランを変更するか、プランに含まれる製品 を使用します。 |
server_key_in_browser | サーバーキー(kld_sk_…)が Origin ヘッダーとともに送信されました。 | バックエンドから呼び出してください。キーがページのソースに含まれていた場合はローテーションします。 |
session_origin_mismatch | セッショントークンが発行元と異なるオリジンで使用されたか、公開マップのセッションが Origin なしで使用されました。 | 使用するページでセッションを交換してください。 |
ip_not_allowed | IP 許可リストを持つサーバーキーまたは旧形式のキーが許可リスト外のアドレスから呼び出されたか、呼び出し元アドレスを特定できませんでした。 | 許可済みアドレスから呼び出すか、キーの allowed_ips を変更します。 |
publishable_key_required | サーバーキーまたは旧形式のキーで POST /sdk/sessions を呼び出しました。 | 交換時には公開可能キーを使用します。 |
origin_required | セッション交換に Origin ヘッダーがありません。 | ブラウザーのページから交換します。 |
origin_not_allowed | ページのオリジンがキーの許可済みオリジンや公開マップの許可済みドメインにありません。 | 完全一致するオリジンをキーに、またはドメインをマップに追加します。 |
product_not_allowed | キーが特定の製品に制限され、別の製品へのリクエストが行われました。セッション交換では、要求した product が公開可能キーの許可製品に含まれません。ランタイムでは、サーバーキーまたは旧形式のキーが許可外の製品のエンドポイントを呼び出しました。例として、tile に制限されたキーで /chat/* を呼ぶ場合があります。 | allowed_products を変更するか、別のキーを使用します。 |
chat_disabled | 公開マップの交換:マップの Kaleidr AI が、要求された機能をオンにしていません。 | Studio でマップの Kaleidr AI タイルの Control Tower または Popup Window をオンにします。 |
feature_not_granted | ポップアップ Chat 用に開いた公開マップのセッションが /chat/control/stream で使用されました。機能ごとに別のセッションがあります。 | "feature": "control_tower" でセッションを交換します。Control Tower がオンの間、マップがこれを付与します。 |
owner_has_no_organization | 公開マップの交換:マップ所有者に課金先の組織がありません。 | 所有者は組織を作成するか、既存の組織に参加する必要があります。 |
見つかりません: 404
| コード | 発生条件 | 対処方法 |
|---|---|---|
not_found | 公開マップの交換:指定の share_id を持つ公開マップも共有リンクもありません。 | ID とマップの公開状態を確認します。 |
sessions_disabled | プラットフォームでセッション交換が無効 です。 | 利用者側では変更できません。サポートに連絡してください。 |
Not Found | パスが存在しません。 | /inference-api/b2b/v1 プレフィックスも含め、エンドポイントの URL と照合してください。 |
検証: 422
リクエスト本文またはクエリ文字列がエンドポイントの受け付ける形式と一致しません。detail は配列で、各要素の loc がフィールド名、msg が問題の内容を示します。
{
"detail": [
{ "type": "missing", "loc": ["body", "product"], "msg": "Field required", "input": {} }
]
}
リクエストを修正し、同じ内容をそのまま再送しない でください。ストリーミングエンドポイントの /chat/summary/stream と /chat/button/stream は、本文の形式が不正な場合、フィールド長超過を除いて 422 ではなく 500 を返します(下記参照)。
リクエスト制限: コード付き 422
形式は正しいもののサイズ制限を超えるリクエストも 422 になります。この場合はラップされた形式で、detail は配列ではなくコード文字列です。課金は発生しません。
{ "detail": "conversation_too_long" }
| コード | エンドポイント | 発生条件 | 対処方法 |
|---|---|---|---|
too_many_messages | /chat/control/stream | messages が 400 件を超えています。 | 直近の会話ターンだけ を送信します。 |
message_too_long | /chat/control/stream | 1 件のメッセージの content が 64,000 文字を超えています。 | メッセージを短くします。 |
conversation_too_long | /chat/control/stream | 全メッセージの content の合計が 200,000 文字を超えています。 | 古いターンを削除して再送します。 |
invalid_session_id | /chat/control/stream | session_id が 128 文字を超えるか、英数字、_、.、:、- 以外の文字を含んでいます。 | UUID など、その形式の ID を使用します。 |
lang_too_long | /chat/control/stream | lang が 35 文字を超えています。 | pt-BR のような BCP 47 言語タグを送ります。 |
invalid_layout | /chat/control/stream | layout が 16 文字を超えています。 | viewer がガイドのレイアウトを表示している間は guide を送るか、省略します。 |
field_too_long | /chat/summary/stream, /chat/button/stream | テキストフィールドが長さの上限を超えたか、リストの要素数が上限を超えています。 | フィールドを短くします。上限はエンドポイントに記載されています。 |
チャットストリームの制限はエンドポイントを参照してください。
リクエストが 大きすぎます: 413
| コード | 発生条件 | 対処方法 |
|---|---|---|
request_too_large | 本文が 2 MiB、または /design/* エンドポイントで 5 MiB を超えています。レスポンス本文は {"detail": "request_too_large"} です。課金は発生しません。 | 会話履歴や設計リクエストのサンプル行を減らしてください。同じ本文を再送しないでください。 |
request_body_too_large | /shared-api 以下のキー管理またはビジネスデータのリクエストが 1 MiB、またはアップロード呼び出し POST /shared-api/datahub/ingests が 32 MiB を超えています。 | 本文を小さくします。アップロードについてはビジネスデータのアップロードを参照してください。 |
どのエンドポイントの上限も大幅に超えるサイズを宣言したリクエストは、API に到達する前にネットワークエッジで拒否される場合があります。この応答には Kaleidr の JSON 本文がなく、読み取れるコードもありません。送信量を減らしてください。
サイズ超過など処理前に拒否されたリクエストは課金されず、その後に AI クレジットや同時実行スロットを占有することもありません。