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

# Errors

> The Get2Dial API's error response shape, every error code it returns, and which ones are worth retrying.

Every error response uses the same shape.

## Error shape

```json theme={null}
{
  "status": "error",
  "message": "email is already in use",
  "code": "invalid_request",
  "request_id": "req_...",
  "field_errors": { "email": "already in use" }
}
```

`field_errors` is only present on validation failures where the API can identify which
field caused the problem. `request_id` matches the `X-Request-Id` response header — include
it when [contacting support](/troubleshooting/contact-support).

## Error codes

| HTTP status | `code`            | Meaning                                                 | Retryable                                        |
| ----------- | ----------------- | ------------------------------------------------------- | ------------------------------------------------ |
| 400         | `invalid_request` | The request body or parameters are malformed            | No — fix the request                             |
| 401         | `unauthorized`    | Missing or invalid credentials                          | No — fix authentication                          |
| 403         | `forbidden`       | Authenticated, but not permitted for this resource      | No — check capabilities                          |
| 404         | `not_found`       | The resource doesn't exist                              | No                                               |
| 409         | `conflict`        | The request conflicts with the resource's current state | Sometimes — depends on the conflict              |
| 422         | `unprocessable`   | Well-formed but semantically invalid                    | No — fix the request                             |
| 429         | `rate_limited`    | You've exceeded your rate limit                         | Yes — see [Rate limits](/developers/rate-limits) |
| 500+        | `internal_error`  | Something failed on Get2Dial's side                     | Yes, with backoff                                |

`code` is derived directly from the HTTP status, so it's always predictable from the status
code alone.

## Related

<CardGroup cols={2}>
  <Card title="Rate limits" href="/developers/rate-limits" />

  <Card title="Conventions" href="/developers/conventions" />
</CardGroup>
