# Campaign events

> Campaigns created, changed, scheduled, sent, canceled, archived or deleted.



## campaign.created

> Sent when a campaign is created through the API or the dashboard, including when you duplicate a campaign.

# campaign.created

Sent when a campaign is created with [Create a campaign](/docs/api-reference/campaigns/create/) or in the dashboard, including when you duplicate a campaign. New campaigns start as `draft`.

Webhook requests carry a JSON array of events like this one; see [Webhook requests](/docs/webhooks/webhook-requests/).

```json
{
  "event_id": "evt_2xLc9Rr4Tn6Wb1Qm8Ks3Vf0Hd7a",
  "type": "campaign.created",
  "object": {
    "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
    "object": "campaign",
    "name": "October product update",
    "status": "draft",
    "subject": "What's new in October",
    "from_email": "news@acme.com",
    "from_name": "Acme",
    "scheduled_at": null,
    "sent_at": null,
    "created_at": "2026-09-29T15:10:44.031000+00:00"
  },
  "data": {
    "object": {
      "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
      "object": "campaign",
      "name": "October product update",
      "status": "draft",
      "subject": "What's new in October",
      "from_email": "news@acme.com",
      "from_name": "Acme",
      "scheduled_at": null,
      "sent_at": null,
      "created_at": "2026-09-29T15:10:44.031000+00:00"
    }
  }
}
```

## Fields

- `event_id` (string): Event ID (`evt_…`). A retried request carries the same ID, so use it to skip events you already handled. You can also look the event up with [Retrieve an event](/docs/api-reference/events/get/).

- `type` (string): Always `campaign.created`.

- `object` (object): The campaign the event describes. Its fields are listed below.

- `data.object` (object): The same object again, in the shape that the [Events API](/docs/api-reference/events/get/) returns in `data`.

### Campaign object

- `id` (string): Campaign ID (`cmp_…`).

- `object` (string): Always `campaign`.

- `name` (string): Campaign name.

- `status` (string): Always `draft`.

- `subject` (string): Subject line, or an empty string if it isn't set yet.

- `from_email` (string): Sender address, or an empty string.

- `from_name` (string): Sender name, or an empty string.

- `scheduled_at` (string | null): When the campaign is scheduled to send, or `null`.

- `sent_at` (string | null): When the campaign was sent, or `null`.

- `created_at` (string): When the campaign was created, in ISO 8601 with a UTC offset.

---
Source: https://emailit.com/docs/webhooks/events/campaign/campaign-created/

## campaign.updated

> Sent when a campaign's content or settings change, or when it returns to draft after a canceled schedule or unarchive.

# campaign.updated

Sent when a campaign's content or settings change, for example with [Update a campaign](/docs/api-reference/campaigns/update/), or when it goes back to `draft` because you canceled its schedule or unarchived it in the dashboard. When the status changed, `previous_status` holds the old status.

Webhook requests carry a JSON array of events like this one; see [Webhook requests](/docs/webhooks/webhook-requests/).

```json
{
  "event_id": "evt_2xLc9Rr4Tn6Wb1Qm8Ks3Vf0Hd7a",
  "type": "campaign.updated",
  "object": {
    "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
    "object": "campaign",
    "name": "October product update",
    "status": "draft",
    "subject": "What's new in October",
    "from_email": "news@acme.com",
    "from_name": "Acme",
    "scheduled_at": null,
    "sent_at": null,
    "created_at": "2026-09-29T15:10:44.031000+00:00",
    "previous_status": "scheduled"
  },
  "data": {
    "object": {
      "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
      "object": "campaign",
      "name": "October product update",
      "status": "draft",
      "subject": "What's new in October",
      "from_email": "news@acme.com",
      "from_name": "Acme",
      "scheduled_at": null,
      "sent_at": null,
      "created_at": "2026-09-29T15:10:44.031000+00:00",
      "previous_status": "scheduled"
    }
  }
}
```

## Fields

