EVENTcampaign.status_change
Campaign message status changed
Event name: campaign.status_change
A recipient's message engagement changed (delivered / opened / clicked / bounced / dropped / unsubscribed). Scope: location-scoped. Delivered as a signed HTTP POST to your Webhooks URL.
Every delivery is signed. Verify
X-Synup-Signature before processing — see Synup Webhooks.Payload
| Name | Type | Required | Description |
|---|---|---|---|
event | string | optional | Dotted event name. |
timestamp | string | optional | ISO-8601 UTC time the event was emitted. |
account_id | integer | optional | Synup account the event belongs to. |
location_id | string | optional | Numeric string for location-scoped events; null for brand-scoped events. |
data | object | optional | |
data.campaign_id | string | optional | Campaign UUID. |
data.customer_id | string | optional | Recipient (LocationCustomer) UUID. |
data.message_id | string | optional | Message UUID. |
data.status | string | optional | delivered / opened / clicked / bounced / dropped / unsubscribed. |
data.channel | string | optional | "email" or "sms" (omitted if unmapped). |
data.occurred_at | string | optional | When it occurred (not present on unsubscribed). |
data.url | string | optional | Clicked URL (present only on click events). |
Example delivery
{
"event": "campaign.status_change",
"timestamp": "2026-07-15T09:20:11Z",
"account_id": 11073,
"location_id": "279381",
"data": {
"campaign_id": "8f3a1c72-..",
"customer_id": "a9..",
"message_id": "d3..",
"status": "clicked",
"channel": "email",
"occurred_at": "2026-07-15T09:20:05Z",
"url": "https://funnel.example.com/r/abc"
}
}