CMO AI Pro Developers
エラー
HTTPステータスと業務エラーコードの意味および対応方法を説明します。
最終更新日:2026年10月26日
エラーは2つの層に分かれています。どちらも処理してください。
- HTTPステータス: 通信・認証・利用条件のエラー。ツールは実行されていません
- 業務エラー: ツールは実行され、業務上の理由で失敗したもの。応答本文の
error.codeに入ります
HTTPステータス
| ステータス | 主な意味 | 対応 |
|---|---|---|
| 401 | キーが誤っている、期限切れ、失効済み、または発行ユーザーが組織を離れている | キーの状態と接続設定を確認する。必要なら再発行する |
| 403 | 契約状態(無料トライアル未付与・契約終了後・完全停止)、または接続元(Origin)の確認で拒否された | 組織管理者またはサポートへ確認する |
| 429 | 1分あたりの呼び出し上限に達した | 少し待ってから再試行する |
| 503 | MCP連携が一時停止中、または認証基盤を利用できない | 時間をおいて再試行し、続く場合はサポートへ連絡する |
401が返るときは、エラー本文に理由の詳細は含まれません。キーの有無を外部から推測できないようにする ためです。OAuth接続では、WWW-Authenticate ヘッダーで認可の入口を案内します。
OAuthエラー
| コード | 意味 | 対応 |
|---|---|---|
access_denied | 利用者が同意画面で接続を拒否した | 接続をやり直し、接続する組織を選んで「許可する」を押す |
invalid_grant | 認可コード・更新用トークンの期限切れ、または再利用 | クライアントで接続を解除して再接続する |
業務エラー
応答は次の形です。
{
"ok": false,
"error": {
"code": "payment_required",
"message": "クレジットが不足しています(必要60 / 残高10)",
"required": 60,
"balance": 10,
"retryable": false
}
}| code | 意味 | 典型的な原因 | 対応 |
|---|---|---|---|
payment_required | クレジット不足、またはAPIキーの日次上限 | 残高不足、その日の生成量が上限に到達 | 残高を確認する。日次上限の場合は翌日以降に再試行する |
plan_required | プランの契約が必要 | 無料トライアルが終了した、またはトライアルのクレジットがない組織で get_plan_status 以外を呼んだ | 再試行しない(retryable: false)。get_plan_status で契約の方法を確認し、利用者に伝える |
not_found | 対象が存在しない、またはこのキーの組織から利用できない | IDの誤り、別組織のID | IDと、キーを発行した組織を確認する |
conflict | 同じ処理が実行中、同時実行上限、更新日時の不一致、状態の不整合 | 楽観ロックの失敗、ジョブ重複 | 最新データを読み直す、または実行中ジョブの完了を待つ |
validation_error | 入力が要件を満たしていない | 必須項目の欠落、文字数超過、形式違反 | メッセージに従って入力を修正する |
audio_not_confirmed | 動画組み立て前の音声確認が未記録 | stage: "video" で audio_confirmation が無い、または confirmed_by_user が true でない | 利用者に音声を確認してもらい、発言を audio_confirmation.user_message に入れて再実行する(retryable: false)。形式不正は validation_error |
service_not_configured | 運営側の必須設定が deployment に無い | 漫画ショート動画の生成・組み立てをジョブ開始前に拒否した | 再試行せず、区分と文言を利用者へ報告する(retryable: false)。env 名や秘密値は応答に含まれない |
provider_not_configured | 外部 API 用の必須キーが未設定 | ジョブ実行中に外部 API 呼び出し前で判明、または同期処理中にツールが失敗 | 再試行しない(retryable: false)。運営側の設定の問題として利用者へ報告する |
provider_auth_failed | 外部 API の認証失敗 | 401/403(キー誤り・権限不足。ElevenLabs音声の利用枠不足として識別した401は除く) | 再試行しない(retryable: false)。運営側の設定の問題として利用者へ報告する |
provider_quota_exhausted | 外部 API の利用枠不足 | ElevenLabs音声の402、または400/401で利用枠不足として識別した応答 | 再試行しない(retryable: false)。利用者のcr残高不足とは別の問題として、運営へ問い合わせる |
provider_input_invalid | 外部 API が入力または声を受理しなかった | ElevenLabs音声のその他対象4xx(認証失敗・混雑・利用枠不足を除く) | 同じ入力で再試行しない(retryable: false)。声と読み指定を確認し、修正してから新しいキーで再実行する |
provider_rate_limited | 外部 API のレート制限 | 429 | 時間をおいて再試行する(retryable: true) |
provider_server_error | 外部 API のサーバー障害 | 5xx | 時間をおいて再試行する(retryable: true) |
provider_request_failed | 上記以外の外部 API 失敗 | HTTP 失敗・通信例外など | 1回だけ再試行し、再度失敗したら報告する(get_job_status では retryable: null) |
internal_error | 一時的な内部エラー | サーバー側の一時障害 | 時間をおいて再試行し、続く場合はサポートへ連絡する |
漫画ショート動画: ツール応答と `get_job_status` の区別
| 区分 | 返る場所 | 主な code |
|---|---|---|
| 起動前(課金予約・ジョブ作成前) | ツール応答の error.code | service_not_configured、audio_not_confirmed ほか通常の業務エラー |
| ジョブ実行中の失敗 | get_job_status の errorCode と retryable | provider_*(メッセージ内の [MSV:…] から読み取る) |
provider_* は、非同期ジョブでは get_job_status をポーリングして errorCode / retryable を見ます。 同期処理中に外部 API が失敗した場合は、同じ code がツール応答の error.code に入ることがあります (そのとき retryable は応答本文の値に従います)。詳細は 基盤ツール `get_job_status`を参照してください。
retryable の意味
error.retryable は、同じ入力で再試行して結果が変わりうるかを示します。
true: 時間をおいて再試行する価値がある(internal_error、実行中を示すconflict、provider_rate_limitedなど)false: 入力または前提を変えないかぎり、何度実行しても同じ結果になる(service_not_configured、audio_not_confirmed、provider_not_configuredなど)get_job_statusのretryableがnullのとき(漫画ショート動画のprovider_request_failedなど)は、1回だけ同じ入力で再試行し、再度失敗したら利用者へ報告する
通信断などで起動結果が不明な場合は、最初と同じ idempotency_key・同じ入力で再送して元の結果を確認します。 同期ツールが再試行可能な失敗を返した場合も、同じキー・同じ入力で再試行します。 一方、起動に成功した非同期ジョブの最終失敗を get_job_status で確認し、再実行するときは、 新しい冪等キー(idempotency_key)で新規実行します。起動時の成功結果は確定済みなので、 旧キーでは失敗した元のジョブが返るだけで再起動されません。再実行の可否はそのジョブの retryable に従います。 validation_error の入力を修正した場合や、更新競合の後に最新データを読み直して操作内容を変えた場合も、 新しいキーを使います。確定済みの結果に同じキーを使うと、最初の結果がそのまま返ります。 詳しくは共通仕様を参照してください。
追加のフィールド
エラーの種類によって、判断材料になるフィールドが付きます。
| フィールド | 付く場面 | 内容 |
|---|---|---|
required / balance | 残高不足の payment_required | 必要クレジット数と現在の残高 |
jobId | 実行中を示す conflict | 実行中ジョブのID。get_job_status で追跡できる |
payment_requiredの切り分けには、まずmessageを確認してください。 「APIキーの日次クレジット上限に達しました。」なら日次上限です。この場合のrequiredは日次上限、 balanceは今回の確保対象額であり、組織の利用残高ではありません。 requiredとbalanceの大小だけで、残高不足と日次上限を判定しないでください。
無料トライアル中の組織では、ツール結果のJSONに planNotice(kind と message)が付くことがあります。 CMO AI Pro から利用者へのお知らせです(例: クレジットが足りないときの月額プランの案内、トライアル終了の予告)。 作業の区切りで利用者に伝えてください。有料プランの組織の応答には付きません。
エラーメッセージに含まれないもの
安全のため、エラー応答には次を含めません。ログにも出力されません。
- APIキー
- 生成プロンプトの本文
- 画像の署名URL
- 他組織のデータの有無
このため、別組織のIDを指定した場合と、実在しないIDを指定した場合は、どちらも同じ not_found に なります。