# エラー

エラーレスポンスの構造、すべてのエラーコード、再試行のタイミング。

出典：https://scifig.ai/ja/docs/api/errors

## レスポンス構造

```json
{
  "error": {
    "code": "INSUFFICIENT_CREDITS",
    "message": "Not enough credits.",
    "request_id": "a698a9af-0685-4557-9b29-ca57637748f9",
    "details": { "top_up_url": "https://scifig.ai/pricing?utm_source=api" }
  }
}
```

分岐には `error.code` と `details.reason` を使用し、変更される可能性のある `message` は使わないでください。レスポンスには内部診断情報を含みません。

## コード

| コード | HTTP | 意味 | 再試行 |
| --- | --- | --- | --- |
| UNAUTHORIZED | 401 | 認証情報が未指定または無効です。 | 不可。リクエストを変更、または新しいキーを使用 |
| ACCOUNT_UNAVAILABLE | 401 | このアカウントは API を利用できません。 | 不可。リクエストを変更、または新しいキーを使用 |
| SCOPE_DENIED | 403 | この認証情報に必要な権限がありません。 | 不可。リクエストを変更、または新しいキーを使用 |
| INVALID_REQUEST | 400 | リクエストが無効です。 | 不可。リクエストを変更、または新しいキーを使用 |
| IDEMPOTENCY_KEY_REQUIRED | 400 | Idempotency-Key ヘッダー（表示可能な ASCII 文字 1～255 文字）が必要です。 | 不可。リクエストを変更、または新しいキーを使用 |
| IDEMPOTENCY_CONFLICT | 409 | この Idempotency-Key は別のリクエストですでに使われています。 | 不可。リクエストを変更、または新しいキーを使用 |
| IDEMPOTENCY_IN_PROGRESS | 409 | この Idempotency-Key のリクエストはまだ処理中です。 | 可。同じ Idempotency-Key を使用 |
| NOT_FOUND | 404 | 見つかりません。 | 不可。リクエストを変更、または新しいキーを使用 |
| REVISION_CONFLICT | 409 | グラフまたはフローチャートのジョブを今は編集できません：`NOT_LATEST_REVISION`、`EDIT_IN_PROGRESS`、または親ジョブの実行中を示す `PARENT_JOB_RUNNING`。 | `PARENT_JOB_RUNNING` の場合のみ、`Retry-After` 後に同じキーで再試行。それ以外は最新バージョンを新しいキーで編集 |
| PAYLOAD_TOO_LARGE | 413 | リクエスト本文が大きすぎます。 | 不可。リクエストを変更、または新しいキーを使用 |
| INSUFFICIENT_CREDITS | 402 | クレジットが不足しています。 | 不可。リクエストを変更、または新しいキーを使用 |
| CONTENT_REJECTED | 422 | コンテンツポリシーがリクエストを拒否しました。作成時は `422`、タスク実行中は失敗したジョブの `error.code` で返します。どちらも返金されます。 | 不可。プロンプトまたは入力を変更し、新しいキーを使用 |
| PLAN_REQUIRED | 403 | 現在のプランではこのオプションを利用できません。 | 不可。リクエストを変更、または新しいキーを使用 |
| RATE_LIMITED | 429 | リクエスト数、1 時間のタスク数、1 日の変換数、またはアップロード数が上限を超えています。`details.reason` が該当する制限を示します。 | 可。同じ Idempotency-Key を使用 |
| CONCURRENCY_LIMITED | 429 | このアカウントで実行中のタスクが多すぎます。 | 可。同じ Idempotency-Key を使用 |
| SERVICE_UNAVAILABLE | 503 | サービスは一時的に利用できません。同じ Idempotency-Key で再試行してください。 | 可。同じ Idempotency-Key を使用 |
| TASK_FAILED | 502 | タスクが失敗し、クレジットは返還されました。再試行するには、新しい Idempotency-Key で新しいリクエストを送信してください。 | 不可。リクエストを変更、または新しいキーを使用 |
| INTERNAL_ERROR | 500 | 内部エラー。 | 可。同じ Idempotency-Key を使用 |

