チュートリアル
HiAPI コンテンツポリシー拒否(CONTENT_POLICY_VIOLATION):原因と修正
このエラーコードの意味、どこで確認できるか、そしてコンテンツをどう修正すれば審査を通せるか
HiAPI の統一非同期タスクインターフェースで生成タスクを送信する際、プロンプトや入力素材が安全審査を通過できなかった場合、業務エラーコード CONTENT_POLICY_VIOLATION が返されます。公式ドキュメントではその意味を「コンテンツが安全審査を通過しなかった」と説明しており、対処の推奨は「プロンプトまたは入力内容を調整して再試行」です。これは認証の問題でも、残高やパラメータの問題でもありません——コンテンツ自体がブロックされたのです。この記事では、これがどのような形で現れるか、どこで確認できるか、そしてどう修正するかを説明します。
一、問題の現象
コンテンツポリシー拒否には 2 つの出現形態があり、ブロックが送信段階で発生するか、タスク実行段階で発生するかによって異なります。CONTENT_POLICY_VIOLATION は統一非同期インターフェースの業務エラーコードであり、タスク作成時の同期的な error_code、およびタスク終態の data.error.code と同一の列挙体を共有しています(これは「作成時のみ」とはマークされていないため、両方に出現する可能性があります)。
形態 A:作成時に同期的に拒否される。 POST /v1/tasks を呼び出した時点で内容が審査を通らず、失敗エンベロープが返され、error_code が CONTENT_POLICY_VIOLATION になります。エンベロープの形状は次のとおりです(公式ドキュメントの失敗レスポンスに準拠、code は HTTP ステータス、error_code は業務コード):
{
"code": 400,
"message": "...",
"data": null,
"error_code": "CONTENT_POLICY_VIOLATION"
}
この場合、taskIdは取得できません——タスクがそもそも作成されていないからです。
形態 B:タスク実行後に終態が fail になる。 すでに taskId を取得し、タスクが実行された後に不合規と判定されるケースです。このとき GET /v1/tasks/{taskId} をポーリングすると、HTTP は依然として 200 です(エンベロープの message は success ですらあり、それは「今回のクエリが成功した」ことだけを意味し、あなたのタスクの成功を意味しません)。本当の失敗は data の中に隠れています:
{
"code": 200,
"data": {
"taskId": "tk-hiapi-...",
"status": "fail",
"error": { "code": "CONTENT_POLICY_VIOLATION", "message": "..." }
},
"message": "success"
}
一言で言う位置特定の法則:HTTP ステータスコードだけを見ないこと。3 層で読みます——HTTP ステータス(リクエストが受け付けられたか)→ 業務エラーコード(error_code / data.error.code、なぜ拒否されたか)→ タスク状態(data.status がどの段階まで進んだか)。code フィールド(同期エンベロープの error_code または終態の data.error.code)が CONTENT_POLICY_VIOLATION であれば、それはコンテンツ審査によるブロックであり、タイムアウトや接続断、パラメータ誤りとはまったく別物です。message の文言はシナリオによって多少異なる場合がありますが、安定して判定できるシグナルはこのコードであり、message のテキストを正規表現でマッチさせないでください。
Playground / モデルページの「オンライン試用」で同種のブロックが発生した場合、ページはコードを解析させるのではなく、「安全審査を通過しませんでした」というインラインのヒントを直接表示します——これはウェブ試用(同期)経路と、コードで呼び出す API 経路の表示上の違いです。
二、よくある原因(発生確率の高い順)
- プロンプトに許可されない内容が含まれている。 最も一般的です。NSFW / 成人向け、露骨な暴力・流血などの内容は安全審査でブロックされます。多くのモデル自体が明確にNSFW コンテンツをサポートしていないことに注意してください。一部のモデル(GPT Image 2 など)はモデル提供元のコンテンツポリシー(OpenAI コンテンツポリシーなど)にも従います。
- 入力画像 / 参照素材が審査を通過していない。 画像から画像(i2i)、参照画像から動画といったタスクでは、審査されるのはプロンプトだけではありません——アップロードまたは参照した画像、参照素材も同様に審査を通過する必要があります。プロンプトがクリーンでも入力画像が不合規であれば、やはり
CONTENT_POLICY_VIOLATIONになります。 - モデルを変えたらより厳しいポリシーに引っかかった。 モデルによってコンテンツポリシーの寬嚴は異なります。同じプロンプトが A モデルでは通るが B モデルでは拒否されるのは正常です。特に写実的な人物写真、著名人の肖像、ブランド / 著作権素材といった敏感な方向では顕著です。
- 拒否を別のエラーと誤認している。 本当のコンテンツブロックを「サービス不調」と誤解して、そのまま何度も再試行してしまう——同じ内容は何度再試行しても通りません。待つだけ無駄です。
三、修正手順
- まずエラーコードを確認する。 同期レスポンスの
error_codeまたはタスク終態のdata.error.codeから正確なコードを読み取ります。CONTENT_POLICY_VIOLATIONであることを確認し、TASK_FAILED(汎用失敗、多くは一時的な問題や入力画像リンク到達不能)やINVALID_REQUEST(リクエストボディが不正)ではないことを確かめます。コードが違えば、修正方法もまったく異なります。 - プロンプトを項目ごとに整理する。 NSFW / 成人向け、露骨な暴力などの表現を除去し、合规な表現に置き換えてから再送信します。変更は的を絞ったものであるべきで、適当に単語を削るのではありません。
- すべての入力素材を確認する。 画像から画像 / 参照生成の場合は、審査に触れる可能性のある入力画像、参照画像を差し替えます——それらもプロンプトと同様に審査を通過する必要があります。
- 対象モデルのポリシーを確認する。 そのモデルのモデルページで明記されている制限を確認します(例:GPT Image 2 モデルページ には「NSFW コンテンツをサポートせず、OpenAI コンテンツポリシーに従う」と明記されています)。モデルを変更する必要がある場合は、モデルマーケットで各モデルの能力とポリシーを比較できます。
- 修正してから再試行する。 ドキュメントにおけるこのコードの対処推奨は「プロンプトまたは入力内容を調整して再試行」です。注意:失敗したタスクは課金されません——作成時に確保された枠は、タスクが失敗終態に入った後に全額返還されるため、審査でブロックされたタスク自体には費用がかかりません。ただし、同じ違反内容をそのまま繰り返し送信しても通過しません。まず修正してから送信してください。
四、最小検証例
まず「自分の key / 接続に問題があるのではないか」を排除したい場合は、明らかに合规なプロンプトで POST /v1/tasks を一度叩き、正常に taskId を取得できるか確認します(model は裸の id gpt-image-2 を使用):
curl -s -X POST "https://api.hiapi.ai/v1/tasks" \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"input": { "prompt": "a cozy coffee shop storefront at sunrise, warm light" }
}'
{"code":200,"data":{"taskId":"tk-hiapi-..."}}が返る → あなたの key と接続は正常です。先ほど拒否されたリクエストの問題はコンテンツにあります。第三節に戻ってプロンプト / 入力画像を整理してください。HTTP 401+{"error":{"code":"permission_denied",...}}が返る → 認証の問題(key が違う /Authorization: Bearerが付いていない)であり、コンテンツポリシーではありません。- 合规なプロンプトでも
error_code: "CONTENT_POLICY_VIOLATION"が返る → 比較的まれです。このプロンプトに見落としている敏感な単語がないか見直すか、より中立的な表現に変えて再試行してください。
五、関連資料
- 統一非同期インターフェースの完全な業務エラーコード表(
CONTENT_POLICY_VIOLATION、TASK_FAILED、INVALID_REQUESTなどの意味と対処推奨を含む):統一非同期インターフェースドキュメント。 - 特定のモデルのコンテンツ制限を確認したい場合:対応するモデルページまたはモデルマーケットをご覧ください。
六、FAQ
Q:CONTENT_POLICY_VIOLATION と TASK_FAILED の違いは何ですか?
A:前者はコンテンツが安全審査を通過しなかったことで、修正方法はプロンプト / 入力素材を変更することです。後者は汎用失敗で、最も一般的な原因は入力画像 / 動画 URL の到達不能や一時的な変動であり、修正方法は URL の修正 / 再試行です。両者は異なる業務エラーコードであり、混同しないでください。error.code を読めば区別できます。
Q:タスクがコンテンツポリシーで拒否された場合、料金は発生しますか? A:発生しません。ドキュメントによると、タスクが失敗終態に入った後、作成時に確保された枠は全額返還されます。審査でブロックされたタスク自体には費用が発生しません。
Q:同じプロンプトなのに、ウェブの「オンライン試用」では明確な「審査を通過しませんでした」というヒントが表示され、API ではコードしか取得できないのはなぜですか?
A:ウェブ試用は同期経路であり、審査結果をインラインのヒントとして直接表示します。API 経路では結果をレスポンスボディの error_code / data.error.code に格納し、あなたのコードがそれを読み取って分岐処理します。情報は一貫しており、表示方法が異なるだけです。
Q:プロンプトだけを変更し、入力画像はそのままにしたのに、なぜまだ拒否されるのですか? A:安全審査は入力素材を対象としており、プロンプトだけではありません。画像から画像 / 参照生成の場合は、審査に触れる可能性のある入力画像、参照画像も先に差し替えてください。
Q:HiAPI には公開の「コンテンツポリシー」ページがありますか? A:独立したコンテンツポリシーページはありません。各モデルのコンテンツ制限は対応するモデルページに記載されています(例:「NSFW コンテンツをサポートしない」)。プラットフォームレベルの規約は利用規約とプライバシーポリシーをご覧ください。
Q:繰り返し再試行すれば「偶然通る」ことはありますか? A:ありません。同じ違反内容は何度再試行しても通過せず、ポーリングを無駄に消費するだけです。まず第三節に従って内容を修正してから送信してください。
関連記事
すべての記事を見る →-
チュートリアル
HiAPI API で hailuo-2.3-fast/image-to-video を呼び出す方法:curl と Python の実践
高速・低コストな画像から動画へのティアにおける最初の実行可能なリクエスト — モデル ID から MP4 のダウンロードまで
-
チュートリアル
HiAPI APIでhailuo-2.3/text-to-videoを呼び出す方法:curl、Python、実行可能なリクエスト例
-
チュートリアル
HiAPI で Kandinsky 6.0 Pro のテキストto動画を使用する:curl と Python チュートリアル
リクエスト優先の実践デモ:プロンプトから動画クリップへの呼び出しを構築し、リクエストを送信し、完了状態をポーリングし、結果をダウンロードする