Skip to content
PaalChat Docs

campaign.updated

.md
Event POST <your callback URL>

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.