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

# deal.contact_added

> Outbound webhook when a contact is added to a deal.

# `deal.contact_added`

## What this event means

`deal.contact_added` is emitted whenever a contact link is created for a deal.

## Webhook `type`

`deal.contact_added`

## Internal source mapping

| Internal event       | Trigger path                                        |
| -------------------- | --------------------------------------------------- |
| `deal.contact_added` | A new `dealContacts` record is inserted for a deal. |

## Payload example

```json theme={null}
{
  "type": "deal.contact_added",
  "object": "event",
  "data": {
    "deal_id": "dl_1a2b3c",
    "contact_id": "h7w8y2f1",
    "association_type": "PRIMARY",
    "supervisor_id": "h9x2k4u7"
  }
}
```

## Delivery and idempotency handling

* Use `data.deal_id` + `data.contact_id` together as a robust idempotency pair.
* Contact-association events can arrive in rapid succession; apply upsert logic to avoid duplicate relationships.
* `association_type` and `supervisor_id` may be omitted for some records. Persist defensively.
* `association_type` identifies the contact role on the deal (for example `PRIMARY`) and is intentionally separate from top-level `type`.
* `supervisor_id` references the associated supervisor contact ID when that relation is stored; treat it as optional metadata rather than a required identifier.

## Related links

* [Webhook introduction](/docs/webhooks/introduction)
* [Webhook event types](/docs/webhooks/event-types)