- `event_id` (string): Event ID (`evt_…`). A retried request carries the same ID, so use it to skip events you already handled. You can also look the event up with [Retrieve an event](/docs/api-reference/events/get/).

- `type` (string): Always `campaign.updated`.

- `object` (object): The campaign the event describes. Its fields are listed below.

- `data.object` (object): The same object again, in the shape that the [Events API](/docs/api-reference/events/get/) returns in `data`.

### Campaign object

- `id` (string): Campaign ID (`cmp_…`).

- `object` (string): Always `campaign`.

- `name` (string): Campaign name.

- `status` (string): Current status: `draft`, `scheduled`, `queued`, `sending`, `sent`, `canceled` or `archived`.

- `subject` (string): Subject line, or an empty string if it isn't set yet.

- `from_email` (string): Sender address, or an empty string.

- `from_name` (string): Sender name, or an empty string.

- `scheduled_at` (string | null): When the campaign is scheduled to send, or `null`.

- `sent_at` (string | null): When the campaign was sent, or `null`.

- `created_at` (string): When the campaign was created, in ISO 8601 with a UTC offset.

- `previous_status` (string): Status before the change. Included only when the status changed.

---
Source: https://emailit.com/docs/webhooks/events/campaign/campaign-updated/

## campaign.scheduled

> Sent when a draft campaign is scheduled to send at a future time. Includes the scheduled send time.

# campaign.scheduled

Sent when you schedule a draft campaign with [Send or schedule a campaign](/docs/api-reference/campaigns/send/) and a future `scheduled_at`, or in the dashboard. See [Test and schedule](/docs/campaigns/test-and-schedule/).

Webhook requests carry a JSON array of events like this one; see [Webhook requests](/docs/webhooks/webhook-requests/).

```json
{
  "event_id": "evt_2xLc9Rr4Tn6Wb1Qm8Ks3Vf0Hd7a",
  "type": "campaign.scheduled",
  "object": {
    "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
    "object": "campaign",
    "name": "October product update",
    "status": "scheduled",
    "subject": "What's new in October",
    "from_email": "news@acme.com",
    "from_name": "Acme",
    "scheduled_at": "2026-10-02T08:00:00.000000+00:00",
    "sent_at": null,
    "created_at": "2026-09-29T15:10:44.031000+00:00",
    "previous_status": "draft"
  },
  "data": {
    "object": {
      "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
      "object": "campaign",
      "name": "October product update",
      "status": "scheduled",
      "subject": "What's new in October",
      "from_email": "news@acme.com",
      "from_name": "Acme",
      "scheduled_at": "2026-10-02T08:00:00.000000+00:00",
      "sent_at": null,
      "created_at": "2026-09-29T15:10:44.031000+00:00",
      "previous_status": "draft"
    }
  }
}
```

## Fields

- `event_id` (string): Event ID (`evt_…`). A retried request carries the same ID, so use it to skip events you already handled. You can also look the event up with [Retrieve an event](/docs/api-reference/events/get/).

- `type` (string): Always `campaign.scheduled`.

- `object` (object): The campaign the event describes. Its fields are listed below.

- `data.object` (object): The same object again, in the shape that the [Events API](/docs/api-reference/events/get/) returns in `data`.

### Campaign object

- `id` (string): Campaign ID (`cmp_…`).

- `object` (string): Always `campaign`.

- `name` (string): Campaign name.

- `status` (string): Always `scheduled`.

- `subject` (string): Subject line, or an empty string if it isn't set yet.

- `from_email` (string): Sender address, or an empty string.

- `from_name` (string): Sender name, or an empty string.

- `scheduled_at` (string | null): When the campaign is scheduled to send, or `null`.

- `sent_at` (string | null): When the campaign was sent, or `null`.

- `created_at` (string): When the campaign was created, in ISO 8601 with a UTC offset.

- `previous_status` (string): Status before the change, usually `draft`.

