Skip to content
Docs

Contacts joining or leaving a tracked segment.

segment.contact_added

Sent when a contact starts matching a tracked segment. 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.

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.

Fields

event_idstring
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.
typestring
Always segment.contact_added.
objectobject
The membership change the event describes. Its fields are listed below.
data.objectobject
The same object again, in the shape that the Events API returns in data.

Segment membership object

objectstring
Always segment_membership.
segmentobject
id and name of the segment.
contactobject
The contact: id, email, first_name, last_name and custom_fields.
reasonstring
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_atstring
When Emailit recorded the join, in ISO 8601 with a UTC offset.
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"
    }
  }
}

segment.contact_removed

Sent when a contact stops matching a tracked segment. Segments that aren’t tracked don’t send this event, and contacts that leave because they were deleted don’t either.

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.

Fields

event_idstring
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.
typestring
Always segment.contact_removed.
objectobject
The membership change the event describes. Its fields are listed below.
data.objectobject
The same object again, in the shape that the Events API returns in data.

Segment membership object

objectstring
Always segment_membership.
segmentobject
id and name of the segment.
contactobject
The contact as it is now: id, email, first_name, last_name and custom_fields.
reasonstring
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_atstring
When Emailit recorded the leave, in ISO 8601 with a UTC offset.
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"
    }
  }
}

Was this page helpful?

Thanks for the feedback.

Thanks, we read every message.