campaign.updated
A campaign was scheduled, started sending, paused, resumed, completed or cancelled. Final counts arrive with completed and cancelled; read results with Get campaign.
Verify every callback
Check X-PaalChat-Signature on the raw body, reject timestamps older than 5 minutes, and de-duplicate on X-PaalChat-Delivery. Answer 2xx within 10 seconds. See Webhooks and callbacks.
Headers
X-PaalChat-Event
string
X-PaalChat-Delivery
string
Unique per event (equals body id). De-duplicate on it.
Format uuid.
X-PaalChat-Signature
string
t=<unix seconds>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Reject if invalid or older than 300 seconds.
Pattern ^t=\d+,v1=[a-f0-9]{64}$.
Body
id
string
Equals X-PaalChat-Delivery.
Format uuid.
sandbox
boolean
true for sandbox businesses (test keys) - nothing reached WhatsApp.
event
any
Always campaign.updated.
occurred_at
string
Format date-time.
business
object
external_id
string
business.external_id
data
object
campaign_id
integer
data.campaign_id
parent_id
integer | null
data.parent_id
name
string
data.name
status
string
data.status
One of: scheduled, sending, paused, completed, cancelled.
counts
object | null
data.counts
started_at
string | null
data.started_at
Format date-time.
completed_at
string | null
data.completed_at
Format date-time.