---
Source: https://emailit.com/docs/webhooks/events/campaign/campaign-scheduled/

## campaign.queued

> Sent when a scheduled campaign's send time arrives and Emailit queues it for sending. campaign.sending follows.

# campaign.queued

Sent when a scheduled campaign's send time arrives and Emailit queues it. [`campaign.sending`](/docs/webhooks/events/campaign/sending/) follows when sending starts.

Webhook requests carry a JSON array of events like this one; see [Webhook requests](/docs/webhooks/webhook-requests/).

```json
{
  "event_id": "evt_2xLc9Rr4Tn6Wb1Qm8Ks3Vf0Hd7a",
  "type": "campaign.queued",
  "object": {
    "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
    "object": "campaign",
    "name": "October product update",
    "status": "queued",
    "subject": "What's new in October",
    "from_email": "news@acme.com",
    "from_name": "Acme",
    "scheduled_at": "2026-10-02T08:00:00.000000+00:00",
    "sent_at": null,
    "created_at": "2026-09-29T15:10:44.031000+00:00",
    "previous_status": "scheduled"
  },
  "data": {
    "object": {
      "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
      "object": "campaign",
      "name": "October product update",
      "status": "queued",
      "subject": "What's new in October",
      "from_email": "news@acme.com",
      "from_name": "Acme",
      "scheduled_at": "2026-10-02T08:00:00.000000+00:00",
      "sent_at": null,
      "created_at": "2026-09-29T15:10:44.031000+00:00",
      "previous_status": "scheduled"
    }
  }
}
```

## Fields

- `event_id` (string): Event ID (`evt_…`). A retried request carries the same ID, so use it to skip events you already handled. You can also look the event up with [Retrieve an event](/docs/api-reference/events/get/).

- `type` (string): Always `campaign.queued`.

- `object` (object): The campaign the event describes. Its fields are listed below.

- `data.object` (object): The same object again, in the shape that the [Events API](/docs/api-reference/events/get/) returns in `data`.

### Campaign object

- `id` (string): Campaign ID (`cmp_…`).

- `object` (string): Always `campaign`.

- `name` (string): Campaign name.

- `status` (string): Always `queued`.

- `subject` (string): Subject line, or an empty string if it isn't set yet.

- `from_email` (string): Sender address, or an empty string.

- `from_name` (string): Sender name, or an empty string.

- `scheduled_at` (string | null): When the campaign is scheduled to send, or `null`.

- `sent_at` (string | null): When the campaign was sent, or `null`.

- `created_at` (string): When the campaign was created, in ISO 8601 with a UTC offset.

- `previous_status` (string): Always `scheduled`.

---
Source: https://emailit.com/docs/webhooks/events/campaign/campaign-queued/

## campaign.sending

> Sent when Emailit starts sending a campaign, either right away or when a scheduled campaign starts.

# campaign.sending

Sent when Emailit starts sending a campaign: right away when you send it with [Send or schedule a campaign](/docs/api-reference/campaigns/send/) or from the dashboard, or when a queued scheduled campaign starts.

Webhook requests carry a JSON array of events like this one; see [Webhook requests](/docs/webhooks/webhook-requests/).

```json
{
  "event_id": "evt_2xLc9Rr4Tn6Wb1Qm8Ks3Vf0Hd7a",
  "type": "campaign.sending",
  "object": {
    "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
    "object": "campaign",
    "name": "October product update",
    "status": "sending",
    "subject": "What's new in October",
    "from_email": "news@acme.com",
    "from_name": "Acme",
    "scheduled_at": null,
    "sent_at": "2026-10-01T10:00:03.214000+00:00",
    "created_at": "2026-09-29T15:10:44.031000+00:00",
    "previous_status": "draft"
  },
  "data": {
    "object": {
      "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
      "object": "campaign",
      "name": "October product update",
      "status": "sending",
      "subject": "What's new in October",
      "from_email": "news@acme.com",
      "from_name": "Acme",
      "scheduled_at": null,
      "sent_at": "2026-10-01T10:00:03.214000+00:00",
      "created_at": "2026-09-29T15:10:44.031000+00:00",
      "previous_status": "draft"
    }
  }
}
```

