# Segment events

> Contacts joining or leaving a tracked segment.



## segment.contact_added

> Sent when a contact joins a tracked segment, with the segment, the contact, the reason and when it joined. Alpha: open to the Emailit team only.

# segment.contact_added

Sent when a contact starts matching a [tracked segment](/docs/segments/tracked/). Segments that aren't tracked don't send this event. The first count after a tracked segment is created, or after tracking resumes, doesn't send it either.

> **Segments are in alpha:** Segments are open only to the Emailit team while we test them. See [Who can use segments](/docs/segments/#who-can-use-segments).

The same join starts automations with the **Added to segment** trigger, and reaches goals and **Wait until** steps on that event, unless `reason` is `segment_updated`.

Webhook requests carry a JSON array of events like this one; see [Webhook requests](/docs/webhooks/webhook-requests/).

```json
{
  "event_id": "evt_2xLc9Rr4Tn6Wb1Qm8Ks3Vf0Hd7a",
  "type": "segment.contact_added",
  "object": {
    "object": "segment_membership",
    "segment": {
      "id": "seg_2nYs9Kd1Lq3vB8wXcE4fT7uRm0p",
      "name": "Pro customers renewing soon"
    },
    "contact": {
      "id": "con_2xLf5Jk1Xs7Nc2Ur8Zo3Ld6Pt0a",
      "email": "ada@example.com",
      "first_name": "Ada",
      "last_name": "Lovelace",
      "custom_fields": {
        "plan": "pro"
      }
    },
    "reason": "contact",
    "joined_at": "2026-10-18T12:00:00.000000+00:00"
  },
  "data": {
    "object": {
      "object": "segment_membership",
      "segment": {
        "id": "seg_2nYs9Kd1Lq3vB8wXcE4fT7uRm0p",
        "name": "Pro customers renewing soon"
      },
      "contact": {
        "id": "con_2xLf5Jk1Xs7Nc2Ur8Zo3Ld6Pt0a",
        "email": "ada@example.com",
        "first_name": "Ada",
        "last_name": "Lovelace",
        "custom_fields": {
          "plan": "pro"
        }
      },
      "reason": "contact",
      "joined_at": "2026-10-18T12:00:00.000000+00:00"
    }
  }
}
```

## Fields

- `event_id` (string): Event ID (`evt_…`). A retried request carries the same ID, so use it to skip events you already handled. You can also look the event up with [Retrieve an event](/docs/api-reference/events/get/).

- `type` (string): Always `segment.contact_added`.

- `object` (object): The membership change the event describes. Its fields are listed below.

- `data.object` (object): The same object again, in the shape that the [Events API](/docs/api-reference/events/get/) returns in `data`.

### Segment membership object

- `object` (string): Always `segment_membership`.

- `segment` (object): `id` and `name` of the segment.

- `contact` (object): The contact: `id`, `email`, `first_name`, `last_name` and `custom_fields`.

- `reason` (string): Why the contact joined: `contact` when contacts changed, including imports and deleted audiences, `schedule` when the daily sync found it, for example because a date rule now matches, or `segment_updated` when the segment's source or filters were edited.

- `joined_at` (string): When Emailit recorded the join, in ISO 8601 with a UTC offset.

---
Source: https://emailit.com/docs/webhooks/events/segment/segment-contact-added/

## segment.contact_removed

> Sent when a contact leaves a tracked segment, with the segment, the contact, the reason and when it left. Alpha: open to the Emailit team only.

# segment.contact_removed

Sent when a contact stops matching a [tracked segment](/docs/segments/tracked/). Segments that aren't tracked don't send this event, and contacts that leave because they were deleted don't either.

> **Segments are in alpha:** Segments are open only to the Emailit team while we test them. See [Who can use segments](/docs/segments/#who-can-use-segments).

The same leave starts automations with the **Removed from segment** trigger, and ends runs with that exit condition, unless `reason` is `segment_updated`.

Webhook requests carry a JSON array of events like this one; see [Webhook requests](/docs/webhooks/webhook-requests/).

```json
{
  "event_id": "evt_2xLd4Ks8Vp1Rm6Wc3Nt9Bh5Qy0e",
  "type": "segment.contact_removed",
  "object": {
    "object": "segment_membership",
    "segment": {
      "id": "seg_2nYs9Kd1Lq3vB8wXcE4fT7uRm0p",
      "name": "Pro customers renewing soon"
    },
    "contact": {
      "id": "con_2xLf5Jk1Xs7Nc2Ur8Zo3Ld6Pt0a",
      "email": "ada@example.com",
      "first_name": "Ada",
      "last_name": "Lovelace",
      "custom_fields": {
        "plan": "pro",
        "renews_on": "2026-12-01"
      }
    },
    "reason": "schedule",
    "left_at": "2026-10-18T00:30:05.000000+00:00"
  },
  "data": {
    "object": {
      "object": "segment_membership",
      "segment": {
        "id": "seg_2nYs9Kd1Lq3vB8wXcE4fT7uRm0p",
        "name": "Pro customers renewing soon"
      },
      "contact": {
        "id": "con_2xLf5Jk1Xs7Nc2Ur8Zo3Ld6Pt0a",
        "email": "ada@example.com",
        "first_name": "Ada",
        "last_name": "Lovelace",
        "custom_fields": {
          "plan": "pro",
          "renews_on": "2026-12-01"
        }
      },
      "reason": "schedule",
      "left_at": "2026-10-18T00:30:05.000000+00:00"
    }
  }
}
```

## Fields

- `event_id` (string): Event ID (`evt_…`). A retried request carries the same ID, so use it to skip events you already handled. You can also look the event up with [Retrieve an event](/docs/api-reference/events/get/).

- `type` (string): Always `segment.contact_removed`.

- `object` (object): The membership change the event describes. Its fields are listed below.

- `data.object` (object): The same object again, in the shape that the [Events API](/docs/api-reference/events/get/) returns in `data`.

### Segment membership object

- `object` (string): Always `segment_membership`.

- `segment` (object): `id` and `name` of the segment.

- `contact` (object): The contact as it is now: `id`, `email`, `first_name`, `last_name` and `custom_fields`.

- `reason` (string): Why the contact left: `contact` when contacts changed, including imports and deleted audiences, `schedule` when the daily sync found it, for example because a date rule no longer matches, or `segment_updated` when the segment's source or filters were edited.

- `left_at` (string): When Emailit recorded the leave, in ISO 8601 with a UTC offset.

---
Source: https://emailit.com/docs/webhooks/events/segment/segment-contact-removed/
