メインコンテンツへスキップ

エラーレスポンス形式

タスクが失敗した場合(status: "failed")、レスポンスには error オブジェクトが含まれます:
{
  "id": "task-unified-1772618027-cmeisy8h",
  "object": "image.generation.task",
  "status": "failed",
  "model": "gemini-3.1-flash-image-preview",
  "progress": 0,
  "error": {
    "code": "content_policy_violation",
    "message": "Content policy violation.\nYour request was blocked by safety filters..."
  }
}
フィールド説明
error.codestringエラーコード識別子。以下の完全リストを参照
error.messagestringユーザーフレンドリーなエラー説明とトラブルシューティングのヒント

エラーコード一覧

クライアントエラー(ユーザーが修正可能)

エラーコード説明再試行
content_policy_violationコンテンツがセーフティポリシーに違反コンテンツを修正してから再試行
invalid_parameters無効なリクエストパラメータパラメータを修正してから再試行
image_processing_error画像処理に失敗別の画像を使用
image_dimension_mismatch画像の寸法がリクエストと不一致画像をリサイズしてから再試行
request_cancelledリクエストがキャンセルされた再送信
エラーコード説明再試行
generation_failed_no_contentモデルが出力を生成できなかった別のプロンプトで再試行
service_error内部サービスエラー自動回復、後で再試行
generation_timeoutタスク処理がタイムアウト後で再試行
resource_exhausted上流リソースが一時的に枯渇自動回復、後で再試行
quota_exceededレート制限またはクォータ超過頻度を下げて後で再試行
service_unavailableサービスが一時的に利用不可自動回復、後で再試行
resource_not_foundタスクIDが無効または期限切れタスクIDを確認
unknown_error未分類のエラーサポートに連絡

エラーコード詳細

content_policy_violation

コンテンツポリシー違反

リクエストがセーフティフィルターによりブロックされました。これは最も一般的なエラータイプで、以下のシナリオをカバーします:
一般的なトリガー:
サブタイプ説明メッセージ例
フォトリアルな人物アップロード画像に実際の人間の顔が含まれているphotorealistic people detected
有名人の肖像有名人や著名人に関連celebrity detected in image
著作権/商標ブランドロゴ、商標、著作権保護IPに関連third-party content violation
アダルト/NSFWヌードや性的示唆のあるコンテンツnudity detected
暴力/自傷暴力的、グラフィック、自傷的なコンテンツviolence content blocked
未成年者保護未成年者に関する機密コンテンツminor content not allowed
一般ポリシーその他のコンテンツポリシー違反content policy violation
回避方法:
  • 実際の人物写真のアップロードを避け、イラストやカートーンスタイルを使用
  • ブランドロゴ、商標、著作権保護IPキャラクターを削除
  • アダルト、暴力、自傷的なテーマを避ける
  • 特定の有名人を参照せず、一般的な人物描写を使用(例:「a person」)

generation_failed_no_content

生成失敗

モデルがリクエストに対する出力を生成できませんでした。リクエスト形式は有効でしたが、処理中にモデルが結果を生成できませんでした。
一般的な原因:
  • プロンプト品質の低さ:説明が曖昧すぎるか矛盾しており、モデルが理解できない
  • モデル能力の限界:プロンプトがモデルの生成能力を超えている
  • 上流サービスの問題:基盤モデルサービスが空の結果を返した
  • 保護コンテンツの検出:プロンプトまたは参照画像にウォーターマーク除去や保護コンテンツ(ロゴ、商標等)が含まれている可能性
修正方法:
  • プロンプトをより明確で具体的に調整
  • 別の参照画像を使用 — ウォーターマークやロゴのある画像を避ける
  • リクエストを簡素化(低解像度や複雑さを軽減)
  • 単純に再試行 — 一部のケースでは再試行で成功

invalid_parameters

無効なパラメータ

