Skip to content
Docs

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

campaign.created

Sent when a campaign is created with Create a campaign 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.

Fields

event_idstring

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.

typestring

Always campaign.created.

objectobject

The campaign the event describes. Its fields are listed below.

data.objectobject

The same object again, in the shape that the Events API returns in data.

Campaign object

idstring

Campaign ID (cmp_…).

objectstring

Always campaign.

namestring

Campaign name.

statusstring

Always draft.

subjectstring

Subject line, or an empty string if it isn’t set yet.

from_emailstring

Sender address, or an empty string.

from_namestring

Sender name, or an empty string.

scheduled_atstring | null

When the campaign is scheduled to send, or null.

sent_atstring | null

When the campaign was sent, or null.

created_atstring

When the campaign was created, in ISO 8601 with a UTC offset.

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"
    }
  }
}

campaign.updated

Sent when a campaign’s content or settings change, for example with Update a campaign, 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.

Fields

event_idstring

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.

typestring

Always campaign.updated.

objectobject

The campaign the event describes. Its fields are listed below.

data.objectobject

The same object again, in the shape that the Events API returns in data.

Campaign object

idstring

Campaign ID (cmp_…).

objectstring

Always campaign.

namestring

Campaign name.

statusstring

Current status: draft, scheduled, queued, sending, sent, canceled or archived.

subjectstring

Subject line, or an empty string if it isn’t set yet.

from_emailstring

Sender address, or an empty string.

from_namestring

Sender name, or an empty string.

scheduled_atstring | null

When the campaign is scheduled to send, or null.

sent_atstring | null

When the campaign was sent, or null.

created_atstring

When the campaign was created, in ISO 8601 with a UTC offset.

previous_statusstring

Status before the change. Included only when the status changed.

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"
    }
  }
}

campaign.scheduled

Sent when you schedule a draft campaign with Send or schedule a campaign and a future scheduled_at, or in the dashboard. See Test and schedule.

Webhook requests carry a JSON array of events like this one; see Webhook requests.

Fields

event_idstring

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.

typestring

Always campaign.scheduled.

objectobject

The campaign the event describes. Its fields are listed below.

data.objectobject

The same object again, in the shape that the Events API returns in data.

Campaign object

idstring

Campaign ID (cmp_…).

objectstring

Always campaign.

namestring

Campaign name.

statusstring

Always scheduled.

subjectstring

Subject line, or an empty string if it isn’t set yet.

from_emailstring

Sender address, or an empty string.

from_namestring

Sender name, or an empty string.

scheduled_atstring | null

When the campaign is scheduled to send, or null.

sent_atstring | null

When the campaign was sent, or null.

created_atstring

When the campaign was created, in ISO 8601 with a UTC offset.

previous_statusstring

Status before the change, usually draft.

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"
    }
  }
}

campaign.queued

Sent when a scheduled campaign’s send time arrives and Emailit queues it. campaign.sending follows when sending starts.

Webhook requests carry a JSON array of events like this one; see Webhook requests.

Fields

event_idstring

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.

typestring

Always campaign.queued.

objectobject

The campaign the event describes. Its fields are listed below.

data.objectobject

The same object again, in the shape that the Events API returns in data.

Campaign object

idstring

Campaign ID (cmp_…).

objectstring

Always campaign.

namestring

Campaign name.

statusstring

Always queued.

subjectstring

Subject line, or an empty string if it isn’t set yet.

from_emailstring

Sender address, or an empty string.

from_namestring

Sender name, or an empty string.

scheduled_atstring | null

When the campaign is scheduled to send, or null.

sent_atstring | null

When the campaign was sent, or null.

created_atstring

When the campaign was created, in ISO 8601 with a UTC offset.

previous_statusstring

Always scheduled.

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"
    }
  }
}

campaign.sending

Sent when Emailit starts sending a campaign: right away when you send it with Send or schedule a campaign 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.

Fields

event_idstring

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.

typestring

Always campaign.sending.

objectobject

The campaign the event describes. Its fields are listed below.

data.objectobject

The same object again, in the shape that the Events API returns in data.

Campaign object

idstring

Campaign ID (cmp_…).

objectstring

Always campaign.

namestring

Campaign name.

statusstring

