Skip to main content
Set notify_url on a campaign to receive state changes and contact outcomes as JSON POST requests.

Verify signatures

Every request includes:
Vobiz computes the value as HMAC-SHA256(raw_body_bytes, account_auth_token). Verify the signature against the unmodified request body before parsing JSON. Compare digests with a constant-time function.
Do not re-serialize the parsed JSON before verification. Whitespace or key-order changes produce a different digest.
Failed deliveries are retried up to three times, with attempts at approximately 0, 5, and 30 seconds. Return a 2xx response after durable processing. Make handlers idempotent because retries can deliver the same event more than once.

Campaign events

Every campaign event includes event, campaign_id, account_id, and timestamp.
campaign.started

Pause and failure reasons

Pause reasons include manual_pause, window_closed, caller_pool_exhausted, caller_pool_daily_limit_reached, account_inactive, stalled, and consecutive_failures. Current dial-time failure reasons include consecutive_failures and balance_insufficient.

Contact events

Contact outcome payloads can include contact_id, call_uuid, to_number, from_number, hangup_cause, and duration.
contact.answered
contact.retry_scheduled
If retries remain, a contact.no_answer event can be followed by contact.retry_scheduled. Do not treat the first event as the final contact outcome.

Hangup mapping