リクエストパラメータがモデルの要件を満たしていません。
一般的なサブタイプ:
サブタイプ説明
プロンプトが長すぎるプロンプトがモデルの最大長を超過Prompt is too long
画像寸法画像の幅/高さやアスペクト比が範囲外image dimensions must be between 240 and 7680
ファイルが大きすぎるアップロードファイルがサイズ制限を超過file size exceeds 10MB
非対応フォーマットアップロードファイルのフォーマットが非対応unsupported file type
動画時間動画時間がモデルのサポート範囲外Video duration must be between 1-30 seconds
修正方法:
  • モデル固有のAPIドキュメントでパラメータ要件を確認
  • 対応画像形式:JPG、PNG、WebP、GIF(HEIC、AVIF、TIFFは非対応
  • 画像サイズ制限:通常 < 10MB、一部モデル < 30MB
  • プロンプトを短くするか、長いプロンプトをコア説明に分割

image_processing_error

画像処理失敗

システムが入力画像を処理できませんでした。
一般的な原因:
  • 画像URLにアクセスできない(認証が必要、CDN制限、リンク期限切れ)
  • 画像形式が非対応(例:HEIC、AVIF)
  • 画像ファイルが破損
  • ネットワークの問題により画像のダウンロードに失敗
修正方法:
  • 画像URLが認証やリージョン制限なしで公開アクセス可能であることを確認
  • 標準形式を使用:JPG、PNG、WebP
  • URLの代わりにファイルアップロードAPIを使用してみる
  • 画像がブラウザで正しく開けることを確認

image_dimension_mismatch

画像寸法不一致

入力画像の寸法がリクエストで指定された寸法と一致しません。画像から動画への変換シナリオでよく発生します。
例:
  • aspect_ratio=1280x720(16:9)の場合、1280x720の横長画像が必要
  • aspect_ratio=720x1280(9:16)の場合、720x1280の縦長画像が必要
修正方法: リクエストの aspect_ratio パラメータに合わせて画像をリサイズするか、画像に合わせて aspect_ratio を変更してください。

service_error

サービスエラー

上流サービスで内部的な問題が発生しました。通常は一時的で、システムが自動的に他の利用可能なルートに切り替えます。
一般的な原因:
  • 上流モデルサービスが一時的に利用不可
  • サーバー過負荷/高トラフィック
  • メンテナンス中
  • ネットワーク接続の中断
修正方法:
  • 30-60秒待ってから再試行 — システムは通常自動回復します
  • 継続する場合はテクニカルサポートに連絡
  • リクエストを変更する必要はありません — 同じリクエストを再試行

generation_timeout

生成タイムアウト

タスクが許可された時間内に完了しませんでした。
一般的な原因:
  • システム負荷が高く、キュー遅延が発生
  • タスクの複雑さが高い(高解像度、長い動画等)
  • 上流サービスの応答が遅い
修正方法:
  • 後で再試行、できればオフピーク時に
  • タスクの複雑さを軽減:解像度を下げる、動画時間を短くする
  • プロンプトの説明を簡素化

quota_exceeded

クォータ/レート制限超過

リクエスト頻度または同時実行制限を超過しました。
一般的な原因:
  • 短時間に多すぎるリクエストを送信(レート制限)
  • 複数のタスクが同時に処理中(同時実行制限)
  • アカウントクォータが枯渇
修正方法:
  • リクエスト頻度を下げる — リクエスト間隔は1-2秒を推奨
  • 進行中のタスクが完了してから新しいタスクを送信
  • クォータが枯渇した場合は課金ページでチャージ

resource_exhausted

リソース枯渇

上流サービスのコンピューティングリソースが一時的に枯渇。通常、モデル使用のピーク期間に発生します。
修正方法:
  • 1-5分待てば自動回復
  • システムは複数のルート間で自動切り替え — 後で再試行すれば通常成功

resource_not_found

リソースが見つからない

リクエストされたタスクIDが存在しないか、期限切れです。
修正方法:
  • タスクIDのスペルが正しいか確認
  • タスク結果には有効期限があり、期限切れのタスクは照会できません
  • IDが正しい場合、少し待ってから再試行

request_cancelled

リクエストがキャンセルされた

タスクが処理中にキャンセルまたは中断されました。
意図的にキャンセルしていない場合は、同じリクエストを再送信するだけです。

service_unavailable

サービス利用不可

内部認証または接続の問題が発生しました。このエラーは自動的に記録され、通常すぐに解決されます。
修正方法:
  • 数分待ってから再試行
  • 継続する場合はタスクIDを添えてテクニカルサポートに連絡

unknown_error

不明なエラー

未分類のエラー。システムが特定のエラータイプを識別できませんでした。
修正方法:
  • 少し待ってから再試行
  • 問題が続く場合は、完全なタスクIDを添えてテクニカルサポートに連絡

ベストプラクティス

エラー処理の例

import requests
import time

def poll_task_with_retry(task_id, api_key, max_retries=3):
    """Poll task status with automatic retry for server errors"""
    headers = {"Authorization": f"Bearer {api_key}"}

    for attempt in range(max_retries):
        resp = requests.get(
            f"https://api.evolink.ai/v1/tasks/{task_id}",
            headers=headers
        )
        data = resp.json()

        if data["status"] == "completed":
            return data["results"]

        if data["status"] == "failed":
            error = data.get("error", {})
            code = error.get("code", "unknown_error")
            message = error.get("message", "")

            # Client errors — not retryable, fix the request
            if code in [
                "content_policy_violation",
                "invalid_parameters",
                "image_processing_error",
                "image_dimension_mismatch",
            ]:
                raise Exception(f"Client error [{code}]: {message}")

            # Server errors — retryable
            if code in [
                "generation_failed_no_content",
                "service_error",
                "generation_timeout",
                "resource_exhausted",
                "quota_exceeded",
            ]:
                if attempt < max_retries - 1:
                    wait = 2 ** attempt * 5  # 5s, 10s, 20s
                    time.sleep(wait)
                    continue
                raise Exception(f"Server error [{code}]: {message}")

            raise Exception(f"Error [{code}]: {message}")

        # Task still processing
        time.sleep(3)

    raise Exception("Max polling attempts exceeded")

再試行可能 vs 再試行不可

リクエスト修正後に再試行

  • content_policy_violation — コンテンツを修正
  • invalid_parameters — パラメータを修正
  • image_processing_error — 別の画像を使用
  • image_dimension_mismatch — 画像をリサイズ

直接再試行可能

  • generation_failed_no_content — 別のプロンプトで再試行
  • service_error — 待ってから再試行
  • generation_timeout — 待ってから再試行
  • resource_exhausted — 自動回復
  • quota_exceeded — 頻度を下げてから再試行