Always sending.

subjectstring

Subject line, or an empty string if it isn’t set yet.

from_emailstring

Sender address, or an empty string.

from_namestring

Sender name, or an empty string.

scheduled_atstring | null

When the campaign is scheduled to send, or null.

sent_atstring | null

When the campaign was sent, or null.

created_atstring

When the campaign was created, in ISO 8601 with a UTC offset.

previous_statusstring

draft when you sent the campaign right away, queued for a scheduled campaign.

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"
    }
  }
}

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.

Webhook requests carry a JSON array of events like this one; see Webhook requests.

Fields

event_idstring

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.

typestring

Always campaign.sent.

objectobject

The campaign the event describes. Its fields are listed below.

data.objectobject

The same object again, in the shape that the Events API returns in data.

Campaign object

idstring

Campaign ID (cmp_…).

objectstring

Always campaign.

namestring

Campaign name.

statusstring

Always sent.

subjectstring

Subject line, or an empty string if it isn’t set yet.

from_emailstring

Sender address, or an empty string.

from_namestring

Sender name, or an empty string.

scheduled_atstring | null

When the campaign is scheduled to send, or null.

sent_atstring | null

When the campaign was sent, or null.

created_atstring

When the campaign was created, in ISO 8601 with a UTC offset.

previous_statusstring

Always sending.

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"
    }
  }
}

campaign.canceled

Sent when you cancel a campaign with Cancel a campaign. Only draft and sending campaigns can be canceled.

Webhook requests carry a JSON array of events like this one; see Webhook requests.

Fields

event_idstring

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.

typestring

Always campaign.canceled.

objectobject

The campaign the event describes. Its fields are listed below.

data.objectobject

The same object again, in the shape that the Events API returns in data.

Campaign object

idstring

Campaign ID (cmp_…).

objectstring

Always campaign.

namestring

Campaign name.

statusstring

Always canceled.

subjectstring

Subject line, or an empty string if it isn’t set yet.

from_emailstring

Sender address, or an empty string.

from_namestring

Sender name, or an empty string.

scheduled_atstring | null

When the campaign is scheduled to send, or null.

sent_atstring | null

When the campaign was sent, or null.

created_atstring

When the campaign was created, in ISO 8601 with a UTC offset.

previous_statusstring

draft or sending.

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"
    }
  }
}

campaign.archived

Sent when you archive a sent campaign in the dashboard. Unarchiving it returns it to draft and sends campaign.updated with previous_status set to archived.

Webhook requests carry a JSON array of events like this one; see Webhook requests.

Fields

event_idstring

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.

typestring

Always campaign.archived.

objectobject

The campaign the event describes. Its fields are listed below.

data.objectobject

The same object again, in the shape that the Events API returns in data.

Campaign object

idstring

Campaign ID (cmp_…).

objectstring

Always campaign.

namestring

Campaign name.

statusstring

Always archived.

subjectstring

Subject line, or an empty string if it isn’t set yet.

from_emailstring

Sender address, or an empty string.

from_namestring

Sender name, or an empty string.

scheduled_atstring | null

When the campaign is scheduled to send, or null.

sent_atstring | null

When the campaign was sent, or null.

created_atstring

When the campaign was created, in ISO 8601 with a UTC offset.

previous_statusstring

Always sent.

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"
    }
  }
}

campaign.deleted

Sent when a campaign is deleted with Delete a campaign 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.

Fields

event_idstring

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.

typestring

Always campaign.deleted.

objectobject

The campaign the event describes. Its fields are listed below.

data.objectobject

The same object again, in the shape that the Events API returns in data.

Campaign object

idstring

Campaign ID (cmp_…).

objectstring

Always campaign.

namestring

Campaign name.

statusstring

Status the campaign had when it was deleted.

subjectstring

Subject line, or an empty string if it isn’t set yet.

from_emailstring

Sender address, or an empty string.

from_namestring

Sender name, or an empty string.

scheduled_atstring | null

When the campaign is scheduled to send, or null.

sent_atstring | null

When the campaign was sent, or null.

created_atstring

When the campaign was created, in ISO 8601 with a UTC offset.

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"
    }
  }
}

Was this page helpful?

Thanks for the feedback.

Thanks, we read every message.