> ## Documentation Index
> Fetch the complete documentation index at: https://docs.botdog.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Events and payloads

> Every webhook event Botdog can send, with example payloads.

When you create a webhook, you subscribe to one or more of the event types below. Each event is delivered as a JSON `POST` to your endpoint with a [signed header](/webhooks/signature-verification).

## Supported events

| Event type                 | Human label         | Sent when…                                                          |
| -------------------------- | ------------------- | ------------------------------------------------------------------- |
| `LEAD_PROFILE_VISITED`     | Profile visited     | Botdog visits a lead's LinkedIn profile as part of a campaign step. |
| `LEAD_INVITATION_SENT`     | Invitation sent     | A connection invitation is sent to a lead.                          |
| `LEAD_INVITATION_ACCEPTED` | Invitation accepted | A lead accepts a connection invitation from your account.           |
| `LEAD_MESSAGE_SENT`        | Message sent        | An outbound message is sent to a lead.                              |
| `LEAD_MESSAGE_REPLIED`     | Received a reply    | A lead replies to one of your messages.                             |

<Note>
  **Not yet delivered.** The subscription API also accepts these event types, but Botdog does **not deliver them yet** —
  subscribing to them today will not produce any calls to your endpoint: `LEAD_INVITATION_WITHDRAWN`, `LEAD_SKIPPED`,
  `ACCOUNT_DISCONNECTED`, `DAILY_LIMIT_REACHED`. They are reserved for an upcoming release; this page will be updated
  with their payloads when delivery ships.
</Note>

## Shared fields

Every payload includes the following base fields:

| Field                         | Type              | Description                                        |
| ----------------------------- | ----------------- | -------------------------------------------------- |
| `id`                          | string            | Unique delivery id. Use it to deduplicate retries. |
| `timestamp`                   | string (ISO 8601) | When Botdog generated the event.                   |
| `eventType`                   | string            | One of the values from the table above.            |
| `humanReadableEventName`      | string            | Friendly label, e.g. `"Invitation sent"`.          |
| `campaignId`                  | string            | The campaign that produced the event.              |
| `campaignName`                | string            | The campaign's display name at delivery time.      |
| `botdogUserId`                | string            | The Botdog user the action was performed under.    |
| `botdogUserEmail`             | string            | Email of that Botdog user.                         |
| `botdogUserLinkedinPublicUrl` | string            | LinkedIn URL of that Botdog user.                  |

All **lead events** (every event except those tagged `CAMPAIGN_*` in future versions) also include contact fields:

| Field                | Type      | Description                                        |
| -------------------- | --------- | -------------------------------------------------- |
| `contactName`        | string    | Full name from the lead's LinkedIn profile.        |
| `contactLinkedinUrl` | string    | The lead's public LinkedIn URL.                    |
| `contactEmails`      | string\[] | Known email addresses for the lead (may be empty). |
| `contactPhones`      | string\[] | Known phone numbers for the lead (may be empty).   |
| `contactCompanyName` | string    | Current company from the lead's LinkedIn profile.  |

Per-event fields are documented below.

***

## `LEAD_PROFILE_VISITED`

Sent when Botdog visits a lead's profile as part of a campaign step.

**Extra fields**

| Field       | Type              | Description                |
| ----------- | ----------------- | -------------------------- |
| `visitedAt` | string (ISO 8601) | When the visit took place. |

**Example payload**

```json theme={null}
{
  "id": "evt_8d2a1f0c",
  "eventType": "LEAD_PROFILE_VISITED",
  "humanReadableEventName": "Profile visited",
  "timestamp": "2026-05-28T12:34:56.000Z",
  "campaignId": "cmp_01H…",
  "campaignName": "Q2 DACH founders",
  "botdogUserId": "usr_01H…",
  "botdogUserEmail": "you@example.com",
  "botdogUserLinkedinPublicUrl": "https://www.linkedin.com/in/your-handle",
  "contactName": "Ada Lovelace",
  "contactLinkedinUrl": "https://www.linkedin.com/in/adalovelace",
  "contactEmails": ["ada@example.com"],
  "contactPhones": [],
  "contactCompanyName": "Analytical Engines Ltd.",
  "visitedAt": "2026-05-28T12:34:56.000Z"
}
```

***

## `LEAD_INVITATION_SENT`

Sent when a connection invitation is sent to a lead.

**Extra fields**

| Field     | Type              | Description                                    |
| --------- | ----------------- | ---------------------------------------------- |
| `sentAt`  | string (ISO 8601) | When the invitation was sent.                  |
| `message` | string \| null    | The note included with the invitation, if any. |

**Example payload**

