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

エラー

Platform API の失敗は標準 HTTP status code を使用します。ほぼすべての失敗に、client が 分岐に使用すべき安定した subcode string が含まれます — status code だけでは 曖昧です(403 は scope、product、origin、IP、key type を含みます)。

Envelope

ほとんどの error は FastAPI 形式の detail wrapper を返します:

{ "detail": "<subcode>" }

構造化された 429 payload(map_load_quota_exceeded, b2b_overloaded, org_overloaded, tile_access_restricted)は top level の flat object で、 detail wrapper はありません:

{ "error": "map_load_quota_exceeded", "meter": "map_loads", "limit": 50000, "used": 50000 }

String-detail 形式の 429(map-load hard stop)は wrapper を維持します:

{ "detail": "map_load_hard_stop" }

一部の non-streaming endpoint は失敗を error key を持つ HTTP 200 として 返します — 特に POST /chat/control/route です。status だけで分岐すると 成功として扱ってしまいます。必ず body を読んでください。

StatusSubcode意味対応
401(no detail)key がない / 無効 / revoke 済み / expiredkey の値と revoke されていないことを確認してください。Viewer は key 不要です。
401publishable_requires_sessionpublishable key(kld_pk_…)が direct bearer として送信されたSDK 経由で使用し、session と交換してください。
403insufficient_scope有効な key だが route に必要な scope がない正しい scope(ai / maps / design)を持つ key を mint / re-mint してください。
403tier_capability_not_allowed保存済み key は capability を 持っていた が、org の現在の tier では許可されなくなった(通常 Pro→Free downgrade)plan を upgrade するか、現在の tier が許可する product を使用してください。
403origin_requiredpublishable key が browser Origin なしで使用された(例:server-side)publishable key は browser 専用です。
403session_origin_mismatchrequest Origin が key の allowlist にないkey の allowed origins を更新してください(APIキーを取得 参照)。
403product_not_allowedkey がこの product に許可されていないproduct が許可された key を mint してください(または keyless の viewer を使用)。
403server_key_in_browserserver key(kld_sk_…)が browser から使用されたserver key は server-side 専用で、CORS でも block されます。
403ip_not_allowedserver key が allowlist 外の IP から使用されたkey の IP allowlist を更新するか、許可された address から呼び出してください。
403publishable_key_requiredSDK session exchange が publishable key 以外で試行されたsession-exchange step では kld_pk_… key を使用してください。
403sessions_disabledこの deployment では session 発行が無効support に連絡してください — 顧客設定ではなく運用状態です。
403sessions_not_configuredsession infrastructure が設定されていないsupport に連絡してください。
422(various)request body が不正payload を修正してください(Endpoints 参照)。mint 時の unknown_scope / unknown_product は未認識値を意味します。publishable_live_requires_origins は live publishable key が allowed origins なしで mint されたことを意味します。
429(flat) map_load_quota_exceededorg の月間 map-loads allowance を使い切ったupgrade するか basemap load を減らしてください。
429map_load_hard_stop有料 org が map-loads allowance の 5× を超過ここで配信停止。allowance を超えた soft band はそれまでは動作します。
429(flat) tile_access_restrictedTile request が拒否された(通常は origin allowlist 不一致)。Retry-After: 3600 を含むpage origin を key allowlist に追加し、header interval 後に retry してください。
429(flat) b2b_overloadedglobal request-shedding が有効back off し、jitter を入れて retry してください。
429(flat) org_overloadedorg 単位の sheddingback off して retry してください。
429limiter_unavailablerate limiter が一時的に到達不能transient として扱い、retry してください。
429rate_limited現在 request が多すぎるRetry-After に従ってください。
503(no detail)key service が一時的に利用不能transient — 少ししてから retry してください。

Key management

POST/PATCH/DELETE /shared-api/api-keys/* からの失敗(Cognito org-admin JWT を使用。platform key ではありません):

StatusSubcode意味
403free_plan_publishable_onlyFree-tier org は publishable key のみ mint できます。
403plan_requiredorg に認識済み API plan row がありません。
403tier_capability_not_allowedPATCH が org の現在の tier admission を超えて key を拡張しようとした。
403vendor_scope_requires_acknowledgementvendor scope には key ごとの明示的な acknowledgement flag が必要です。
409key_limit_reachedorg が plan の per-org key limit に到達しました。

完全な mint flow と PATCH update path は APIキーを取得 を 参照してください。

Streaming error

SSE stream では、terminal failure は HTTP status ではなく error event として到着します (response はすでに 200 で開始済みです):

event: error
data: { "type":"error", "message":"…", "code":"…", "partial_text":"…" }

error event はその stream の終了として扱ってください。stream 途中の quota event は error ではありません — 残り budget を示す meter です。 client は未知の event name を無視する必要があります — stable contract 内では version bump なしで 新しい event が追加される場合があります。

Browser で CORS が "blocked"

実際の request で browser が CORS block を報告する場合、request Origin が key allowlist にありません — auth failure ではありません。 CORS & allowed origins を参照してください。