エラー
エラー
BeatAPI は、定義済みのコードで失敗を報告します。code または retryable で分岐してください。message は原因を人に伝える英語の文です。第三者の名前、ステータスコード、エラー本文をそのまま返すことはありません。サポート用に request_id を保存してください。
エラーオブジェクト
画像・動画タスク、GET /v1/tasks/{task_id}、機能、ワークフロー、/v1/systemone(別名 /v1/decisions)、/v1/moderations、/v1/social-data/call、/v1/web/* は、共通のエラー形式を返します。
テキストエンドポイントは SDK 独自のエラー形式を維持します。テキストエンドポイントを参照してください。
POST /v1/moderations もこの形式を使います。このエンドポイントのみ、エラーに OpenAI の type と param(常に null)を追加し、OpenAI SDK が通常の例外を送出できるようにします。Moderation API を参照してください。
失敗が現れる場所
タスクには 2 つの失敗タイミングがあり、応答も異なります。
- 作成時。 タスクが存在する前にリクエストが拒否されます。HTTP エラーと
errorオブジェクトが返り、data.idはありません。課金されません。 - 受け付け後。
POSTはdata.idを含む201を返しています。後でstatus: "failed"となります。GET /v1/tasks/{task_id}は引き続き200で、失敗はdata.error_code、data.error_message、data.retryableに示されます。仮確保したクレジットは返金されます。
同じ失敗にはどちらでも同じコードが付き、利用ログのエラー行も同じです(content_policy_violation: The request was blocked…)。受け付け済みタスクの終了時のコードは、content_policy_violation、bad_request、processing_unavailable、processing_timeout、processing_failed、result_transfer_failed のいずれかです。その他はリクエスト時の拒否を示します。
コード一覧
processing_unavailable と rate_limit_exceeded は異なります。rate_limit_exceeded は利用者のリクエスト頻度を下げる必要がある状態です。processing_unavailable は、リクエスト自体は適切でも、モデルが今は処理を受けられない状態です。
BeatAPI 自身は 502 と 504 を返しません。それでも見られる場合は、BeatAPI に到達できなかったネットワークのエッジで発生しており、本文は JSON ではありません。503 と同様にバックオフして再試行してください。本文が error code: 1010 の 403 もエッジで発生しています。Python の urllib など、クライアントの標準 User-Agent が拒否されたため、User-Agent を明示してください。
Realtime と Webhook のコード
Realtime セッションと Webhook の検証にのみ現れます。
テキストエンドポイント
POST /v1/chat/completions、POST /v1/responses、POST /v1/messages は SDK 本来のエラー形式を維持し、OpenAI/Anthropic SDK が通常の例外を送出します。本文に retryable や request_id フィールドはないため、ステータスと下の表で再試行を判断します。
- OpenAI 形式(
/v1/chat/completions、/v1/responses)は{"error":{"message","type","code"}}。コードはerror.code、error.typeは常にbeatapi_error。リクエスト ID は(request id: …)としてメッセージ末尾に付きます。 - Anthropic 形式(
/v1/messages)は{"type":"error","error":{"type","message"}}。コードはerror.typeに入ります。
ステータス、コード、英語のメッセージは上記と共通です。
再試行方針
- 変更せず再試行しない(
retryable: false)コードはbad_request、content_policy_violation、missing_api_key、invalid_api_key、insufficient_credits、forbidden、not_found、read_request_body_failed、idempotency_conflict。すべての400、401、402、403、404、409、413です。 - 待ってから再試行する(
retryable: true)コードはrate_limit_exceededとuser_concurrency_exceeded。Retry-After/retry_after_secondsに従うか、実行中タスクの完了を待ちます。 - バックオフして再試行する(
retryable: true)コードはinternal_errorと 4 つの503コード。ジッターと上限付きの指数バックオフを使います。失敗したタスクは返金されるため、新しい試行は成功した場合のみ新たに課金されます。再送で 2 つ目のタスクを作らないよう、作成時にIdempotency-Keyを付けます。
変更履歴
- 2026-09-29 —
401は常にmissing_api_key(キー未送信)またはinvalid_api_key(不正、期限切れ、無効、上限到達。理由はメッセージに表示)になりました。旧名称unauthorizedを古いクライアントで見る場合はinvalid_api_keyと同様に扱います。残高不足はテキストを含む全エンドポイントで402 insufficient_creditsです。すべてのエラーにretryableを付け、messageは原因を示す英語の文になりました。 - 2026-09-25 — BeatAPI 自身は
502と504を返さなくなりました。処理失敗(processing_unavailable、processing_timeout、processing_failed、result_transfer_failed)はすべて共通 JSON 形式の503です。完了できない同期 Social Data/Web 呼び出し、バックグラウンドで失敗した調査(返金)も対象です。エッジの502は BeatAPI に到達できなかったもので、本文は JSON ではありません。バックオフして再試行します。 - 2026-09-23 — 受け付け後にパラメーター拒否や入力取得不可で失敗したタスクは、従来の
processing_failedではなくbad_requestを返すようになりました。作成時にモデル独自のステータスをそのまま返さず、審査拒否は常に400 content_policy_violation、モデル利用不可は503 processing_unavailableです。作成時の残高不足は402 insufficient_creditsです。