## Fields

- `event_id` (string): Event ID (`evt_…`). A retried request carries the same ID, so use it to skip events you already handled. You can also look the event up with [Retrieve an event](/docs/api-reference/events/get/).

- `type` (string): Always `campaign.sending`.

- `object` (object): The campaign the event describes. Its fields are listed below.

- `data.object` (object): The same object again, in the shape that the [Events API](/docs/api-reference/events/get/) returns in `data`.

### Campaign object

- `id` (string): Campaign ID (`cmp_…`).

- `object` (string): Always `campaign`.

- `name` (string): Campaign name.

- `status` (string): Always `sending`.

- `subject` (string): Subject line, or an empty string if it isn't set yet.

- `from_email` (string): Sender address, or an empty string.

- `from_name` (string): Sender name, or an empty string.

- `scheduled_at` (string | null): When the campaign is scheduled to send, or `null`.

- `sent_at` (string | null): When the campaign was sent, or `null`.

- `created_at` (string): When the campaign was created, in ISO 8601 with a UTC offset.

- `previous_status` (string): `draft` when you sent the campaign right away, `queued` for a scheduled campaign.

---
Source: https://emailit.com/docs/webhooks/events/campaign/campaign-sending/

## campaign.sent

> Sent when Emailit has queued an email for every recipient of a campaign. Each email's own events follow.

# campaign.sent

Sent when Emailit has created and queued an email for every subscribed recipient of the campaign. Delivery, open and click events for the individual emails follow as they happen. See [Campaign reports](/docs/campaigns/reports/).

Webhook requests carry a JSON array of events like this one; see [Webhook requests](/docs/webhooks/webhook-requests/).

```json
{
  "event_id": "evt_2xLc9Rr4Tn6Wb1Qm8Ks3Vf0Hd7a",
  "type": "campaign.sent",
  "object": {
    "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
    "object": "campaign",
    "name": "October product update",
    "status": "sent",
    "subject": "What's new in October",
    "from_email": "news@acme.com",
    "from_name": "Acme",
    "scheduled_at": null,
    "sent_at": "2026-10-01T10:04:51.000000+00:00",
    "created_at": "2026-09-29T15:10:44.031000+00:00",
    "previous_status": "sending"
  },
  "data": {
    "object": {
      "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
      "object": "campaign",
      "name": "October product update",
      "status": "sent",
      "subject": "What's new in October",
      "from_email": "news@acme.com",
      "from_name": "Acme",
      "scheduled_at": null,
      "sent_at": "2026-10-01T10:04:51.000000+00:00",
      "created_at": "2026-09-29T15:10:44.031000+00:00",
      "previous_status": "sending"
    }
  }
}
```

## Fields

- `event_id` (string): Event ID (`evt_…`). A retried request carries the same ID, so use it to skip events you already handled. You can also look the event up with [Retrieve an event](/docs/api-reference/events/get/).

- `type` (string): Always `campaign.sent`.

- `object` (object): The campaign the event describes. Its fields are listed below.

- `data.object` (object): The same object again, in the shape that the [Events API](/docs/api-reference/events/get/) returns in `data`.

### Campaign object

- `id` (string): Campaign ID (`cmp_…`).

- `object` (string): Always `campaign`.

- `name` (string): Campaign name.

- `status` (string): Always `sent`.

- `subject` (string): Subject line, or an empty string if it isn't set yet.

- `from_email` (string): Sender address, or an empty string.

- `from_name` (string): Sender name, or an empty string.

- `scheduled_at` (string | null): When the campaign is scheduled to send, or `null`.

- `sent_at` (string | null): When the campaign was sent, or `null`.

- `created_at` (string): When the campaign was created, in ISO 8601 with a UTC offset.

