La primera llamada no necesita Idempotency-Key. Crear un contacto es POST con display_name. No duplicar persona es POST /contacts/upsert por email/teléfono. El header existe solo cuando el cliente reintenta el mismo write después de timeout o 500 — el host devuelve la primera respuesta en vez de crear otra fila.
Aceptado en POST de contacts, companies, deals, tasks, webhooks, tags y upsert. Replay por organización + método + path + string de la clave, 24 horas, con X-Idempotent-Replayed: true. No hashea el cuerpo.
| Envías | Resultado |
|---|---|
| Misma clave + mismo cuerpo | Status y cuerpo originales. Sin segunda fila. |
| Misma clave + cuerpo distinto | Sigue siendo la primera respuesta. Trátalo como bug del cliente. |
| Clave nueva | Nueva escritura. |