Skip to content

Event Reference

Request headers

Every Agora webhook POST includes:

Header Example Description
Content-Type application/json Always JSON
X-Agora-Signature-256 sha256=abc123… HMAC-SHA256 of the raw body, signed with your endpoint secret
X-Agora-Event lead.created The event type that triggered this delivery
X-Agora-Delivery 42-1-1718900000 Unique delivery identifier: {endpoint_id}-{attempt}-{unix_ts}

Event types

Event Trigger
lead.created A single new lead is added to the campaign
leads.bulk_created Multiple leads are created in one API call or CSV upload — fires once with the full list
lead.status_changed A lead's pipeline status changes
lead.converted A lead is marked as converted
call.started An outbound call is answered (status in-progress)
call.completed An outbound call ends
form.submitted A form submission is received
ping Manual test delivery sent from the dashboard or API

Payload shapes

lead.created

Fires when a single lead is added individually.

{
  "event": "lead.created",
  "campaign_id": 7,
  "lead_id": 1234,
  "contact_id": 5678,
  "timestamp": "2026-06-12T20:00:00Z"
}

leads.bulk_created

Fires once when multiple leads are created in a single API call or CSV upload. Never fires alongside individual lead.created events for the same batch.

{
  "event": "leads.bulk_created",
  "campaign_id": 7,
  "count": 10,
  "leads": [
    { "lead_id": 1234, "contact_id": 5678 },
    { "lead_id": 1235, "contact_id": 5679 }
  ],
  "timestamp": "2026-06-12T20:00:00Z"
}

All other events

{
  "event": "lead.status_changed",
  "campaign_id": 7,
  "timestamp": "2026-06-12T20:00:00Z",
  "...event-specific fields...": "..."
}

Delivery behaviour

Property Value
Method POST
Timeout 10 seconds
Automatic retry Once, on non-2xx or timeout — live events only
Manual redeliver One attempt, no automatic retry
Test ping One attempt, no automatic retry
Max response body stored 4 096 bytes
Retry delivery ID Stored in redelivery_of_id on the second attempt of a live event

Why retry once and not more

Webhook consumers are expected to return 200 OK quickly and handle processing asynchronously. A transient network hiccup, a brief cold-start delay, or a momentary 5xx from your server should be recoverable from a single retry. Multiple automatic retries introduce exponential backoff complexity, delivery ordering problems, and risk flooding your server during an outage. If you need guaranteed delivery after repeated failures, use the Redeliver button or API to manually replay specific deliveries once your server is healthy.

Delivery ordering

Agora does not guarantee strict delivery ordering. Two events that fire within milliseconds of each other may arrive in either order at your server. Design your handler to be order-independent: apply status updates based on timestamps in the payload rather than assuming the most recently received event is the most recent state change.