- `previous_status` (string): Always `sending`.

---
Source: https://emailit.com/docs/webhooks/events/campaign/campaign-sent/

## campaign.canceled

> Sent when you cancel a draft campaign or a campaign that is sending. Includes the status it had before.

# campaign.canceled

Sent when you cancel a campaign with [Cancel a campaign](/docs/api-reference/campaigns/cancel/). Only `draft` and `sending` campaigns can be canceled.

Webhook requests carry a JSON array of events like this one; see [Webhook requests](/docs/webhooks/webhook-requests/).

```json
{
  "event_id": "evt_2xLc9Rr4Tn6Wb1Qm8Ks3Vf0Hd7a",
  "type": "campaign.canceled",
  "object": {
    "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
    "object": "campaign",
    "name": "October product update",
    "status": "canceled",
    "subject": "What's new in October",
    "from_email": "news@acme.com",
    "from_name": "Acme",
    "scheduled_at": null,
    "sent_at": null,
    "created_at": "2026-09-29T15:10:44.031000+00:00",
    "previous_status": "draft"
  },
  "data": {
    "object": {
      "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
      "object": "campaign",
      "name": "October product update",
      "status": "canceled",
      "subject": "What's new in October",
      "from_email": "news@acme.com",
      "from_name": "Acme",
      "scheduled_at": null,
      "sent_at": null,
      "created_at": "2026-09-29T15:10:44.031000+00:00",
      "previous_status": "draft"
    }
  }
}
```

## Fields

- `event_id` (string): Event ID (`evt_…`). A retried request carries the same ID, so use it to skip events you already handled. You can also look the event up with [Retrieve an event](/docs/api-reference/events/get/).

- `type` (string): Always `campaign.canceled`.

- `object` (object): The campaign the event describes. Its fields are listed below.

- `data.object` (object): The same object again, in the shape that the [Events API](/docs/api-reference/events/get/) returns in `data`.

### Campaign object

- `id` (string): Campaign ID (`cmp_…`).

- `object` (string): Always `campaign`.

- `name` (string): Campaign name.

- `status` (string): Always `canceled`.

- `subject` (string): Subject line, or an empty string if it isn't set yet.

- `from_email` (string): Sender address, or an empty string.

- `from_name` (string): Sender name, or an empty string.

- `scheduled_at` (string | null): When the campaign is scheduled to send, or `null`.

- `sent_at` (string | null): When the campaign was sent, or `null`.

- `created_at` (string): When the campaign was created, in ISO 8601 with a UTC offset.

- `previous_status` (string): `draft` or `sending`.

---
Source: https://emailit.com/docs/webhooks/events/campaign/campaign-canceled/

## campaign.archived

> Sent when you archive a sent campaign in the dashboard. Unarchiving it later sends campaign.updated.

# campaign.archived

Sent when you archive a sent campaign in the dashboard. Unarchiving it returns it to `draft` and sends [`campaign.updated`](/docs/webhooks/events/campaign/updated/) with `previous_status` set to `archived`.

Webhook requests carry a JSON array of events like this one; see [Webhook requests](/docs/webhooks/webhook-requests/).

```json
{
  "event_id": "evt_2xLc9Rr4Tn6Wb1Qm8Ks3Vf0Hd7a",
  "type": "campaign.archived",
  "object": {
    "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
    "object": "campaign",
    "name": "October product update",
    "status": "archived",
    "subject": "What's new in October",
    "from_email": "news@acme.com",
    "from_name": "Acme",
    "scheduled_at": null,
    "sent_at": "2026-10-01T10:04:51.000000+00:00",
    "created_at": "2026-09-29T15:10:44.031000+00:00",
    "previous_status": "sent"
  },
  "data": {
    "object": {
      "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
      "object": "campaign",
      "name": "October product update",
      "status": "archived",
      "subject": "What's new in October",
      "from_email": "news@acme.com",
      "from_name": "Acme",
      "scheduled_at": null,
      "sent_at": "2026-10-01T10:04:51.000000+00:00",
      "created_at": "2026-09-29T15:10:44.031000+00:00",
      "previous_status": "sent"
    }
  }
}
```

