Event list
Every delivery has the same envelope. Here is what each event puts in data.
The envelope
idstringThis delivery. The same on every retry: ignore an id you have already handled.
event_idstring, nullableThe event. The same for every endpoint that receives it.
typestringThe event type, for example deal.won.
api_versionstringAlways v1 for now.
workloom_versionstringThe dated version this body is shaped in: the endpoint’s.
livemodebooleanAlways true: test keys change nothing, so nothing they do sends a webhook.
created_attimestampWhen this delivery was made.
occurred_attimestampWhen the event happened.
dataobjectThe event’s own fields, listed under each event below.
All events
reply.receivedSomeone replies
A contact wrote back: by email (to a sequence email, once Workloom has read what kind of reply it is), on LinkedIn, or by SMS.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
channelstringWhere they replied.
categorystring, nullableWhat kind of reply Workloom read it as. Email only; null on LinkedIn and SMS.
sentimentstring, nullablepositive, neutral or negative. Email only.
email_idstring, nullableThe email message, as Workloom stores it.
message_idstring, nullableThe LinkedIn message or SMS, as Workloom stores it.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "reply.received",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"channel": "email",
"category": "interested",
"sentiment": "positive",
"email_id": "66ff10c2e4b0a1b2c3d4ee01",
"message_id": null
}
}email.openedAn email is opened
A tracked email was opened. Mail apps and privacy proxies load the tracking image on their own, so one email can send several of these and an open on its own is a weak signal.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
sequence_idstring, nullableThe sequence the email was sent from, if any.
mailbox_idstring, nullableThe mailbox that sent it.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "email.opened",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"sequence_id": "66fa01d2e4b0a1b2c3d45e01",
"mailbox_id": "66fa01d2e4b0a1b2c3d45e99"
}
}email.clickedA link in an email is clicked
A tracked link in an email was clicked.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
sequence_idstring, nullableThe sequence the email was sent from, if any.
urlstring, nullableThe link that was clicked.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "email.clicked",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"sequence_id": "66fa01d2e4b0a1b2c3d45e01",
"url": "https://brightline.example/pricing"
}
}email.bouncedAn email bounces
An email could not be delivered.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
email_idstring, nullableThe email message, as Workloom stores it.
bounce_typestring, nullablehard (the address does not exist) or soft (try again later).
sequence_idstring, nullableThe sequence the email was sent from, if any.
mailbox_idstring, nullableThe mailbox that sent it.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "email.bounced",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"email_id": "66ff10c2e4b0a1b2c3d4ee01",
"bounce_type": "hard",
"sequence_id": "66fa01d2e4b0a1b2c3d45e01",
"mailbox_id": "66fa01d2e4b0a1b2c3d45e99"
}
}meeting.bookedA meeting is booked
A meeting with a known contact appeared on a connected calendar.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
meeting_idstring, nullableThe meeting, as Workloom stores it.
titlestring, nullableThe meeting’s title.
start_attimestamp, nullableWhen it starts.
providerstring, nullableWhere it was booked: google, outlook, calendly…
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "meeting.booked",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"meeting_id": "66ff2a30e4b0a1b2c3d4ab12",
"title": "Brightline intro call",
"start_at": "2026-10-09T10:00:00.000Z",
"provider": "google"
}
}meeting.movedA meeting is moved
A booked meeting moved to another time. start_at is the new time.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
meeting_idstring, nullableThe meeting, as Workloom stores it.
titlestring, nullableThe meeting’s title.
start_attimestamp, nullableWhen it starts.
providerstring, nullableWhere it was booked: google, outlook, calendly…
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "meeting.moved",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"meeting_id": "66ff2a30e4b0a1b2c3d4ab12",
"title": "Brightline intro call",
"start_at": "2026-10-09T10:00:00.000Z",
"provider": "google"
}
}meeting.cancelledA meeting is cancelled
A booked meeting was cancelled.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
meeting_idstring, nullableThe meeting, as Workloom stores it.
titlestring, nullableThe meeting’s title.
start_attimestamp, nullableWhen it starts.
providerstring, nullableWhere it was booked: google, outlook, calendly…
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "meeting.cancelled",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"meeting_id": "66ff2a30e4b0a1b2c3d4ab12",
"title": "Brightline intro call",
"start_at": "2026-10-09T10:00:00.000Z",
"provider": "google"
}
}meeting.heldA meeting happens
A meeting took place: a connected call or a meeting note in its window, or its owner said so.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
meeting_idstring, nullableThe meeting, as Workloom stores it.
titlestring, nullableThe meeting’s title.
start_attimestamp, nullableWhen it starts.
providerstring, nullableWhere it was booked: google, outlook, calendly…
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "meeting.held",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"meeting_id": "66ff2a30e4b0a1b2c3d4ab12",
"title": "Brightline intro call",
"start_at": "2026-10-09T10:00:00.000Z",
"provider": "google"
}
}meeting.no_showA no-show
The meeting’s owner said the contact did not join.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
meeting_idstring, nullableThe meeting, as Workloom stores it.
titlestring, nullableThe meeting’s title.
start_attimestamp, nullableWhen it starts.
providerstring, nullableWhere it was booked: google, outlook, calendly…
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "meeting.no_show",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"meeting_id": "66ff2a30e4b0a1b2c3d4ab12",
"title": "Brightline intro call",
"start_at": "2026-10-09T10:00:00.000Z",
"provider": "google"
}
}booking.madeSomeone books through your booking page
A visitor booked through a Workloom booking page. The same booking usually also sends meeting.booked once it reaches the calendar.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
booking_page_idstring, nullableThe booking page.
page_urlstring, nullableThe page they booked from.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "booking.made",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"booking_page_id": "66fb11e3e4b0a1b2c3d4b0b0",
"page_url": "https://useworkloom.com/book-a-demo/"
}
}form.submittedA form is submitted
A visitor submitted one of your Workloom forms.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
form_idstring, nullableThe form.
page_urlstring, nullableThe page the form was on.
answersobjectWhat they entered, by field name.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "form.submitted",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"form_id": "66fb11e3e4b0a1b2c3d4f0f0",
"page_url": "https://useworkloom.com/book-a-demo/",
"answers": {
"name": "Priya Nair",
"email": "priya@brightline.example",
"team_size": "25"
}
}
}call.loggedA call ends with an outcome
A teammate finished a call and logged how it went.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
call_idstring, nullableThe call.
directionstring, nullableWho called whom.
outcomestring, nullableThe outcome the teammate picked, for example connected, meeting, no_answer, or one of your own.
duration_secondsinteger, nullableHow long the call lasted.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "call.logged",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"call_id": "66ff3b41e4b0a1b2c3d4ca11",
"direction": "outbound",
"outcome": "meeting",
"duration_seconds": 412
}
}call.missedAn inbound call is missed
Someone called one of your numbers and nobody answered.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
call_idstring, nullableThe call.
fromstring, nullableThe number that called, E.164.
tostring, nullableYour number they called, E.164.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "call.missed",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"call_id": "66ff3b41e4b0a1b2c3d4ca11",
"from": "+919820011210",
"to": "+918045671234"
}
}deal.createdA deal is created
A deal was opened, by a person, an automation, or the API.
deal_idstringThe deal.
dealDealThe deal as it is when the delivery is made (it may have moved on since the event).
stagestringThe stage it opened in.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "deal.created",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"deal_id": "66f5c3d1e4b0a1b2c3d4c3d4",
"deal": {
"id": "66f5c3d1e4b0a1b2c3d4c3d4",
"name": "Brightline, 10 seats",
"pipeline_id": "default",
"stage": "proposal",
"status": "open",
"amount": 29900,
"currency": "USD",
"probability": 50,
"forecast_category": "best_case",
"expected_close_date": "2026-11-14T00:00:00.000Z",
"next_step": {
"text": "Call with VP Finance",
"due_at": "2026-10-09T10:00:00.000Z"
},
"company_name": "Brightline",
"company_domain": "brightline.example",
"company_id": "66f19b77e4b0a1b2c3d4a1b2",
"primary_contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"contacts": [
{
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"role": "champion"
}
],
"closed_at": null,
"close_reason_code": null,
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"source": "api:Warehouse sync",
"custom_fields": {
"competitor": "Pipedrive"
},
"created_at": "2026-09-25T12:00:00.000Z",
"updated_at": "2026-10-03T08:42:10.000Z"
},
"stage": "proposal"
}
}deal.stage_changedA deal moves stage
A deal moved between open stages. Won and lost are their own events.
deal_idstringThe deal.
dealDealThe deal as it is when the delivery is made (it may have moved on since the event).
from_stagestring, nullableThe stage it left.
stagestringThe stage it moved to.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "deal.stage_changed",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"deal_id": "66f5c3d1e4b0a1b2c3d4c3d4",
"deal": {
"id": "66f5c3d1e4b0a1b2c3d4c3d4",
"name": "Brightline, 10 seats",
"pipeline_id": "default",
"stage": "proposal",
"status": "open",
"amount": 29900,
"currency": "USD",
"probability": 50,
"forecast_category": "best_case",
"expected_close_date": "2026-11-14T00:00:00.000Z",
"next_step": {
"text": "Call with VP Finance",
"due_at": "2026-10-09T10:00:00.000Z"
},
"company_name": "Brightline",
"company_domain": "brightline.example",
"company_id": "66f19b77e4b0a1b2c3d4a1b2",
"primary_contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"contacts": [
{
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"role": "champion"
}
],
"closed_at": null,
"close_reason_code": null,
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"source": "api:Warehouse sync",
"custom_fields": {
"competitor": "Pipedrive"
},
"created_at": "2026-09-25T12:00:00.000Z",
"updated_at": "2026-10-03T08:42:10.000Z"
},
"from_stage": "discovery",
"stage": "proposal"
}
}deal.wonA deal is won
A deal moved to a won stage.
deal_idstringThe deal.
dealDealThe deal as it is when the delivery is made (it may have moved on since the event).
from_stagestring, nullableThe stage it left.
stagestring, nullableThe stage it is in now.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "deal.won",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"deal_id": "66f5c3d1e4b0a1b2c3d4c3d4",
"deal": {
"id": "66f5c3d1e4b0a1b2c3d4c3d4",
"name": "Brightline, 10 seats",
"pipeline_id": "default",
"stage": "won",
"status": "won",
"amount": 29900,
"currency": "USD",
"probability": 100,
"forecast_category": "best_case",
"expected_close_date": "2026-11-14T00:00:00.000Z",
"next_step": {
"text": "Call with VP Finance",
"due_at": "2026-10-09T10:00:00.000Z"
},
"company_name": "Brightline",
"company_domain": "brightline.example",
"company_id": "66f19b77e4b0a1b2c3d4a1b2",
"primary_contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"contacts": [
{
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"role": "champion"
}
],
"closed_at": "2026-10-07T09:12:40.000Z",
"close_reason_code": null,
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"source": "api:Warehouse sync",
"custom_fields": {
"competitor": "Pipedrive"
},
"created_at": "2026-09-25T12:00:00.000Z",
"updated_at": "2026-10-03T08:42:10.000Z"
},
"from_stage": "commit",
"stage": "won"
}
}deal.lostA deal is lost
A deal moved to a lost stage. deal.close_reason_code says why.
deal_idstringThe deal.
dealDealThe deal as it is when the delivery is made (it may have moved on since the event).
from_stagestring, nullableThe stage it left.
stagestring, nullableThe stage it is in now.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "deal.lost",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"deal_id": "66f5c3d1e4b0a1b2c3d4c3d4",
"deal": {
"id": "66f5c3d1e4b0a1b2c3d4c3d4",
"name": "Brightline, 10 seats",
"pipeline_id": "default",
"stage": "proposal",
"status": "open",
"amount": 29900,
"currency": "USD",
"probability": 50,
"forecast_category": "best_case",
"expected_close_date": "2026-11-14T00:00:00.000Z",
"next_step": {
"text": "Call with VP Finance",
"due_at": "2026-10-09T10:00:00.000Z"
},
"company_name": "Brightline",
"company_domain": "brightline.example",
"company_id": "66f19b77e4b0a1b2c3d4a1b2",
"primary_contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"contacts": [
{
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"role": "champion"
}
],
"closed_at": null,
"close_reason_code": null,
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"source": "api:Warehouse sync",
"custom_fields": {
"competitor": "Pipedrive"
},
"created_at": "2026-09-25T12:00:00.000Z",
"updated_at": "2026-10-03T08:42:10.000Z"
},
"from_stage": "discovery",
"stage": "proposal"
}
}deal.parkedA deal is parked
A deal was taken off the board until a date.
deal_idstringThe deal.
dealDealThe deal as it is when the delivery is made (it may have moved on since the event).
from_stagestring, nullableThe stage it left.
stagestring, nullableThe stage it is in now.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "deal.parked",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"deal_id": "66f5c3d1e4b0a1b2c3d4c3d4",
"deal": {
"id": "66f5c3d1e4b0a1b2c3d4c3d4",
"name": "Brightline, 10 seats",
"pipeline_id": "default",
"stage": "proposal",
"status": "open",
"amount": 29900,
"currency": "USD",
"probability": 50,
"forecast_category": "best_case",
"expected_close_date": "2026-11-14T00:00:00.000Z",
"next_step": {
"text": "Call with VP Finance",
"due_at": "2026-10-09T10:00:00.000Z"
},
"company_name": "Brightline",
"company_domain": "brightline.example",
"company_id": "66f19b77e4b0a1b2c3d4a1b2",
"primary_contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"contacts": [
{
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"role": "champion"
}
],
"closed_at": null,
"close_reason_code": null,
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"source": "api:Warehouse sync",
"custom_fields": {
"competitor": "Pipedrive"
},
"created_at": "2026-09-25T12:00:00.000Z",
"updated_at": "2026-10-03T08:42:10.000Z"
},
"from_stage": "discovery",
"stage": "proposal"
}
}deal.returnedA parked deal is back
A parked deal came back to the board.
deal_idstringThe deal.
dealDealThe deal as it is when the delivery is made (it may have moved on since the event).
from_stagestring, nullableThe stage it left.
stagestring, nullableThe stage it is in now.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "deal.returned",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"deal_id": "66f5c3d1e4b0a1b2c3d4c3d4",
"deal": {
"id": "66f5c3d1e4b0a1b2c3d4c3d4",
"name": "Brightline, 10 seats",
"pipeline_id": "default",
"stage": "proposal",
"status": "open",
"amount": 29900,
"currency": "USD",
"probability": 50,
"forecast_category": "best_case",
"expected_close_date": "2026-11-14T00:00:00.000Z",
"next_step": {
"text": "Call with VP Finance",
"due_at": "2026-10-09T10:00:00.000Z"
},
"company_name": "Brightline",
"company_domain": "brightline.example",
"company_id": "66f19b77e4b0a1b2c3d4a1b2",
"primary_contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"contacts": [
{
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"role": "champion"
}
],
"closed_at": null,
"close_reason_code": null,
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"source": "api:Warehouse sync",
"custom_fields": {
"competitor": "Pipedrive"
},
"created_at": "2026-09-25T12:00:00.000Z",
"updated_at": "2026-10-03T08:42:10.000Z"
},
"from_stage": "discovery",
"stage": "proposal"
}
}deal.amount_changedA deal’s amount changes
A deal’s amount changes.
deal_idstringThe deal.
fromnumber or string, nullableThe value before.
tonumber or string, nullableThe value now.
directionstring, nullableWhich way it moved: up or down.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "deal.amount_changed",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"deal_id": "66f5c3d1e4b0a1b2c3d4c3d4",
"from": 24000,
"to": 29900,
"direction": "up"
}
}deal.close_date_changedA deal’s close date changes
A deal’s close date changes.
deal_idstringThe deal.
fromnumber or string, nullableThe value before.
tonumber or string, nullableThe value now.
directionstring, nullableWhich way it moved: earlier or later.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "deal.close_date_changed",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"deal_id": "66f5c3d1e4b0a1b2c3d4c3d4",
"from": "2026-11-14T00:00:00.000Z",
"to": "2026-11-21T00:00:00.000Z",
"direction": "later"
}
}tell.firedA Tell fires
Workloom spotted a buying signal on a contact or their company: a job change, funding, hiring, a pricing page visit…
tell_idstring, nullableThe Tell.
kindstring, nullablejob_change, promotion, leadership_change, funding, hiring, news_mention, tech_change, website_change, review_posted, linkedin_post, competitor_mention, email_found or website_visit.
titlestring, nullableWhat happened, in a line.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
company_idstring, nullableThe company it is about. Fetch it with GET /companies/{id}.
on_open_dealboolean, nullableWhether the contact or company has an open deal.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "tell.fired",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"tell_id": "66ff4c52e4b0a1b2c3d4fe77",
"kind": "funding",
"title": "Brightline raised a Series B",
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"company_id": "66f19b77e4b0a1b2c3d4a1b2",
"on_open_deal": true
}
}contact.createdA contact is added
A new contact was added to the workspace: by hand, an import, a form, Quarry, the API…
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
company_idstring, nullableThe company it is about. Fetch it with GET /companies/{id}.
sourcestring, nullableHow they were added, for example import, form, quarry, by_hand, api.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "contact.created",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"company_id": "66f19b77e4b0a1b2c3d4a1b2",
"source": "import"
}
}company.createdA company is added
A new company was added to the workspace.
company_idstring, nullableThe company it is about. Fetch it with GET /companies/{id}.
sourcestring, nullableHow it was added.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "company.created",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"company_id": "66f19b77e4b0a1b2c3d4a1b2",
"source": "by_hand"
}
}record.owner_changedAn owner changes
A contact, company or deal was handed to another teammate.
record_typestringWhat kind of record.
record_idstringThe record.
from_owner_seat_idstring, nullableWho owned it before. Null when nobody did.
to_owner_seat_idstring, nullableWho owns it now. Null when nobody does.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "record.owner_changed",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"record_type": "contact",
"record_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"from_owner_seat_id": null,
"to_owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b"
}
}contact.updatedA contact changes
A field on a contact changed (other than its owner, which has its own event). One delivery per field; the deliveries from one edit share batch_id.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
fieldstringWhich field, by its API name (title, email, custom_fields.<key> for your own).
fromobjectThe value before. Any JSON type.
toobjectThe value now. Any JSON type.
from_displaystring, nullableThe value before, in words, where Workloom has words for it.
to_displaystring, nullableThe value now, in words.
batch_idstring, nullableShared by every field changed in the same edit.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "contact.updated",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"field": null,
"from": "+919820011210",
"to": "+918045671234",
"from_display": null,
"to_display": null,
"batch_id": null
}
}contact.deletedA contact is deleted
A contact was deleted, in Workloom or over the API. A contact deleted over the API stays on the do-not-contact list.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
namestring, nullableThe contact’s name when it was deleted.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "contact.deleted",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"name": null
}
}company.updatedA company changes
A field on a company changed (other than its owner, which has its own event). One delivery per field; the deliveries from one edit share batch_id.
company_idstring, nullableThe company it is about. Fetch it with GET /companies/{id}.
fieldstringWhich field, by its API name (custom_fields.<key> for your own).
fromobjectThe value before. Any JSON type.
toobjectThe value now. Any JSON type.
from_displaystring, nullableThe value before, in words, where Workloom has words for it.
to_displaystring, nullableThe value now, in words.
batch_idstring, nullableShared by every field changed in the same edit.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "company.updated",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"company_id": "66f19b77e4b0a1b2c3d4a1b2",
"field": null,
"from": "+919820011210",
"to": "+918045671234",
"from_display": null,
"to_display": null,
"batch_id": null
}
}company.deletedA company is deleted
A company was deleted.
company_idstring, nullableThe company it is about. Fetch it with GET /companies/{id}.
namestring, nullableThe company’s name when it was deleted.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "company.deleted",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"company_id": "66f19b77e4b0a1b2c3d4a1b2",
"name": null
}
}deal.updatedA deal changes
A field on a deal changed (other than its stage, amount, close date and owner, which have their own events). One delivery per field; the deliveries from one edit share batch_id.
deal_idstringThe deal.
fieldstringWhich field, by its API name (custom_fields.<key> for your own).
fromobjectThe value before. Any JSON type.
toobjectThe value now. Any JSON type.
from_displaystring, nullableThe value before, in words, where Workloom has words for it.
to_displaystring, nullableThe value now, in words.
batch_idstring, nullableShared by every field changed in the same edit.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "deal.updated",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"deal_id": "66f5c3d1e4b0a1b2c3d4c3d4",
"field": null,
"from": "+919820011210",
"to": "+918045671234",
"from_display": null,
"to_display": null,
"batch_id": null
}
}deal.deletedA deal is deleted
A deal was deleted.
deal_idstringThe deal.
namestring, nullableThe deal’s name when it was deleted.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "deal.deleted",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"deal_id": "66f5c3d1e4b0a1b2c3d4c3d4",
"name": null
}
}contact.unsubscribedA contact opts out
A contact was opted out of every channel: they asked in a reply, a teammate marked them, a weave suppressed them, or they were deleted over the API.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
sourcestring, nullablereply, weave, person_360 (a teammate on the record), work_session, api… Open-ended.
channelsarray of stringThe channels they are opted out of.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "contact.unsubscribed",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"source": "import",
"channels": null
}
}email.sentAn email is sent
An email left one of your mailboxes: a sequence step, a weave, a teammate’s reply or a send from the inbox. contact_id is the contact with that address, when there is one.
contact_idstring, nullableThe contact it is about. Fetch it with GET /contacts/{id}.
email_idstring, nullableThe email message, as Workloom stores it.
mailbox_idstring, nullableThe mailbox that sent it.
tostring, nullableThe address it went to.
subjectstring, nullableIts subject line.
message_idstring, nullableThe message id the mail provider gave it.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "email.sent",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"contact_id": "66f2a1c0e4b0a1b2c3d4e5f6",
"email_id": "66ff10c2e4b0a1b2c3d4ee01",
"mailbox_id": "66fa01d2e4b0a1b2c3d45e99",
"to": "+918045671234",
"subject": {
"type": "deal",
"id": "66f5c3d1e4b0a1b2c3d4c3d4",
"name": "Brightline, 10 seats"
},
"message_id": null
}
}activity_log.eventActivity log
Every entry in your Activity log (Settings › Security), as a sentence and as data. Includes sign-ins with the device and a masked address, so it is never part of *: choose it by name. Not part of *: subscribe to it by name.
idstringThe Activity log entry.
textstringThe entry as a sentence, for example "Asha moved Northwind to Proposal".
actionstringWhat happened, for example deal.stage_moved, seat.invited, auth.signed_in.
categorystring, nullablepipeline, records, rules, outreach, team, security, credits, sync or settings.
sourcestring, nullableWhere in Workloom it happened.
actorobject{ kind, name }. kind is person, wren, rule, integration or system.
subjectobject, nullable{ type, id, name } of the record it is about.
changesarray of objectEach changed field, { field, from, to }.
detailsobjectAnything else the entry records.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "activity_log.event",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"text": "Asha Rao moved Brightline, 10 seats to Proposal",
"action": "deal.stage_moved",
"category": "pipeline",
"source": "pipeline",
"actor": {
"kind": "person",
"name": "Asha Rao"
},
"subject": {
"type": "deal",
"id": "66f5c3d1e4b0a1b2c3d4c3d4",
"name": "Brightline, 10 seats"
},
"changes": [
{
"field": "stage",
"from": "discovery",
"to": "proposal"
}
],
"details": {}
}
}webhook.testA test delivery
Sent only by "Send a test" in Settings › API and webhooks, never on its own.
messagestringA sentence saying the endpoint works.
{
"id": "whd_3f1c0d9a2b7e44c1a8d6b5f0",
"event_id": "evt_66ff5d63e4b0a1b2c3d4aa01",
"type": "webhook.test",
"api_version": "v1",
"workloom_version": "2026-10-07",
"livemode": true,
"created_at": "2026-10-07T09:12:44.000Z",
"occurred_at": "2026-10-07T09:12:40.000Z",
"data": {
"message": "If you can read this, your endpoint and signature check work."
}
}No events match. Try a field name like contact_id.