Emalc

Search Documentation

Quickly jump to any guide, document, or section...

Webhook Event Types & Schemas

Emalc supports 18 granular webhook event types divided into 4 core functional categories.


Standard Event Envelope Schema#

All webhook notifications deliver a JSON payload containing an event identifier, an ISO 8601 UTC created_at timestamp, and an event-specific data object:

json
{
  "event": "email.delivered",
  "created_at": "2026-09-28T14:59:03.000Z",
  "data": {
    "recipient": "customer@example.com",
    "subject": "Your Order Confirmation (#1042)",
    "messageId": "0100018df5608034-7546e5fa-4965-4f46-99c0-9943630f55cf-000000",
    "emailId": "7132fa69-9064-44d4-9d41-4560ea605dfa",
    "tags": {
      "category": "receipt",
      "order_id": "1042"
    }
  }
}

1. Email Lifecycle & Telemetry Events#

Event TypeTrigger DescriptionPayload Attributes
email.sentEmail accepted and queued for transmission via Amazon SES gateways.recipient, subject, emailId, messageId, tags
email.deliveredRecipient mail server acknowledged successful SMTP delivery.recipient, subject, emailId, messageId, tags
email.soft_bounceTemporary delivery issue (e.g. recipient mailbox full, temporary server downtime).recipient, subject, emailId, reason, smtpCode
email.bouncedHard bounce or permanent non-delivery failure (SMTP 550 unknown user).recipient, subject, emailId, reason, bounceType
email.complainedRecipient marked email as spam / abuse complaint.recipient, subject, emailId, complaintFeedbackType
email.openedRecipient opened email and rendered 1x1 tracking pixel.recipient, subject, emailId, userAgent, ipAddress
email.clickedRecipient clicked a rewritten link inside the email body.recipient, subject, emailId, targetUrl, ipAddress
email.unsubscribedRecipient clicked the standard one-click unsubscribe link.recipient, emailId, campaignId
email.suppressedEmail dispatch rejected because recipient is on organization suppression list.recipient, subject, reason
email.failedInternal delivery worker error or SES transmission failure.recipient, subject, reason

Sample Payload: Hard Bounce (email.bounced)#

json
{
  "event": "email.bounced",
  "created_at": "2026-09-28T15:02:11.000Z",
  "data": {
    "recipient": "bounce@simulator.amazonses.com",
    "subject": "Weekly Newsletter",
    "emailId": "8294ba12-1094-4b11-a832-1109aef8821a",
    "reason": "Hard bounce: 550 5.1.1 Unknown User",
    "bounceType": "Permanent"
  }
}

2. Audience & Contact Events#

Event TypeTrigger DescriptionPayload Attributes
contact.createdA new contact record was added to your audience via UI or API.contactId, email, firstName, lastName, status
contact.updatedContact attributes, metadata, or group assignments modified.contactId, email, updatedFields
contact.deletedContact record removed from organization audience.contactId, email

Sample Payload: Contact Created (contact.created)#

json
{
  "event": "contact.created",
  "created_at": "2026-09-28T15:10:00.000Z",
  "data": {
    "contactId": "cnt_99214a12",
    "email": "sarah.connor@example.com",
    "firstName": "Sarah",
    "lastName": "Connor",
    "status": "subscribed"
  }
}

3. Domain Authentication Events#

Event TypeTrigger DescriptionPayload Attributes
domain.createdNew custom sender domain registered in dashboard.domainId, domainName, status
domain.updatedDomain verification status changed (e.g., pending -> verified).domainId, domainName, status, dkimStatus, spfStatus
domain.deletedCustom sender domain removed from organization.domainId, domainName

Sample Payload: Domain Verified (domain.updated)#

json
{
  "event": "domain.updated",
  "created_at": "2026-09-28T15:15:30.000Z",
  "data": {
    "domainId": "dom_88123fa",
    "domainName": "acme.com",
    "status": "verified",
    "dkimStatus": "success",
    "spfStatus": "success"
  }
}

4. Suppression List Events#

Event TypeTrigger DescriptionPayload Attributes
suppression.addedEmail address added to organization suppression list due to bounce, complaint, or manual block.email, reason, source
suppression.removedEmail address removed from suppression list by workspace admin.email, removedBy

Sample Payload: Suppression Added (suppression.added)#

json
{
  "event": "suppression.added",
  "created_at": "2026-09-28T15:20:00.000Z",
  "data": {
    "email": "bounced.user@example.com",
    "reason": "Hard bounce",
    "source": "ses_bounce_webhook"
  }
}