# contact_already_exists

- HTTP status: 409
- Retry: No
- Execution: not started
- Admin needed: no

**Contact already exists.** Phone numbers are unique within a workspace. Use POST /v1/contacts/upsert to create-or-update by phone number, or update the existing contact in `details.contact_id`.

## What it means

The API returns HTTP 409 with `error.code` set to `contact_already_exists`. The default message is: "A contact with this phone number already exists."

## Common causes

- Creating a contact whose number is already a contact.
- Changing a contact's number to one another contact already has.

## How to identify it

Check the response status (`409`) and `error.code` (`contact_already_exists`). Branch on `error.code`, not on the message text: messages can be reworded, codes do not change within v1. Log `error.request_id` (also sent as the `X-Request-Id` header) so support can find the request.

## How to fix it

- Update the existing contact, or use the upsert operation.

## Retry guidance

Sending the request unchanged fails the same way. Fix the cause first (see How to fix it), then send it again.

## Did anything happen?

This request was refused before any call was placed and before anything was charged.

## Idempotency

Nothing was done and the refusal is not stored under the Idempotency-Key. Fix the cause, then send the same request (with the same key if you sent one).

## Who can fix it

The developer who sends the request can fix it; no administrator action is normally needed.

## When to contact support

If the error persists after the steps above, contact [support@relationsai.com](mailto:support@relationsai.com). See [Support](/resources/support) for what to include (the `request_id`, the time in UTC, the operation, and whether you used a test or live key) and what never to send (API keys, Authorization headers, webhook signing secrets, recording links, transcripts or customer data).

## Example error response

```json
{
  "error": {
    "code": "contact_already_exists",
    "message": "A contact with this phone number already exists.",
    "details": {
      "contact_id": "ct_8Rw2Tq5Lm9Xc3Vb7Nz4Kp1"
    },
    "request_id": "req_exi32aw2mlppoxpprvdymqgt",
    "retry": "no",
    "doc_url": "https://docs.relationsai.com/errors/contact_already_exists"
  }
}
```

## Incorrect and corrected request

Incorrect: A contact with this number already exists.

```http
POST /v1/contacts

{
  "phone_number": "+12025550100",
  "name": "Asha Rao"
}
```

Corrected: The upsert updates the existing contact (200) or creates one (201).

```http
POST /v1/contacts/upsert

{
  "phone_number": "+12025550100",
  "name": "Asha Rao"
}
```

## Operations that can return this error

- [`POST /contacts`](/api/contacts#create-a-contact): Create a contact
- [`PATCH /contacts/{contact_id}`](/api/contacts#update-a-contact): Update a contact

See all codes in the [error-code reference](/fundamentals/error-codes).
