# primary_contact_conflict (/docs/errores/primary_contact_conflict)

Dos llamadas intentaron dejar el contacto principal de la misma contraparte al mismo tiempo.

|                    |                                        |
| ------------------ | -------------------------------------- |
| **Código**         | `primary_contact_conflict`             |
| **Tipo**           | `conflict_error` — Conflicto de estado |
| **HTTP**           | `409`                                  |
| **¿Reintentable?** | **Sí**                                 |

## Qué hacer [#qué-hacer]

Reintenta. Sólo un contacto por contraparte puede ser principal y eso lo impone la base de datos, así que quien perdió la carrera puede repetir sin riesgo.

> **Nota**
>
> Reintentar el mismo request puede funcionar. Respeta `Retry-After` cuando venga.

## El sobre [#el-sobre]

```json
{
  "error": {
    "type": "conflict_error",
    "code": "primary_contact_conflict",
    "message": "…",
    "hint": "Retry. Exactly one contact per counterparty may be primary and the database enforces it, so the loser of the race is safe to repeat.",
    "retriable": true,
    "doc_url": "https://docs.facturia.cl/errors/primary_contact_conflict",
    "request_id": "req_01K2R7Q9M4T2VB"
  }
}
```

Programa contra `code`, nunca contra `message` — la prosa se puede reescribir, el código no (§5.8).

`hint` y `retriable` llegan en la respuesta, con estos mismos valores: son función del `code` y salen del mismo diccionario que sirve `GET /v1/error_codes`, así que el sobre y el diccionario no pueden discrepar. `hint` va en inglés a propósito — el español de este código es esta ficha. Más en [El sobre de error](/docs/errores).

## También [#también]

- [Todos los códigos](/docs/errores/codigos): La tabla completa, agrupada por dónde te la vas a encontrar.

- [El sobre de error](/docs/errores): Los nueve tipos, el request_id y cómo manejarlos en la práctica.

La copia legible por máquina de esta ficha vive en `GET /v1/error_codes`, sin autenticación.
