status of a Campaign changes. The payload includes both the previous and new status, so consumers can react to specific transitions (e.g., notify on finished, archive on inactive).
When new_status is finished, the payload also includes the campaign’s analytics snapshot, so you don’t need an extra API call to summarize a finished campaign.
- Trigger: Any campaign status transition (
pendingtoready,activetoinactive,activetocooldown,cooldowntofinished, etc.). - Filtering: When configuring the webhook in Altur, you can restrict deliveries to a list of target statuses via the
filters.statusarray.
Request
- Method:
POST - Content-Type:
application/json - Endpoint: The URL you configure in your webhook integration.
- Authentication:
X-Altur-Signatureheader for HMAC verification. See Webhooks Overview.
Payload Example
Envelope Fields
| Field | Type | Description |
|---|---|---|
event_id | string | Unique identifier for this delivery. Use for idempotent processing. |
event_type | string | Always campaign.status_changed. |
occurred_at | string | ISO 8601 timestamp in the project’s timezone. |
api_version | string | Webhook payload schema version (currently 1.0). |
project_id | string | Public identifier of the project that owns the campaign. |
data | object | Event payload (see below). |
data.campaign Object
| Field | Type | Description |
|---|---|---|
id | int | Campaign identifier. |
name | string | Campaign name. |
status | string | The new status (after the transition). |
previous_status | string | The status the campaign was in before the transition. |
data.analytics Object (only when status = finished)
For phone-call campaigns, the snapshot contains call and contact counts and rates. For WhatsApp campaigns it contains message lifecycle counts and rates. See the Retrieve Campaign reference for the full shape. The analytics block here matches the analytics field on the campaign detail response.
Response
Return200 OK to confirm receipt. Failures are retried per the delivery retry policy.
Status Filtering
When configuring the webhook integration, passfilters.status as an array of target statuses (e.g., ["finished"]). Only transitions whose new_status is in that list will be delivered. Omitting the filter delivers every status transition.
Receiver Examples
For signature verification, seeis_valid_signature in the Webhooks Overview.