## Fields

- `event_id` (string): Event ID (`evt_…`). A retried request carries the same ID, so use it to skip events you already handled. You can also look the event up with [Retrieve an event](/docs/api-reference/events/get/).

- `type` (string): Always `campaign.archived`.

- `object` (object): The campaign the event describes. Its fields are listed below.

- `data.object` (object): The same object again, in the shape that the [Events API](/docs/api-reference/events/get/) returns in `data`.

### Campaign object

- `id` (string): Campaign ID (`cmp_…`).

- `object` (string): Always `campaign`.

- `name` (string): Campaign name.

- `status` (string): Always `archived`.

- `subject` (string): Subject line, or an empty string if it isn't set yet.

- `from_email` (string): Sender address, or an empty string.

- `from_name` (string): Sender name, or an empty string.

- `scheduled_at` (string | null): When the campaign is scheduled to send, or `null`.

- `sent_at` (string | null): When the campaign was sent, or `null`.

- `created_at` (string): When the campaign was created, in ISO 8601 with a UTC offset.

- `previous_status` (string): Always `sent`.

---
Source: https://emailit.com/docs/webhooks/events/campaign/campaign-archived/

## campaign.deleted

> Sent when a campaign is deleted through the API or the dashboard. The payload is the campaign before deletion.

# campaign.deleted

Sent when a campaign is deleted with [Delete a campaign](/docs/api-reference/campaigns/delete/) or in the dashboard. The payload is the campaign as it was before it was deleted.

Webhook requests carry a JSON array of events like this one; see [Webhook requests](/docs/webhooks/webhook-requests/).

```json
{
  "event_id": "evt_2xLc9Rr4Tn6Wb1Qm8Ks3Vf0Hd7a",
  "type": "campaign.deleted",
  "object": {
    "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
    "object": "campaign",
    "name": "October product update",
    "status": "draft",
    "subject": "What's new in October",
    "from_email": "news@acme.com",
    "from_name": "Acme",
    "scheduled_at": null,
    "sent_at": null,
    "created_at": "2026-09-29T15:10:44.031000+00:00"
  },
  "data": {
    "object": {
      "id": "cmp_2xLf3Gd8Wr5Mb0Tq6Yn1Kc4Hs9e",
      "object": "campaign",
      "name": "October product update",
      "status": "draft",
      "subject": "What's new in October",
      "from_email": "news@acme.com",
      "from_name": "Acme",
      "scheduled_at": null,
      "sent_at": null,
      "created_at": "2026-09-29T15:10:44.031000+00:00"
    }
  }
}
```

## Fields

- `event_id` (string): Event ID (`evt_…`). A retried request carries the same ID, so use it to skip events you already handled. You can also look the event up with [Retrieve an event](/docs/api-reference/events/get/).

- `type` (string): Always `campaign.deleted`.

- `object` (object): The campaign the event describes. Its fields are listed below.

- `data.object` (object): The same object again, in the shape that the [Events API](/docs/api-reference/events/get/) returns in `data`.

### Campaign object

- `id` (string): Campaign ID (`cmp_…`).

- `object` (string): Always `campaign`.

- `name` (string): Campaign name.

- `status` (string): Status the campaign had when it was deleted.

- `subject` (string): Subject line, or an empty string if it isn't set yet.

- `from_email` (string): Sender address, or an empty string.

- `from_name` (string): Sender name, or an empty string.

- `scheduled_at` (string | null): When the campaign is scheduled to send, or `null`.

- `sent_at` (string | null): When the campaign was sent, or `null`.

- `created_at` (string): When the campaign was created, in ISO 8601 with a UTC offset.

---
Source: https://emailit.com/docs/webhooks/events/campaign/campaign-deleted/
