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

# Errors

> Every error code the API returns, and what to do about it.

Errors are JSON with a stable `error` code to match on and a plain `message`:

```json theme={"dark"}
{ "error": "release_locked", "message": "This release is in review and can no longer be changed through the API." }
```

Some errors carry `details`. For `invalid_payload` these are `{ path, message }` for each problem in your body. For `not_ready` they're validation problems: one list per release when you submit a transfer.

| Status | `error` | Meaning | What to do |
| - | - | - | - |
| 400 | `invalid_payload` | The body has errors. | Fix each `details` entry. |
| 400 | `account_required` | The key covers several accounts and none was named. | Pass `accountId`. |
| 400 | `invalid_external_id` | An ID in the URL isn't in the allowed format. | See [Identifiers](/reference/identifiers.md). |
| 400 | `invalid_status`, `invalid_limit`, `invalid_cursor` | A list query parameter is wrong. | |
| 400 | `unsupported_type`, `invalid_size` | Upload URL request with a wrong content type or size. | |
| 401 | `missing_api_key` | No key sent. | Send `Authorization: Bearer <key>`. |
| 401 | `invalid_api_key` | Wrong or revoked key. | Check the key, or create a new one. |
| 403 | `insufficient_scope` | The key doesn't have this access. | Use a **Send releases** key. |
| 403 | `api_access_disabled` | API access is off for the account. | Contact your AMM Distro representative. |
| 403 | `release_creation_disabled` | The account can't create releases right now. | Contact your AMM Distro representative. |
| 403 | `submissions_paused` | Submissions are paused for the account. | Contact your AMM Distro representative. |
| 404 | `not_found` | No such release or transfer in this account. | |
| 404 | `account_not_found` | The key doesn't cover that account. | |
| 404 | `upload_not_found` | No such file slot, or no upload started. | Request an upload URL first. |
| 409 | `release_locked` | The release has been submitted. | Wait for `changes_requested` to update it. |
| 409 | `already_submitted` | The release was already submitted. | |
| 409 | `submit_transfer` | The release is part of a transfer. | Submit the transfer. |
| 409 | `transfer_closed` | The transfer was already submitted. | Use a new transfer ID. |
| 409 | `upc_in_use`, `isrc_in_use` | The code belongs to a release outside your account. | Contact your AMM Distro representative. |
| 409 | `upload_in_progress` | The file was already uploaded. | Send `upload: true` again to replace it. |
| 409 | `agreement_pending` | The account has an agreement to sign first. | Sign it in AMM Distro. |
| 422 | `not_ready` | The release or transfer isn't ready to submit. | Fix the problems in `details`. |
| 429 | `rate_limited` | Too many requests. | See [Rate limits](/reference/rate-limits.md). |
| 500 | `internal_error` | Something went wrong on our side. | Retry with backoff. |

A `PUT` is safe to retry: sending the same body twice gives the same result.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.