Subscribe to one or more of these event types when registering an endpoint. Pass an empty events array to subscribe to all.
Common envelope
Every delivery shares the same outer shape:
And these headers:
Events
campaign.started
Fires when a campaign transitions from draft to active.
campaign.paused
Fires when a campaign is paused.
campaign.completed
Fires when every contact’s conversation reaches completed. Synthesis usually starts immediately after.
interview.completed
Fires once a single conversation has finished and been processed. The transcript is then available via the export endpoints. On campaigns that hide participant names (or when the participant chose to), contact_id, contact_name and contact_email are null. Delivery is at-least-once; deduplicate on conversation_id.
synthesis.completed
Fires each time a campaign report version is ready: the first report after the first completed interviews, refreshes as more interviews complete, the final report when the campaign completes, and manual regenerations. trigger_reason is one of threshold_reached, incremental_update, campaign_completed (the final report over every completed interview) or manual_regenerate. Delivery is at-least-once; deduplicate on report_version_id.
This is usually the most useful event — most consumers register only for synthesis.completed and pull the report via GET /v1/interviews/{id}/export/report.
webhook.ping
The synthetic test event, sent when you trigger a test delivery (ontora webhooks test or POST /v1/webhook-endpoints/{id}/test). Use it to verify your receiver and signature handling.
interview.scheduled is accepted as a subscription filter for backwards compatibility but is not currently emitted.