# Errors

> Error codes, what they mean, and which ones are safe to retry.

Source: https://app.getoatmilk.com/docs/errors

Oatmilk uses ordinary HTTP status codes and adds a stable `code` to every error. Branch on `code`, show `message` to people, and keep `X-Request-Id` in your logs: paste it into [Developers › Request log](https://app.getoatmilk.com/docs/usage.md#find-a-request) to see who sent the request and how it ended.

```json
{
  "error": {
    "code": "CONFLICT",
    "message": "This record changed. Refresh it before retrying.",
    "docUrl": "https://app.getoatmilk.com/docs/errors#conflict"
  }
}
```

| Status | Means |
| --- | --- |
| `200` | It worked. The result is in `data`. |
| `400` | The input doesn't match the action. `field` names the first problem. |
| `401` | The credential is missing, expired or revoked. |
| `403` | The credential or role doesn't allow this, or a person has to do it in Oatmilk. |
| `404` | The action or record doesn't exist, or you can't see it. |
| `409` | The record changed, or isn't in a state that allows this yet. |
| `413`, `415` | The body is too large, or isn't JSON. |
| `429` | Too many requests. Wait for `Retry-After`. |
| `500`, `503` | Something went wrong on our side, or a feature isn't ready. |

## Common error codes

| Code | Status | Means | What to do |
| --- | --- | --- | --- |
| `UNAUTHORIZED` | 401 | The Authorization header is missing, malformed, or the key or token has expired or been revoked. | Send `Authorization: Bearer <key>`. Check the key in Developers › API keys and create a new one if it was revoked. |
| `INSUFFICIENT_SCOPE` | 403 | The key or token works, but it doesn't include a permission this action needs. | Every action's page lists the permissions it needs. Create a key that includes them. |
| `FORBIDDEN` | 403 | Your role in the company doesn't allow this, or the step can only happen in the dashboard. | Ask an administrator, or give the person the `dashboardUrl` from the error. |
| `INTERACTIVE_ADMIN_REQUIRED` | 403 | An administrator has to do this in Oatmilk itself, such as sending a payout. | Give the `dashboardUrl` from the error to an administrator. |
| `INTERACTIVE_APPROVAL_REQUIRED` | 403 | A person approves this suggestion in Oatmilk. Listing and declining still work through the API. | Give the `dashboardUrl` to the person who approves it. |
| `INTERACTIVE_SIGNATURE_REQUIRED` | 403 | Only the named signer can sign or decline, in their own session. | Send the signer the `signUrl` or `portalUrl`. Integrations can't sign for a person. |
| `INTERACTIVE_PORTAL_REQUIRED` | 403 | The contractor does this in their own portal: bank details, tax numbers, or agreeing to tax slips by email. | Give the contractor the `portalUrl` from the error. |
| `COMPANY_PROTECTED` | 403 | This is the company the Oatmilk installation runs for, so it can't be closed. | Nothing to fix: export its data with `company.export` if you need a copy. |
| `UNKNOWN_ACTION` | 404 | There is no action with that name. Names are case-sensitive. | Check the spelling against the API reference. The error suggests the closest name when there is one. |
| `NOT_FOUND` | 404 | The record doesn't exist in this company, or you can't see it. | Check the ID and the company you're working in (`X-Accounting-Organization`). |
| `METHOD_NOT_ALLOWED` | 405 | GET was used for an action that changes something, or the method isn't GET or POST. | Use POST with a JSON body. GET only works for read actions. |
| `INVALID_INPUT` | 400 | The input doesn't match the action's fields, or the body isn't JSON (status 415). | `field` names the first problem. Fix it and send the request again. |
| `CONFIRMATION_MISMATCH` | 400 | The confirmation you typed doesn't match, such as the company's name when closing it. | Send the name exactly as Oatmilk shows it (case doesn't matter). Nothing was changed. |
| `TOO_LARGE` | 413 | The JSON body is larger than 3 MB. | Upload files with `uploads.prepare` and a PUT to the upload address, not inside the JSON body. |
| `REQUEST_TIMEOUT` | 408 | The request body took longer than 15 seconds to arrive. | Retry with the same idempotency key. |
| `IDEMPOTENCY_CONFLICT` | 409 | The Idempotency-Key header and the idempotencyKey field were both sent, with different values. | Send one of them, or send the same value in both. |
| `STALE_REVISION` | 409 | The record changed after you read it, so your `expectedRevision` is out of date. | Read the record again, check what changed, and send the new revision if your change still applies. |
| `CONFLICT` | 409 | The record changed since you read it, or the idempotency key was already used for a different request. | Read the record again before deciding what to do. Use a new idempotency key for a new change; reuse one only to retry exactly the same request. |
| `DUPLICATE` | 409 | A record with the same details already exists. | Look the existing record up instead of creating it again. |
| `INVALID_STATE` | 409 | The record isn't in a state that allows this yet, such as approving something already approved. | Read the record's status and follow the next step it needs. |
| `RATE_LIMITED` | 429 | This key sent more than 120 requests in the current minute. | Wait for the number of seconds in `Retry-After`, then retry with the same idempotency key. |
| `INTERNAL_ERROR` | 500 | Something went wrong on our side. | Retry after a short wait with the same idempotency key. If it keeps happening, send us the `X-Request-Id`. |
| `SCHEMA_NOT_READY` | 503 | The environment is finishing a database update for this feature. | Retry in a few minutes. |
| `CLOSE_UNAVAILABLE` | 503 | This installation's database doesn't let Oatmilk delete a company's records in one step, so nothing was deleted. | Whoever runs the installation lets the database owner set `session_replication_role`, then the company can be closed. |
| `NOT_CONFIGURED` | 503 | A feature this action needs isn't set up for your company or environment yet. | Finish its setup in Settings. The message says what's missing. |

## Retrying safely

Retry only what can succeed later: `429`, `500`, `503`, timeouts and dropped connections. Wait a little longer each time, and always resend the same `Idempotency-Key` so the change happens once. Don't retry other `4xx` errors unchanged: they fail the same way until you fix the request. See [Idempotency and revisions](https://app.getoatmilk.com/docs/idempotency.md).

```js title="retry.js"
async function callOatmilk(action, input, idempotencyKey = crypto.randomUUID()) {
  for (let attempt = 1; ; attempt += 1) {
    const response = await fetch(`https://app.getoatmilk.com/api/v1/accounting/${action}`, {
      method: "POST",
      headers: { Authorization: `Bearer ${process.env.OATMILK_API_KEY}`, "Content-Type": "application/json", "Idempotency-Key": idempotencyKey },
      body: JSON.stringify(input),
    });
    if (response.ok) return (await response.json()).data;
    const retryable = response.status === 429 || response.status >= 500;
    if (!retryable || attempt === 5) throw new Error((await response.json()).error.code);
    const wait = Number(response.headers.get("Retry-After")) || 2 ** attempt;
    await new Promise(resolve => setTimeout(resolve, wait * 1000));
  }
}
```

## Steps only a person can take

Some errors mean "a person does this in Oatmilk". They carry the link to the exact step, so your app can pass it on instead of failing.

| Code | What happens next |
| --- | --- |
| `INTERACTIVE_ADMIN_REQUIRED` | An administrator finishes it in Oatmilk at `dashboardUrl`, such as sending a payout. |
| `INTERACTIVE_APPROVAL_REQUIRED` | A person approves the suggestion at `dashboardUrl`. Listing and declining still work through the API. |
| `INTERACTIVE_SIGNATURE_REQUIRED` | The signer signs or declines in their own session. Integrations can't sign for anyone. |
| `INTERACTIVE_PORTAL_REQUIRED` | The contractor enters bank details or tax numbers in their own portal at `portalUrl`. |

## Every error code

The API can return these codes. The list is generated from Oatmilk's source, so it always matches what the API does.

| Code | HTTP status |
| --- | --- |
| `ACCESS_ENDED` | 403 |
| `ACCESS_EXPIRED` | 403 |
| `ACCESS_REQUIRED` | 403 |
| `ACCOUNT_CONFIRMATION_REQUIRED` | 409 |
| `ACCOUNT_DETAILS_REQUIRED` | 400 |
| `ACCOUNT_EXISTS` | 409 |
| `ACCOUNT_NOT_ADDED` | 503 |
| `ACCOUNT_REQUIRED` | 400 |
| `AGENT_UNAVAILABLE` | 503 |
| `AGREEMENT_CHANGED` | 409 |
| `AGREEMENT_REQUIRED` | 409 |
| `AGREEMENTS_OVERLAP` | 409 |
| `AI_CREDITS_REQUIRED` | 403 |
| `AI_KEY_REFUSED` | 400 |
| `ALREADY_ACCOUNTANT` | 409 |
| `ALREADY_INVITED` | 409 |
| `ALREADY_MATCHED` | 409 |
| `ALREADY_MEMBER` | 409 |
| `ALREADY_STARTED` | 409 |
| `ALREADY_SUBMITTED` | 409 |
| `AMOUNT_MISMATCH` | 409 |
| `ARCHIVE_FAILED` | 503 |
| `ARCHIVED` | 409 |
| `ATTACHMENT_LIMIT` | 400 |
| `ATTACHMENT_RETRIEVE` | 503 |
| `ATTACHMENT_SCOPE` | 409 |
| `ATTACHMENT_UNAVAILABLE` | 503 |
| `AUDIO_TOO_LARGE` | 413 |
| `AUDIO_TOO_LONG` | 413 |
| `AUDIT_FAILED` | 503 |
| `AUTH_UNAVAILABLE` | 503 |
| `BANK_MATCH_AMBIGUOUS` | 409 |
| `BANK_MISMATCH` | 409 |
| `BATCH_CLAIM_LOST` | 409 |
| `BATCH_SIZE` | 400 |
| `BUDGET_SCOPE_TOO_LARGE` | 422 |
| `BUDGET_SOURCE_UNAVAILABLE` | 503 |
| `CANNOT_REMOVE_SELF` | 409 |
| `CARD_IN_USE` | 409 |
| `CATEGORY_REQUIRED` | 409 |
| `CATEGORY_UNAVAILABLE` | 409 |
| `CLASSIFICATION_FAILED` | 503 |
| `CLERK_UNAVAILABLE` | 503 |
| `CLOSE_UNAVAILABLE` | 503 |
| `COMPANY_CHOICE_REQUIRED` | 403 |
| `COMPANY_LIMIT` | 409 |
| `COMPANY_PROTECTED` | 403 |
| `CONFIRMATION_MISMATCH` | 400 |
| `CONFLICT` | 409 |
| `CONNECTOR_CREDENTIAL_INVALID` | 503 |
| `CONNECTOR_KEY_MISSING` | 503 |
| `CONTRACTOR_CONFIRMATION_REQUIRED` | 409 |
| `CONTRACTOR_EXISTS` | 409 |
| `CONTRACTOR_UNAVAILABLE` | 503 |
| `CORRECTION_CLOSED` | 409 |
| `CORRECTION_OPEN` | 409 |
| `CREDENTIAL_EMAIL_REQUIRES_MAILBOX` | 403 |
| `DATA_SOURCE_UNAVAILABLE` | 409 |
| `DATA_SOURCE_UNSUPPORTED` | 400 |
| `DATABASE_ERROR` | 503 |
| `DAY_FULL` | 422 |
| `DEPOSIT_EXCEEDED` | 409 |
| `DISCORD_UNAVAILABLE` | 503 |
| `DOCUMENT_CHANGED` | 409 |
| `DOCUMENT_STORAGE` | 503 |
| `DOWNLOAD_FAILED` | 503 |
| `DOWNLOAD_UNAVAILABLE` | 503 |
| `DUPLICATE` | 409 |
| `DUPLICATE_ENTRY` | 409 |
| `DUPLICATE_NUMBER` | 409 |
| `EMAIL_CLAIM_CANCELLED` | 409 |
| `EMAIL_DISABLED` | 409 |
| `EMAIL_DOMAIN_EXISTS` | 409 |
| `EMAIL_DOMAIN_NOT_FOUND` | 404 |
| `EMAIL_DOMAIN_NOT_VERIFIED` | 409 |
| `EMAIL_DOMAIN_REJECTED` | 409 |
| `EMAIL_DOMAIN_SETUP_PENDING` | 503 |
| `EMAIL_DOMAIN_SETUP_REQUIRED` | 503 |
| `EMAIL_DOMAIN_UNAVAILABLE` | 503 |
| `EMAIL_INBOUND_SETUP_REQUIRED` | 503 |
| `EMAIL_MISMATCH` | 403 |
| `EMAIL_NEEDED` | 409 |
| `EMAIL_NOT_ENABLED` | 409 |
| `EMAIL_UNAVAILABLE` | 503 |
| `EMAIL_UNVERIFIED` | 403 |
| `EMPTY_IMPORT` | 400 |
| `ENCRYPTION_KEY_CHANGED` | 503 |
| `ENCRYPTION_MISCONFIGURED` | 503 |
| `ENCRYPTION_NOT_CONFIGURED` | 503 |
| `ENTRY_EVIDENCE_BINDING` | 409 |
| `ENTRY_EVIDENCE_RECEIPT_DENIED` | 409 |
| `EVIDENCE_ARCHIVE_FAILED` | 503 |
| `EVIDENCE_HASH_MISMATCH` | 409 |
| `EVIDENCE_INTEGRITY` | 409 |
| `EVIDENCE_MISSING` | 400, 409 |
| `EVIDENCE_READ_FAILED` | 503 |
| `EVIDENCE_READING_PENDING` | 409, 503 |
| `EVIDENCE_REQUIRED` | 409 |
| `EVIDENCE_SCOPE` | 403, 409 |
| `EXPORT_TOO_LARGE` | 400, 409, 413 |
| `EXTRACTION_FAILED` | 502 |
| `EXTRACTION_TIMEOUT` | 503 |
| `FILE_FORMAT` | 400, 415, 422 |
| `FILE_SIZE` | 400, 413 |
| `FILE_TOO_LARGE` | 400, 413 |
| `FILE_TYPE` | 400, 415 |
| `FINANCIAL_SCOPE_TOO_LARGE` | 422 |
| `FINGERPRINT_KEY_READABLE` | 409 |
| `FINGERPRINT_KEY_UNREADABLE` | 503 |
| `FOLIO_REFUSED` | 409 |
| `FORBIDDEN` | 403 |
| `FORECAST_TOO_LARGE` | 422 |
| `FUTURE_HOURS` | 422 |
| `FX_RATE_NOT_PUBLISHED` | 404 |
| `FX_RATE_UNAVAILABLE` | 503 |
| `FX_RATE_UNSUPPORTED` | 422 |
| `GIFI_UNAVAILABLE` | 503 |
| `GOOGLE_DOCS_NOT_PUBLIC` | 422 |
| `GOOGLE_DOCS_TIMEOUT` | 504 |
| `GOOGLE_DOCS_UNAVAILABLE` | 503 |
| `GOOGLE_DRIVE_FORBIDDEN` | 403 |
| `GOOGLE_DRIVE_NOT_CONFIGURED` | 503 |
| `GOOGLE_DRIVE_NOT_CONNECTED` | 409 |
| `GOOGLE_DRIVE_NOT_FOUND` | 404 |
| `GOOGLE_DRIVE_SCOPE_MISSING` | 400 |
| `GOOGLE_DRIVE_STATE_INVALID` | 400 |
| `GOOGLE_DRIVE_TOKEN_FAILED` | 400, 502 |
| `GOOGLE_DRIVE_UNAVAILABLE` | 502 |
| `HOURS_BEFORE_START` | 409 |
| `HOURS_LOCKED` | 409 |
| `HOURS_NOT_PAID` | 409 |
| `HOURS_ON_HOLD` | 409 |
| `HOURS_PAID` | 409 |
| `HUMAN_CORRECTED` | 409 |
| `IDEMPOTENCY_CONFLICT` | 409 |
| `IDENTITY_UNAVAILABLE` | 503 |
| `IMAGE_LIMIT` | 400, 422 |
| `IMAGE_TOO_LARGE` | 413 |
| `IMPORT_FAILED` | 409, 502, 503 |
| `INBOX_SEARCH_BUSY` | 429 |
| `INBOX_SEARCH_DAILY_LIMIT` | 429 |
| `INBOX_SEARCH_RATE_LIMITED` | 429 |
| `INSUFFICIENT_SCOPE` | 403 |
| `INTEGRITY_ERROR` | 409 |
| `INTERACTIVE_ADMIN_REQUIRED` | 403 |
| `INTERACTIVE_APPROVAL_REQUIRED` | 403 |
| `INTERACTIVE_PORTAL_REQUIRED` | 403 |
| `INTERACTIVE_SIGNATURE_REQUIRED` | 403 |
| `INTERNAL_ERROR` | 500, 502 |
| `INVALID_ACCOUNT` | 400, 409, 503 |
| `INVALID_ADDRESS` | 400 |
| `INVALID_AI_RESULT` | 400 |
| `INVALID_AMOUNT` | 400 |
| `INVALID_ASSIGNEE` | 400 |
| `INVALID_AUDIO` | 400 |
| `INVALID_BUDGET_CATEGORY` | 400 |
| `INVALID_CATEGORY` | 400 |
| `INVALID_CSV` | 400 |
| `INVALID_CURRENCY` | 400 |
| `INVALID_CURSOR` | 400 |
| `INVALID_DATE` | 400 |
| `INVALID_DATE_RANGE` | 400 |
| `INVALID_DOCUMENT` | 400 |
| `INVALID_DOMAIN` | 400 |
| `INVALID_END_DATE` | 400 |
| `INVALID_EVIDENCE` | 400 |
| `INVALID_FIELD` | 400 |
| `INVALID_FINAL_CHARGE` | 409 |
| `INVALID_HEADER` | 400 |
| `INVALID_IDENTITY` | 400 |
| `INVALID_IMPORT` | 400 |
| `INVALID_INPUT` | 400, 415, 422 |
| `INVALID_INVITATION` | 404 |
| `INVALID_MAPPING` | 400 |
| `INVALID_MERCHANT` | 400 |
| `INVALID_PARENT` | 400 |
| `INVALID_PAYMENT_DETAILS` | 400 |
| `INVALID_PERIOD` | 400 |
| `INVALID_RECEIPT` | 409 |
| `INVALID_RECIPIENT` | 400, 409 |
| `INVALID_ROW` | 400 |
| `INVALID_SETTINGS` | 409 |
| `INVALID_SIGNATURE` | 400 |
| `INVALID_SOURCE_REFERENCE` | 400, 409 |
| `INVALID_STATE` | 409 |
| `INVALID_STRIPE_SIGNATURE` | 400 |
| `INVALID_TAX_NUMBER` | 400 |
| `INVALID_VERIFICATION_LINK` | 400 |
| `INVALID_WEBHOOK` | 400 |
| `INVESTIGATION_BUSY` | 409 |
| `INVESTIGATION_TOO_LARGE` | 409 |
| `INVESTIGATION_UNAVAILABLE` | 503 |
| `INVITATION_CLOSED` | 409 |
| `INVITATION_EXPIRED` | 409 |
| `INVITATION_REVOKED` | 409 |
| `INVITATION_USED` | 409 |
| `INVITE_INVALID` | 400, 403 |
| `JOB_MISSING` | 503 |
| `JOB_SUPERSEDED` | 409 |
| `KICKOFF_UNAVAILABLE` | 409 |
| `KIND_NOT_ALLOWED` | 403 |
| `LINK_KEY_CHANGED` | 409 |
| `LOCATION_UNAVAILABLE` | 503 |
| `LOOKUP_CREDITS_LOW` | 503 |
| `LOOKUP_UNAVAILABLE` | 503 |
| `MAIL_HELD` | 403 |
| `MAIL_ORIGINAL_PENDING` | 503 |
| `MAIL_QUOTA` | 429 |
| `MAILBOX_ACCESS_REVOKED` | 409 |
| `MAILBOX_ADDRESS_MISSING` | 502 |
| `MAILBOX_CONNECT_FAILED` | 503 |
| `MAILBOX_CONNECT_RATE_LIMITED` | 429 |
| `MAILBOX_CREDENTIAL_INVALID` | 409 |
| `MAILBOX_GRANT_EXPIRED` | 409 |
| `MAILBOX_IMPORT_FAILED` | 503 |
| `MAILBOX_OFFLINE_ACCESS_MISSING` | 409 |
| `MAILBOX_PROVIDER_ERROR` | 502 |
| `MAILBOX_PROVIDER_NOT_CONFIGURED` | 503 |
| `MAILBOX_RATE_LIMITED` | 429 |
| `MAILBOX_SCOPE_MISSING` | 409 |
| `MAILBOX_SCOPE_TOO_BROAD` | 409 |
| `MAILBOX_STATE_EXPIRED` | 400 |
| `MAILBOX_STATE_INVALID` | 400 |
| `MAILBOX_STATE_MISMATCH` | 403 |
| `MAILBOX_STATE_USED` | 400 |
| `MAILBOX_TOKEN_FAILED` | 502 |
| `MATCHING_MODEL_RETRY_PENDING` | 503 |
| `MATCHING_SUPERSEDED` | 409 |
| `MATCHING_TOO_LARGE` | 400 |
| `MATCHING_UNAVAILABLE` | 503 |
| `MEMBER_UNAVAILABLE` | 404 |
| `METHOD_NOT_ALLOWED` | 405 |
| `MISSING_FIELDS` | 400 |
| `MULTIPLE_ACCOUNTS` | 400 |
| `NESTED_EMAIL_LIMIT` | 400 |
| `NO_ADMIN` | 409 |
| `NO_CHANGES` | 400, 409 |
| `NO_DOCUMENT` | 409 |
| `NO_FINGERPRINT_KEY` | 409 |
| `NO_HOURS_DATABASE` | 400 |
| `NO_MEMBER` | 409 |
| `NO_READABLE_SOURCE` | 409 |
| `NO_REQUESTS` | 400 |
| `NO_SPEECH` | 422 |
| `NOT_A_CARD_CHARGE` | 409 |
| `NOT_A_COMPANY_RECORD` | 409 |
| `NOT_A_HOTEL_CHARGE` | 409 |
| `NOT_A_PURCHASE` | 409 |
| `NOT_A_STATEMENT` | 409 |
| `NOT_AN_AGREEMENT` | 422 |
| `NOT_AVAILABLE` | 409 |
| `NOT_CONFIGURED` | 409, 503 |
| `NOT_FOUND` | 404 |
| `NOT_ISSUED` | 409 |
| `NOT_NEEDED` | 409 |
| `NOT_REGISTERED` | 409 |
| `NOT_SIGNED` | 409 |
| `NOT_TEAM_MEMBER` | 409 |
| `NOTES_LIMIT` | 409 |
| `NOTHING_CHANGED` | 400 |
| `NOTHING_TO_IMPORT` | 400 |
| `NOTION_ACCESS` | 404 |
| `NOTION_ARCHIVED` | 409 |
| `NOTION_FILE_GONE` | 404 |
| `NOTION_INVALID_VALUE` | 400 |
| `NOTION_LINK_INVALID` | 400 |
| `NOTION_MAPPING_INVALID` | 400 |
| `NOTION_MAPPING_REQUIRED` | 409 |
| `NOTION_NOT_CONFIGURED` | 503 |
| `NOTION_PROPERTY_READ_ONLY` | 400 |
| `NOTION_SYNC_FAILED` | 503 |
| `NOTION_WRONG_DATABASE` | 409 |
| `OLDER_AGREEMENT` | 409 |
| `ORGANIZATION_REQUIRED` | 403 |
| `ORIGINAL_IN_USE` | 409 |
| `ORIGINAL_REMOVED` | 409 |
| `PAGE_LIMIT` | 400 |
| `PAGE_UNAVAILABLE` | 404 |
| `PAID_AMOUNT_REQUIRED` | 400 |
| `PARTY_HAS_AUTOMATIC_INVOICES` | 409 |
| `PAY_REQUIRED` | 400 |
| `PAYMENT_DETAILS_CHANGED` | 409 |
| `PAYMENT_TOO_SMALL` | 409 |
| `PDF_UNAVAILABLE` | 409 |
| `PERIOD_CLOSED` | 409 |
| `PERIOD_NOT_ENDED` | 409 |
| `PERIOD_PAID` | 409 |
| `PERIOD_SKIPPED` | 409 |
| `PERIODS_OVERLAP` | 409 |
| `PERSONAL_WORKSPACE` | 403, 409 |
| `PERSONAL_WORKSPACE_UNAVAILABLE` | 409 |
| `POSSIBLE_DUPLICATE` | 409 |
| `PREVIEW_READ_ONLY` | 403 |
| `PREVIEW_SAMPLE` | 404 |
| `PROVIDER_ID` | 400 |
| `PROVIDER_RETRIEVE` | 503 |
| `PROVIDER_URL` | 503 |
| `RATE_LIMITED` | 429 |
| `RAW_EMAIL_UNAVAILABLE` | 503 |
| `READER_FAILED` | 502 |
| `READER_UNAVAILABLE` | 503 |
| `RECEIPT_DETAILS_CHANGED` | 409 |
| `RECEIPT_DUPLICATE_REVIEW` | 409 |
| `RECEIPT_NOT_NEEDED` | 409 |
| `RECEIPT_ON_ITS_WAY` | 409 |
| `RECEIPT_TARGET_CHANGED` | 409 |
| `RECEIPT_TARGET_UNAVAILABLE` | 409 |
| `RECENTLY_SENT` | 429 |
| `RECIPIENT_IDENTITY_REVIEW` | 409 |
| `RECONCILIATION_TOO_LARGE` | 400 |
| `REMOVED_BY_PERSON` | 409 |
| `REPORT_TOO_LARGE` | 400, 409 |
| `REQUEST_CLOSED` | 409 |
| `REQUEST_TIMEOUT` | 408 |
| `REQUEST_UNAVAILABLE` | 409, 410 |
| `RESTRICTED_EVIDENCE` | 403 |
| `REVERIFICATION_REQUIRED` | 403 |
| `REVIEW_REQUIRED` | 409 |
| `REVIEW_UNAVAILABLE` | 503 |
| `REVISION_CONFLICT` | 409 |
| `ROLE_IN_AGREEMENT` | 409 |
| `ROLE_MISMATCH` | 409 |
| `ROLE_REQUIRED` | 409 |
| `ROLE_UNAVAILABLE` | 409 |
| `SAME_AGREEMENT_SIGNED` | 409 |
| `SCHEMA_NOT_READY` | 503 |
| `SEALED_DATA_UNREADABLE` | 409, 503 |
| `SEND_LEASE_LOST` | 409 |
| `SEND_STATE` | 409 |
| `SETUP_PENDING` | 403 |
| `SIGN_IN_REQUIRED` | 401 |
| `SIGNATURES_REQUIRED` | 409 |
| `SIGNERS_REQUIRED` | 409 |
| `SIGNING_KEY_EXISTS` | 409 |
| `SIGNUPS_CLOSED` | 403 |
| `SOURCE_LIMIT` | 400 |
| `SOURCE_UNAVAILABLE` | 400 |
| `STALE_FINANCIAL_SOURCE` | 409 |
| `STALE_HOURS` | 409 |
| `STALE_PROPOSAL` | 409 |
| `STALE_REVISION` | 409 |
| `STATEMENT_FORMAT` | 422 |
| `STATEMENT_IMPORTED` | 409 |
| `STATEMENT_PAGE_TOO_LONG` | 422 |
| `STATEMENT_SCOPE_TOO_LARGE` | 413 |
| `STATEMENT_SOURCE_CHANGED` | 409 |
| `STATEMENT_TOO_LARGE` | 413 |
| `STATEMENT_UNDECIDED` | 500 |
| `STATEMENT_UNDONE` | 409 |
| `STATUS_NOT_APPLICABLE` | 409 |
| `STORAGE_CONFLICT` | 409 |
| `STORAGE_ERROR` | 503 |
| `STRIPE_ACCOUNT_CHANGED` | 409 |
| `STRIPE_ACCOUNT_MISMATCH` | 403 |
| `STRIPE_ARCHIVE_FAILED` | 503 |
| `STRIPE_BODY_LIMIT` | 413 |
| `STRIPE_EVENT_SCOPE` | 403 |
| `STRIPE_HISTORY_REQUIRED` | 409 |
| `STRIPE_INVALID_AMOUNT` | 502 |
| `STRIPE_INVALID_CURRENCY` | 502 |
| `STRIPE_INVALID_CURSOR` | 409 |
| `STRIPE_INVALID_DATE` | 502 |
| `STRIPE_INVALID_EVENT` | 400 |
| `STRIPE_INVALID_EXCHANGE_RATE` | 502 |
| `STRIPE_INVALID_PAGE` | 502 |
| `STRIPE_INVALID_RESPONSE` | 502 |
| `STRIPE_INVALID_TRANSACTION` | 502 |
| `STRIPE_LEASE_LOST` | 409 |
| `STRIPE_MODE_MISMATCH` | 400, 403 |
| `STRIPE_NOT_CONFIGURED` | 503 |
| `STRIPE_NUMERIC_RUNTIME` | 503 |
| `STRIPE_PATH_DENIED` | 400 |
| `STRIPE_REPORT_LIMIT` | 409 |
| `STRIPE_RESPONSE_LIMIT` | 502 |
| `STRIPE_RESTRICTED_KEY_REQUIRED` | 503 |
| `STRIPE_TOTAL_CONFLICT` | 502 |
| `STRIPE_UNREPRESENTABLE_AMOUNT` | 409 |
| `SUBSCRIPTIONS_TOO_LARGE` | 422 |
| `TAG_NOT_LINKED` | 409 |
| `TAX_EXCEEDS_TOTAL` | 400 |
| `TAX_REVIEW_INCOMPLETE` | 409 |
| `TAX_REVIEW_REQUIRED` | 409 |
| `TAX_SETTINGS_REQUIRED` | 400 |
| `TAX_SOURCE_RECEIPT_DENIED` | 409 |
| `TERMS_PENDING` | 409 |
| `TEXT_LIMIT` | 400 |
| `TIMEOUT` | 504 |
| `TITLE_AGREEMENT_REQUIRED` | 409 |
| `TITLE_EVIDENCE_REQUIRED` | 409 |
| `TOO_LARGE` | 413 |
| `TOO_MANY_INVITATIONS` | 409 |
| `TOO_MANY_ROWS` | 400 |
| `TOO_MANY_TRANSACTIONS` | 409 |
| `TOO_SOON` | 409 |
| `TOTALS_CHANGED` | 409 |
| `TRANSCRIPT_TOO_LONG` | 422 |
| `TRANSCRIPTION_FAILED` | 502 |
| `UNAUTHORIZED` | 401 |
| `UNAVAILABLE` | 503 |
| `UNKNOWN_ACTION` | 400, 404 |
| `UNKNOWN_TOOL` | 404 |
| `UNPAID_WORK` | 409 |
| `UNREADABLE` | 422 |
| `UNREADABLE_EVIDENCE` | 409 |
| `UNSUPPORTED_AUDIO` | 415 |
| `UNSUPPORTED_RETRY_MODE` | 409 |
| `UPLOAD_BATCH_CHANGED` | 409 |
| `UPLOAD_FAILED` | 503 |
| `UPLOAD_INCOMPLETE` | 409 |
| `UPLOAD_INTEGRITY` | 409 |
| `UPLOAD_LIMIT` | 429 |
| `UPLOAD_UNAVAILABLE` | 503 |
| `UPSTREAM_UNAVAILABLE` | 503 |
| `VERIFICATION_EMAIL_UNAVAILABLE` | 503 |
| `WAITLIST_NOT_NEEDED` | 409 |
| `WAITLISTED` | 403 |
| `WEBHOOK_KEY_CHANGED` | 503 |
| `WEBHOOK_KEY_MISSING` | 503 |
| `WEBHOOK_SECRET_INVALID` | 503 |
| `WEBHOOK_URL_INVALID` | 400 |
| `WISE_ACCOUNT` | 400 |
| `WISE_ATTACHMENT_NOT_FOUND` | 404 |
| `WISE_CURRENCY` | 502 |
| `WISE_DOCUMENT_NOT_READY` | 404 |
| `WISE_DOCUMENT_TOO_LARGE` | 502 |
| `WISE_FORMAT` | 502 |
| `WISE_FUNDING_PENDING` | 409 |
| `WISE_NO_BALANCE` | 409 |
| `WISE_NOT_CONFIGURED` | 409, 503 |
| `WISE_NOT_READY` | 409 |
| `WISE_PATH` | 400 |
| `WISE_PERIOD_NOT_STARTED` | 409 |
| `WISE_PRECISION` | 503 |
| `WISE_PROFILE` | 400 |
| `WISE_PROFILE_MISSING` | 409 |
| `WISE_PROFILE_OWNER` | 403 |
| `WISE_QUOTE_BLOCKED` | 409 |
| `WISE_RECIPIENT` | 409 |
| `WISE_RESPONSE` | 502 |
| `WISE_SCA_REJECTED` | 502 |
| `WISE_SETUP_REQUIRED` | 400, 409 |
| `WISE_SOURCE_BINDING_PENDING` | 409 |
| `WISE_STATUS_PENDING` | 409 |
| `WISE_SYNC_CONFIG_CHANGED` | 409 |
| `WISE_SYNC_LEASE_LOST` | 409 |
| `WISE_TRANSFER` | 409, 503 |
| `WISE_TRANSFER_DETAILS_REQUIRED` | 409 |
| `WISE_UNAVAILABLE` | 502, 503 |
| `WORKSPACE_PAUSED` | 403 |
| `WRITE_OFF_TOO_LARGE` | 400 |