```json theme={null}
{
  "id": "evt_92b41cd5",
  "eventType": "LEAD_INVITATION_SENT",
  "humanReadableEventName": "Invitation sent",
  "timestamp": "2026-05-28T12:35:10.000Z",
  "campaignId": "cmp_01H…",
  "campaignName": "Q2 DACH founders",
  "botdogUserId": "usr_01H…",
  "botdogUserEmail": "you@example.com",
  "botdogUserLinkedinPublicUrl": "https://www.linkedin.com/in/your-handle",
  "contactName": "Ada Lovelace",
  "contactLinkedinUrl": "https://www.linkedin.com/in/adalovelace",
  "contactEmails": ["ada@example.com"],
  "contactPhones": [],
  "contactCompanyName": "Analytical Engines Ltd.",
  "sentAt": "2026-05-28T12:35:10.000Z",
  "message": "Hi Ada — would love to connect."
}
```

***

## `LEAD_INVITATION_ACCEPTED`

Sent when a lead accepts your connection invitation.

**Extra fields**

| Field        | Type              | Description                       |
| ------------ | ----------------- | --------------------------------- |
| `acceptedAt` | string (ISO 8601) | When the acceptance was detected. |

**Example payload**

```json theme={null}
{
  "id": "evt_a17bcd03",
  "eventType": "LEAD_INVITATION_ACCEPTED",
  "humanReadableEventName": "Invitation accepted",
  "timestamp": "2026-05-29T09:02:31.000Z",
  "campaignId": "cmp_01H…",
  "campaignName": "Q2 DACH founders",
  "botdogUserId": "usr_01H…",
  "botdogUserEmail": "you@example.com",
  "botdogUserLinkedinPublicUrl": "https://www.linkedin.com/in/your-handle",
  "contactName": "Ada Lovelace",
  "contactLinkedinUrl": "https://www.linkedin.com/in/adalovelace",
  "contactEmails": ["ada@example.com"],
  "contactPhones": [],
  "contactCompanyName": "Analytical Engines Ltd.",
  "acceptedAt": "2026-05-29T09:02:31.000Z"
}
```

***

## `LEAD_MESSAGE_SENT`

Sent when an outbound message is delivered to a lead on LinkedIn.

**Extra fields**

| Field     | Type              | Description                |
| --------- | ----------------- | -------------------------- |
| `sentAt`  | string (ISO 8601) | When the message was sent. |
| `message` | string            | The message body.          |

**Example payload**

```json theme={null}
{
  "id": "evt_b3e1f240",
  "eventType": "LEAD_MESSAGE_SENT",
  "humanReadableEventName": "Message sent",
  "timestamp": "2026-05-29T10:15:00.000Z",
  "campaignId": "cmp_01H…",
  "campaignName": "Q2 DACH founders",
  "botdogUserId": "usr_01H…",
  "botdogUserEmail": "you@example.com",
  "botdogUserLinkedinPublicUrl": "https://www.linkedin.com/in/your-handle",
  "contactName": "Ada Lovelace",
  "contactLinkedinUrl": "https://www.linkedin.com/in/adalovelace",
  "contactEmails": ["ada@example.com"],
  "contactPhones": [],
  "contactCompanyName": "Analytical Engines Ltd.",
  "sentAt": "2026-05-29T10:15:00.000Z",
  "message": "Thanks for connecting, Ada! Curious if you've explored…"
}
```

***

## `LEAD_MESSAGE_REPLIED`

Sent when a lead replies to one of your messages.

**Extra fields**

| Field       | Type              | Description                  |
| ----------- | ----------------- | ---------------------------- |
| `repliedAt` | string (ISO 8601) | When the reply was received. |
| `message`   | string            | The reply body.              |

**Example payload**

```json theme={null}
{
  "id": "evt_c44d8e91",
  "eventType": "LEAD_MESSAGE_REPLIED",
  "humanReadableEventName": "Received a reply",
  "timestamp": "2026-05-29T15:48:22.000Z",
  "campaignId": "cmp_01H…",
  "campaignName": "Q2 DACH founders",
  "botdogUserId": "usr_01H…",
  "botdogUserEmail": "you@example.com",
  "botdogUserLinkedinPublicUrl": "https://www.linkedin.com/in/your-handle",
  "contactName": "Ada Lovelace",
  "contactLinkedinUrl": "https://www.linkedin.com/in/adalovelace",
  "contactEmails": ["ada@example.com"],
  "contactPhones": [],
  "contactCompanyName": "Analytical Engines Ltd.",
  "repliedAt": "2026-05-29T15:48:22.000Z",
  "message": "Hey — happy to chat. Tuesday afternoon work for you?"
}
```

***

## Field stability

* **Field additions are non-breaking.** Botdog may add new fields to existing payloads as features ship. Treat unknown fields as forward-compatible and ignore them.
* **Removals or renames are breaking** and will be announced in the [Changelog](/changelog).
* **Test event payloads** sent from the dashboard's **Send test event** action use the same shape as production deliveries, with stub contact data.
