WorkloomDevelopers
v1Get an API key
Webhooks/Event list

Event list

Every delivery has the same envelope. Here is what each event puts in data.

The envelope

idstring

This delivery. The same on every retry: ignore an id you have already handled.

event_idstring, nullable

The event. The same for every endpoint that receives it.

typestring

The event type, for example deal.won.

api_versionstring

Always v1 for now.

workloom_versionstring

The dated version this body is shaped in: the endpoint’s.

livemodeboolean

Always true: test keys change nothing, so nothing they do sends a webhook.

created_attimestamp

When this delivery was made.

occurred_attimestamp

When the event happened.

dataobject

The 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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

channelstring

Where they replied.

categorystring, nullable

What kind of reply Workloom read it as. Email only; null on LinkedIn and SMS.

sentimentstring, nullable

positive, neutral or negative. Email only.

email_idstring, nullable

The email message, as Workloom stores it.

message_idstring, nullable

The LinkedIn message or SMS, as Workloom stores it.

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

sequence_idstring, nullable

The sequence the email was sent from, if any.

mailbox_idstring, nullable

The mailbox that sent it.

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

sequence_idstring, nullable

The sequence the email was sent from, if any.

urlstring, nullable

The link that was clicked.

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

email_idstring, nullable

The email message, as Workloom stores it.

bounce_typestring, nullable

hard (the address does not exist) or soft (try again later).

sequence_idstring, nullable

The sequence the email was sent from, if any.

mailbox_idstring, nullable

The mailbox that sent it.

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

meeting_idstring, nullable

The meeting, as Workloom stores it.

titlestring, nullable

The meeting’s title.

start_attimestamp, nullable

When it starts.

providerstring, nullable

Where it was booked: google, outlook, calendly…

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

meeting_idstring, nullable

The meeting, as Workloom stores it.

titlestring, nullable

The meeting’s title.

start_attimestamp, nullable

When it starts.

providerstring, nullable

Where it was booked: google, outlook, calendly…

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

meeting_idstring, nullable

The meeting, as Workloom stores it.

titlestring, nullable

The meeting’s title.

start_attimestamp, nullable

When it starts.

providerstring, nullable

Where it was booked: google, outlook, calendly…

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

meeting_idstring, nullable

The meeting, as Workloom stores it.

titlestring, nullable

The meeting’s title.

start_attimestamp, nullable

When it starts.

providerstring, nullable

Where it was booked: google, outlook, calendly…

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

meeting_idstring, nullable

The meeting, as Workloom stores it.

titlestring, nullable

The meeting’s title.

start_attimestamp, nullable

When it starts.

providerstring, nullable

Where it was booked: google, outlook, calendly…

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

booking_page_idstring, nullable

The booking page.

page_urlstring, nullable

The page they booked from.

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

form_idstring, nullable

The form.

page_urlstring, nullable

The page the form was on.

answersobject

What they entered, by field name.

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

call_idstring, nullable

The call.

directionstring, nullable

Who called whom.

outcomestring, nullable

The outcome the teammate picked, for example connected, meeting, no_answer, or one of your own.

duration_secondsinteger, nullable

How long the call lasted.

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

call_idstring, nullable

The call.

fromstring, nullable

The number that called, E.164.

tostring, nullable

Your number they called, E.164.

