Webhook events
contact.created
A contact was created.
When it fires
contact.created fires when a contact is added in the dashboard or through the REST API. An API create for an existing address merges supplied fields and emits contact.updated if anything changed. Dashboard Add Manually skips existing addresses. Contacts added by a CSV import emit no contact events.
Payload
json
{
"type": "contact.created",
"created_at": "2026-09-29T10:00:00.000Z",
"data": {
"id": "YOUR_CONTACT_ID",
"segment_ids": ["YOUR_SEGMENT_ID"],
"created_at": "2026-09-29T09:59:59.000Z",
"updated_at": "2026-09-29T09:59:59.000Z",
"email": "ada@example.net",
"first_name": "Ada",
"last_name": null,
"unsubscribed": false
}
}| Field | Description |
|---|---|
id | The contact's ID. |
segment_ids | At most 100 segment IDs; this is not a complete membership list for contacts in more segments. |
created_at, updated_at | When the contact was created and last changed. |
email | The contact's normalized email address. |
first_name, last_name | The name, or null when empty. |
unsubscribed | Whether the contact is unsubscribed from all broadcasts. |
For all current memberships, page through list contact segments. Custom property values and topic choices are not part of the payload. Fetch them with retrieve contact and list contact topics.
Handle the event
Verify the signature and deduplicate by svix-id.