Event types
Reference for every webhook event WundertreOS can emit.
Every webhook delivery is an HTTP POST to your target_url with a JSON body shaped like:
json
{
"id": "ev1a2b3c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
"event_type": "contact.tag_added",
"org_id": "a1b2c3d4-1111-2222-3333-444455556666",
"data": {
"id": "c8b1f3a0-4d2e-4f9a-9b1c-2d4e5f6a7b8c",
"org_id": "a1b2c3d4-1111-2222-3333-444455556666",
"event_type": "contact.tag_added",
"contact": { /* full ls_contacts row */ },
"occurred_at": "2026-05-17T14:30:00.000Z"
},
"delivered_at": "2026-05-17T14:30:01.000Z"
}The top-level id is the delivery/event id (from the webhook_events row). data.id is the resource id — the contact, deal, or activity the event is about. They are different UUIDs.
Inside data, the resource is nested under a key matching its kind:
| Event type | Nested key | Shape |
|---|---|---|
contact.* | data.contact | Full ls_contacts row (every DB column, not the trimmed REST field set returned by /api-contacts) |
deal.* | data.deal | Full deal row |
contact.note_added | data.activity | Full activity row (the note) |
Companion contact.updated deliveries
For contact.tag_added and contact.enriched, the system also enqueues a separate contact.updated delivery for the same contact. Your endpoint will receive both — dedupe on X-Wunder-Delivery if you only want to process one.
WundertreOS emits exactly these event types:
Contact events
Event types
| Field | Type | Description |
|---|---|---|
contact.created | event | Fires when a new contact is created — manually, via import, or via API. |
contact.updated | event | Fires when any field on a contact changes. |
contact.tag_added | event | Fires when one or more tags are added to a contact. |
contact.enriched | event | Fires when WundertreOS's enrichment service adds new data (company, LinkedIn, technographics) to a contact. |
contact.note_added | event | Fires when a note activity is added to a contact's timeline. |
Deal events
Event types
| Field | Type | Description |
|---|---|---|
deal.created | event | Fires when a new deal is created. |
deal.updated | event | Fires on any deal field change, including stage transitions and won/lost. |
Example payload: contact.tag_added
json
{
"id": "ev1a2b3c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
"event_type": "contact.tag_added",
"org_id": "a1b2c3d4-1111-2222-3333-444455556666",
"data": {
"id": "c8b1f3a0-4d2e-4f9a-9b1c-2d4e5f6a7b8c",
"org_id": "a1b2c3d4-1111-2222-3333-444455556666",
"event_type": "contact.tag_added",
"contact": {
"id": "c8b1f3a0-4d2e-4f9a-9b1c-2d4e5f6a7b8c",
"org_id": "a1b2c3d4-1111-2222-3333-444455556666",
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"tags": ["lead", "vip"],
"status": "active",
"created_at": "2026-05-10T09:12:00Z",
"updated_at": "2026-05-17T14:30:00Z"
},
"occurred_at": "2026-05-17T14:30:00.000Z"
},
"delivered_at": "2026-05-17T14:30:01.000Z"
}Delivery headers
Every delivery includes:
| Header | Value |
|---|---|
Content-Type | application/json |
X-Wunder-Signature | sha256=<hex hmac> — see Verify signatures |
X-Hook-Signature | Same HMAC value, included for Zapier REST Hooks compatibility |
X-Wunder-Event | The event_type of this delivery |
X-Wunder-Delivery | The unique event id (use it to dedupe retries) |
