Back to Developer Docs

Webhook Events

Sendinel sends signed POST requests to your configured endpoints for email, contact, campaign, and sequence events. Subscribe in Settings, Webhooks. Verify `X-Sendinel-Signature` with your endpoint secret.

email.sent

An email is handed to the sending provider.

Payload
{
  "event": "email.sent",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "email": "user@example.com",
    "campaign_id": "uuid",
    "site_id": "uuid"
  }
}

email.delivered

The provider reports recipient server acceptance.

Payload
{
  "event": "email.delivered",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "email": "user@example.com",
    "provider_message_id": "msg_123",
    "site_id": "uuid"
  }
}

email.opened

The tracking pixel is requested.

Payload
{
  "event": "email.opened",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "email": "user@example.com",
    "provider_message_id": "msg_123",
    "site_id": "uuid"
  }
}

email.clicked

A tracked email link is clicked.

Payload
{
  "event": "email.clicked",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "email": "user@example.com",
    "url": "https://example.com",
    "provider_message_id": "msg_123",
    "site_id": "uuid"
  }
}

email.bounced

The provider reports a hard or soft bounce.

Payload
{
  "event": "email.bounced",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "email": "user@example.com",
    "bounce_type": "hard",
    "provider_message_id": "msg_123",
    "site_id": "uuid"
  }
}

email.complained

The provider reports a spam complaint.

Payload
{
  "event": "email.complained",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "email": "user@example.com",
    "provider_message_id": "msg_123",
    "site_id": "uuid"
  }
}

contact.created

A subscriber is created.

Payload
{
  "event": "contact.created",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "contact_id": "uuid",
    "email": "user@example.com",
    "site_id": "uuid"
  }
}

contact.updated

Subscriber fields or tags are changed.

Payload
{
  "event": "contact.updated",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "contact_id": "uuid",
    "fields": [
      "tags"
    ],
    "tags": [
      "trial-ended"
    ]
  }
}

campaign.activated

A campaign is launched or resumed.

Payload
{
  "event": "campaign.activated",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "campaign_id": "uuid",
    "from_status": "draft"
  }
}

campaign.completed

A campaign completes its send lifecycle.

Payload
{
  "event": "campaign.completed",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "campaign_id": "uuid"
  }
}

sequence.contact_completed

A subscriber reaches the end of a sequence.

Payload
{
  "event": "sequence.contact_completed",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "contact_id": "uuid",
    "campaign_id": "uuid",
    "enrollment_id": "uuid"
  }
}

social.post.created

A social post is created.

Payload
{
  "event": "social.post.created",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "social_post_id": "uuid",
    "title": "Launch post",
    "platforms": [
      "linkedin",
      "instagram"
    ]
  }
}

social.post.updated

A social post is edited.

Payload
{
  "event": "social.post.updated",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "social_post_id": "uuid",
    "fields": [
      "content",
      "scheduled_at"
    ]
  }
}

social.post.scheduled

A social post is scheduled or queued.

Payload
{
  "event": "social.post.scheduled",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "social_post_id": "uuid",
    "scheduled_at": "2026-06-02T18:00:00.000Z"
  }
}

social.post.published

A social post is marked published.

Payload
{
  "event": "social.post.published",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "social_post_id": "uuid",
    "platform_post_urls": {
      "linkedin": "https://example.com/post"
    }
  }
}

social.post.failed

A social post publish attempt fails.

Payload
{
  "event": "social.post.failed",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "social_post_id": "uuid",
    "publish_error": "Provider rejected media URL"
  }
}

social.post.archived

A social post is archived.

Payload
{
  "event": "social.post.archived",
  "timestamp": "2026-05-04T12:00:00.000Z",
  "data": {
    "social_post_id": "uuid"
  }
}