Segment events
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_idstringevt_…). 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.typestringsegment.contact_added.objectobjectdata.objectobjectdata.Segment membership object
objectstringsegment_membership.segmentobjectid and name of the segment.contactobjectid, email, first_name, last_name and custom_fields.reasonstringcontact 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{
"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_idstringevt_…). 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.typestringsegment.contact_removed.objectobjectdata.objectobjectdata.Segment membership object
objectstringsegment_membership.segmentobjectid and name of the segment.contactobjectid, email, first_name, last_name and custom_fields.reasonstringcontact 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{
"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"
}
}
}