Example payload
{
  "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.

Fields in data
deal_idstring

The deal.

dealDeal

The deal as it is when the delivery is made (it may have moved on since the event).

stagestring

The stage it opened in.

Example payload
{
  "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.

Fields in data
deal_idstring

The deal.

dealDeal

The deal as it is when the delivery is made (it may have moved on since the event).

from_stagestring, nullable

The stage it left.

stagestring

The stage it moved to.

Example payload
{
  "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.

Fields in data
deal_idstring

The deal.

dealDeal

The deal as it is when the delivery is made (it may have moved on since the event).

from_stagestring, nullable

The stage it left.

stagestring, nullable

The stage it is in now.

Example payload
{
  "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.

Fields in data
deal_idstring

The deal.

dealDeal

The deal as it is when the delivery is made (it may have moved on since the event).

from_stagestring, nullable

The stage it left.

stagestring, nullable

The stage it is in now.

Example payload
{
  "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.

Fields in data
deal_idstring

The deal.

dealDeal

The deal as it is when the delivery is made (it may have moved on since the event).

from_stagestring, nullable

The stage it left.

stagestring, nullable

The stage it is in now.

Example payload
{
  "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.

Fields in data
deal_idstring

The deal.

dealDeal

The deal as it is when the delivery is made (it may have moved on since the event).

from_stagestring, nullable

The stage it left.

stagestring, nullable

The stage it is in now.

Example payload
{
  "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.

Fields in data
deal_idstring

The deal.

fromnumber or string, nullable

The value before.

tonumber or string, nullable

The value now.

directionstring, nullable

Which way it moved: up or down.

Example payload
{
  "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.

Fields in data
deal_idstring

The deal.

fromnumber or string, nullable

The value before.

tonumber or string, nullable

The value now.

directionstring, nullable

Which way it moved: earlier or later.

Example payload
{
  "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…

Fields in data
tell_idstring, nullable

The Tell.

kindstring, nullable

job_change, promotion, leadership_change, funding, hiring, news_mention, tech_change, website_change, review_posted, linkedin_post, competitor_mention, email_found or website_visit.

titlestring, nullable

What happened, in a line.

contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

company_idstring, nullable

The company it is about. Fetch it with GET /companies/{id}.

on_open_dealboolean, nullable

Whether the contact or company has an open deal.

Example payload
{
  "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…

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

company_idstring, nullable

The company it is about. Fetch it with GET /companies/{id}.

sourcestring, nullable

How they were added, for example import, form, quarry, by_hand, api.

Example payload
{
  "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.

Fields in data
company_idstring, nullable

The company it is about. Fetch it with GET /companies/{id}.

sourcestring, nullable

How it was added.

Example payload
{
  "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.

Fields in data
record_typestring

What kind of record.

record_idstring

The record.

from_owner_seat_idstring, nullable

Who owned it before. Null when nobody did.

to_owner_seat_idstring, nullable

Who owns it now. Null when nobody does.

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

fieldstring

Which field, by its API name (title, email, custom_fields.<key> for your own).

fromobject

The value before. Any JSON type.

toobject

The value now. Any JSON type.

from_displaystring, nullable

The value before, in words, where Workloom has words for it.

to_displaystring, nullable

The value now, in words.

batch_idstring, nullable

Shared by every field changed in the same edit.

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

namestring, nullable

The contact’s name when it was deleted.

Example payload
{
  "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.

Fields in data
company_idstring, nullable

The company it is about. Fetch it with GET /companies/{id}.

fieldstring

Which field, by its API name (custom_fields.<key> for your own).

fromobject

The value before. Any JSON type.

toobject

The value now. Any JSON type.

from_displaystring, nullable

The value before, in words, where Workloom has words for it.

to_displaystring, nullable

The value now, in words.

batch_idstring, nullable

Shared by every field changed in the same edit.

Example payload
{
  "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.

Fields in data
company_idstring, nullable

The company it is about. Fetch it with GET /companies/{id}.

namestring, nullable

The company’s name when it was deleted.

Example payload
{
  "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.

Fields in data
deal_idstring

The deal.

fieldstring

Which field, by its API name (custom_fields.<key> for your own).

fromobject

The value before. Any JSON type.

toobject

The value now. Any JSON type.

from_displaystring, nullable

The value before, in words, where Workloom has words for it.

to_displaystring, nullable

The value now, in words.

batch_idstring, nullable

Shared by every field changed in the same edit.

Example payload
{
  "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.

Fields in data
deal_idstring

The deal.

namestring, nullable

The deal’s name when it was deleted.

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

sourcestring, nullable

reply, weave, person_360 (a teammate on the record), work_session, api… Open-ended.

channelsarray of string

The channels they are opted out of.

Example payload
{
  "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.

Fields in data
contact_idstring, nullable

The contact it is about. Fetch it with GET /contacts/{id}.

email_idstring, nullable

The email message, as Workloom stores it.

mailbox_idstring, nullable

The mailbox that sent it.

tostring, nullable

The address it went to.

subjectstring, nullable

Its subject line.

message_idstring, nullable

The message id the mail provider gave it.

Example payload
{
  "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.

Fields in data
idstring

The Activity log entry.

textstring

The entry as a sentence, for example "Asha moved Northwind to Proposal".

actionstring

What happened, for example deal.stage_moved, seat.invited, auth.signed_in.

categorystring, nullable

pipeline, records, rules, outreach, team, security, credits, sync or settings.

sourcestring, nullable

Where 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 object

Each changed field, { field, from, to }.

detailsobject

Anything else the entry records.

Example payload
{
  "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.

Fields in data
messagestring

A sentence saying the endpoint works.

Example payload
{
  "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."
  }
}
Was this page useful?