エラー
Video API endpoints からのすべてのエラーは、同じ JSON shape を使用します:
{
"error": {
"code": "...",
"message": "..."
}
}HTTP status は問題の種類を示します。error.code はコード上で分岐に使える安定した文字列です。error.message を parse するのではなく、常に error.code で判定してください。
エラーコード
references_conflict と too_many_references は request-body validation errors です。正確な上限は 動画を作成 をご覧ください。cancel_not_supported と cancel_failed は 動画をキャンセル で説明しています。not_found は、未知の job と、別の API key が所有する job の両方で返されます。この2つは意図的に区別できません。
real_person 前処理エラー
real_person: true の画像前処理が入力画像の問題で失敗した場合、API は HTTP 400 と error.code: "invalid_request" を返します。error.message の末尾には次の安定した理由コードのいずれかと、失敗した参照位置(例:input_references[0])が含まれます:
{
"error": {
"code": "invalid_request",
"message": "real_person image processing failed — input_references[0]: ... (not_image)"
}
}アプリケーションの分岐では引き続き error.code を使用し、理由コードと参照位置は入力の修正や診断に利用してください。
402 残高不足
insufficient_credits は job 作成時(POST /v1/videos)にのみ返されます。事前承認が有効な場合、ofox は job を受理する前に、リクエストされた resolution と duration からコストを見積もります。その見積もりが残高を超える場合、リクエストは即座に拒否されます。job record は作成されず、課金も発生しません。
{ "error": { "code": "insufficient_credits", "message": "..." } }insufficient_credits は Video API が返す唯一の 402 code です。この1つの code を処理し、残高を追加してから再試行してください。
429 レート制限
rate_limited は、GET /v1/videos/{id} の key ごとのポーリング制限と、アップストリームのレート制限の両方を表します。ポーリング制限に達した場合、レスポンスには Retry-After header が含まれます:
HTTP/1.1 429 Too Many Requests
Retry-After: 1
Content-Type: application/json
{ "error": { "code": "rate_limited", "message": "..." } }Retry-After header に従い、再試行前にバックオフしてください。頻繁にポーリングしている場合は、webhook 通知 に切り替えると、ofox が終端状態を push するため、ポーリング制限を完全に回避できます。Job 作成(POST)とキャンセル(DELETE)はポーリング制限の影響を受けません。