`INVALID_REQUEST` には、情報がある場合に `details.reason`、`details.field`、`details.issues` が含まれることがあります。本文が上限（JSON は 256 KB、アップロードはファイル別上限）を超えると `413 PAYLOAD_TOO_LARGE` を返します。`details.top_up_url` は `INSUFFICIENT_CREDITS` のみに含まれます。作成リクエストがジョブ作成後に失敗した場合（`429`、`503`、`409 IDEMPOTENCY_IN_PROGRESS`、`500 INTERNAL_ERROR`）、`details.job_id` がそのジョブを示します。同じ Idempotency-Key で再試行するか、`GET /jobs/{job_id}` でポーリングし、新しいキーは使わないでください。

## 失敗したジョブ内のコード

作成後に失敗したジョブは `status: "failed"` と `error` オブジェクトを返します。拒否されたリクエストに使う上記コード以外に、`error.code` は次の値を取ります：

| error.code | 意味 | 対処方法 |
| --- | --- | --- |
| TASK_TIMED_OUT | タスクがタイムアウトし、返金されました。科学図表の生成・編集には `late_delivery_until` が含まれる場合があり、その時刻までは無料で結果が届く可能性があります。 | `late_delivery_until` までジョブを読み続ける。それ以外は新しいキーで新しいリクエストを送信 |
| CONTENT_REJECTED | タスクの実行中にコンテンツポリシーが結果を拒否しました。返金済みです。作成時にリクエスト自体が拒否された場合も、同じコードを `422` で返します。 | プロンプトまたは入力を変更し、新しいキーを使用 |
| ADMISSION_INCOMPLETE | 再試行可能なエラーにより、ジョブは開始されませんでした。クレジットは使用していません。 | 同じリクエストを同じ Idempotency-Key で送信 |
| TASK_NOT_FOUND | ジョブは受け付けられましたが、対応するタスクが見つからなくなりました。 | 新しいキーで新しいリクエストを送信 |
| TASK_FAILED | タスクが失敗し、返金されました。固有の公開コードがないエンジン障害はすべて `TASK_FAILED` になり、エンジンのコードは `details.reason` に含まれます。 | 新しいキーで新しいリクエストを送信 |
| INTERNAL_ERROR | 理由が報告されずにタスクが失敗しました。返金済みです。 | 新しいキーで新しいリクエストを送信 |

## 429 の原因

- リクエスト数の超過：作成は認証情報ごとに 1 分 20 件、アカウントごとに 40 件、読み取りは認証情報ごとに 1 分 120 件。`Retry-After` は枠のリセットまでの時間です。`details.reason` は含まれません。
- 直近 1 時間に開始したタスク数の超過：アカウントごとに最大 200 件、ウェブサイトと共有。`Retry-After: 30`。
- 実行中タスク数の超過：`429 CONCURRENCY_LIMITED`。プラン別で、ウェブサイトと共有（`GET /credits` を参照）。`Retry-After: 30`。
- 無料の PNG・PDF・TIFF・PPTX 変換、1 日 200 回の枠を使い切りました。`details.reason = DAILY_CONVERSION_LIMIT` と、日次枠リセットまでの `Retry-After` を返します。
- アップロードの頻度超過：`details.reason = UPLOAD_RATE_LIMITED`。`POST /files` の画像・マスク、フローチャートの添付、グラフのデータに、ウェブサイトの分ごとの上限を適用します。
- 1 日のアップロード数の超過：`details.reason = UPLOAD_DAILY_LIMIT_REACHED`。フローチャートの添付とグラフのデータに、ウェブサイトの日次上限を適用します。
- 文字検出：アカウントごとに 15 分間で 20 回、ウェブサイトと共有。
