> ## Documentation Index
> Fetch the complete documentation index at: https://docs.alforse.com/llms.txt
> Use this file to discover all available pages before exploring further.

# エラーコード

> Alforse API の HTTP ステータス、業務エラーコード、対応方法。

## 概要

エラーは二層で処理します。まず HTTP ステータスを見て、存在する場合は `error.code` を確認します。フィールド名とコード識別子は API 契約のため全言語で変わりません。

## レスポンス形式

```json theme={null}
{
  "error": {
    "code": "PLAN_FEATURE_NOT_ENABLED",
    "message": "Feature is not enabled for this plan",
    "details": { "feature": "workflowAutomation" }
  }
}
```

## HTTP

| ステータス | 意味                                                        | 対応方法                           |
| ----- | --------------------------------------------------------- | ------------------------------ |
| 400   | JSON、フィールド、オプション、人間確認、ファイル入力、金額検証の問題。                     | リクエストデータを修正してから再試行します。         |
| 401   | トークン欠落/不正、資格情報不正、MFA 失敗、更新トークン失効、またはテナント/ユーザー/メンバー/ロール停止。 | 再認証またはアクセス復旧が必要です。             |
| 403   | 認証済みだが権限、スコープ、プラン、容量、Origin、署名で拒否。                        | 権限付与、プラン変更、署名/Origin 設定を修正します。 |
| 404   | 存在しない、削除済み、別テナント、またはスコープで非表示。                             | ID と呼び出し側スコープを確認します。           |
| 409   | 一意値が既に存在。                                                 | 別の値を使うか既存リソースを取得します。           |
| 422   | ワークフロー、動的フィールド、インポート制限、必須証跡などの業務ルール違反。                    | 条件を満たしてから再試行します。               |
| 429   | レート制限。                                                    | 待ってから再試行します。                   |
| 500   | 未処理のサーバーエラー。                                              | 書き込みは成功済みか確認してから再試行します。        |
| 503   | 依存サービスが一時利用不可。                                            | 冪等な読み取りはバックオフして再試行できます。        |

## プランとクォータ

| コード                            | 対応                                                 |
| ------------------------------ | -------------------------------------------------- |
| `PLAN_CONTRACT_LIMIT_EXCEEDED` | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `PLAN_SEAT_LIMIT_EXCEEDED`     | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `PLAN_STORAGE_LIMIT_EXCEEDED`  | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `PLAN_FEATURE_NOT_ENABLED`     | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `PLAN_SUBSCRIPTION_REQUIRED`   | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `PLAN_SUBSCRIPTION_INACTIVE`   | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `PLAN_NOT_AVAILABLE`           | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |

## ファイルとアップロード

| コード                               | 対応                                                 |
| --------------------------------- | -------------------------------------------------- |
| `FILE_NAME_INVALID`               | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `FILE_SIZE_EMPTY`                 | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `FILE_TOO_LARGE`                  | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `FILE_CONTENT_TYPE_NOT_ALLOWED`   | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `FILE_EXTENSION_NOT_ALLOWED`      | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `FILE_KIND_NOT_ALLOWED`           | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `FILE_REF_INVALID`                | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `FILE_KIND_MISMATCH`              | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `FILE_SCAN_NOT_CLEAN`             | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `FILE_SCAN_REQUEST_FAILED`        | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `FILE_BINDING_CONTEXT_MISMATCH`   | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `UPLOAD_OBJECT_KEY_MISMATCH`      | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `UPLOAD_OBJECT_NOT_FOUND`         | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `UPLOAD_OBJECT_SIZE_MISMATCH`     | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `UPLOAD_OBJECT_TYPE_MISMATCH`     | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `UPLOAD_OBJECT_CHECKSUM_MISMATCH` | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `UPLOAD_TOKEN_INVALID`            | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `UPLOAD_TOKEN_EXPIRED`            | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `UPLOAD_METADATA_MISMATCH`        | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |

## 金額と請求書

| コード                             | 対応                                                 |
| ------------------------------- | -------------------------------------------------- |
| `AMOUNT_REQUIRED`               | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `AMOUNT_INVALID`                | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `AMOUNT_UNSAFE_NUMBER`          | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `AMOUNT_OUT_OF_RANGE`           | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `AMOUNT_SCALE_INVALID`          | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `UNSUPPORTED_CURRENCY`          | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `INVOICE_AMOUNT_EXCEEDS_TARGET` | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |

## 契約とワークフロー

| コード                                  | 対応                                                 |
| ------------------------------------ | -------------------------------------------------- |
| `OWNER_SCOPE_RESTRICTED`             | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `ASSIGNEE_NOT_ACTIVE_TENANT_MEMBER`  | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `SUBJECT_NOT_FOUND`                  | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `CONTRACT_TYPE_NOT_CONFIGURED`       | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `LIFECYCLE_STAGE_NOT_CONFIGURED`     | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `LIFECYCLE_TEMPLATE_NOT_AVAILABLE`   | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `DYNAMIC_FIELDS_INVALID`             | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `DYNAMIC_FIELD_UNKNOWN`              | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `DYNAMIC_FIELD_REQUIRED`             | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `DYNAMIC_FIELD_TYPE_INVALID`         | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `DYNAMIC_FIELD_OPTION_INVALID`       | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `CONTRACT_PDF_REQUIRED`              | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `REQUIRED_FIELDS_MISSING`            | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `CONTRACT_CORE_FIELDS_LOCKED`        | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `WORKFLOW_FIELDS_REQUIRE_TRANSITION` | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `WORKFLOW_REQUIRED_FIELDS_MISSING`   | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `WORKFLOW_REQUIRED_EVIDENCE_MISSING` | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `WORKFLOW_AI_REVIEW_PENDING`         | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `WORKFLOW_FULFILLMENT_OPEN`          | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `WORKFLOW_RECEIVABLES_OPEN`          | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |
| `WORKFLOW_NOTE_REQUIRED`             | HTTP ステータス、message、details を使って修正点を表示し、修正後に再試行します。 |

## 再試行

* 冪等な GET と 503 の読み取りはバックオフして再試行できます。
* POST、PATCH、DELETE はタイムアウトや 5xx 後に現在状態を確認してから再試行します。
* 400、401、403、404、409、422 は同じ内容で再試行しません。
