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

# ALREADY_EXISTS

> The create collided with an existing record, so the request was rejected with HTTP 409.

## What this error means

`ALREADY_EXISTS` is returned with HTTP status **409** when a create request
collides with a record that already exists: a contact with the same phone or
email, a template with the same channel and name, or any other uniqueness
rule on the resource. The existing record is left untouched and no duplicate
is created.

Every response for this error carries this page's address in `meta.docs_url`:

```json theme={null}
{
  "error": {
    "code": "ALREADY_EXISTS",
    "message": "The resource already exists.",
    "status": 409
  },
  "meta": {
    "request_id": "req_01J9ZKQ3V8",
    "docs_url": "https://docs.orbit.devotel.io/errors/ALREADY_EXISTS"
  }
}
```

## Cause

| State | Why it collides |
| - | - |
| `POST /contacts` with a live contact's phone | Reported as `CONTACT_PHONE_ALREADY_EXISTS` |
| `POST /contacts` with a live contact's email | Reported as `CONTACT_EMAIL_ALREADY_EXISTS` |
| Recreating a template with the same channel and name | The template name is unique per channel |
| Resending a create that already succeeded | Creates are not idempotent; the second send is a duplicate, not an update |

## How to fix it

1. **Read the specific code.** Variant codes such as
   `CONTACT_PHONE_ALREADY_EXISTS` name the exact field that collided; use it
   to find the existing record.
2. **Use PATCH to change an existing record.** If your intent was an update,
   send `PATCH` against the existing resource's id instead of repeating the
   `POST`.
3. **Or pick a unique value.** If you genuinely need a second record, change
   the colliding field.
4. **Look up before you create in import flows.** When syncing from a CRM or
   CSV, resolve existing contacts by phone or email first and update them, so
   a re-run of the import does not surface one 409 per row.

A 409 is deterministic: retrying the same create unchanged fails identically.

## Related

* [Error Code Reference](https://docs.orbit.devotel.io/reference/error-codes.md#from-a-code-to-a-runbook) — the
  `ALREADY_EXISTS` row plus the per-field variant codes
  (`CONTACT_PHONE_ALREADY_EXISTS`, `CONTACT_EMAIL_ALREADY_EXISTS`, and
  others).
* [Error Handling Examples](https://docs.orbit.devotel.io/guides/error-handling-examples.md) — response-envelope
  handling patterns in code.


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