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

# Errors & status codes

> What to expect when something's missing or wrong.

| Situation                                  | Status | Code                                                                |
| ------------------------------------------ | ------ | ------------------------------------------------------------------- |
| Contact not found (by id or email)         | `400`  | `BAS-E-002`                                                         |
| List or email not found                    | `404`  | `NOT_FOUND`                                                         |
| Duplicate list name                        | `409`  | `LIST_ALREADY_EXISTS`                                               |
| Duplicate email name                       | `409`  | `TEMPLATE_ALREADY_EXISTS`                                           |
| Request body fails validation              | `400`  | `VALIDATION_ERROR`, with a field detail such as `fromEmail._schema` |
| From-email domain not approved for the org | `400`  | `UnapprovedEmailDomainException`                                    |
| Removing an unknown contact from a list    | `404`  | `CONTACT_NOT_FOUND`                                                 |
| Rate limit exceeded                        | `429`  | See [Rate Limits](/api-reference/rate-limits)                       |

<Warning>
  A missing **contact** returns `400`, while a missing **list** or **email** returns `404`. Handle both. Don't assume a single not-found code across resources.
</Warning>

## Errors inside a 200

Two cases return `200` and still carry an error signal. Check the body, not just the status:

* **Bulk member add with unknown ids**: the valid ids are added, and the response's `errors[]` array carries `CONTACTS_NOT_FOUND` for the ids that were skipped.
* **Unknown transaction id**: `GET /v1/contacts/transactions/{transactionId}` returns `200` with `status: NOT_EXIST` instead of an HTTP error.
