Webhooks let your systems subscribe to events in Run a Call. When something happens — a new customer, a paid invoice, a completed job — Run a Call POSTs a JSON payload to your endpoint.
Open the Webhooks page
Go to Settings → Integrations → Webhooks, then click + New webhook.
Fill in the subscription
| Field | What it controls |
|---|---|
| URL | Where to POST events |
| Events | Which events to subscribe to (e.g. customer.created, job.completed, invoice.paid) |
| Label | What this webhook is for — "Pipedrive sync", "Internal CRM" |
Click Create.
Copy the signing secret
Run a Call generates a signing secret when you create the webhook. The secret is shown once at creation; copy it now. You'll use it to verify each delivery — see Verifying webhook signatures.
Available events
Major events emitted today:
| Event | When it fires |
|---|---|
customer.created | A new customer record is created |
customer.updated | A customer record is edited |
job.created | A job is created |
job.scheduled | A job is scheduled (date/time set) |
job.completed | A job is marked Completed |
job.cancelled | A job is cancelled |
invoice.sent | An invoice is sent to the customer |
invoice.paid | An invoice is fully paid |
estimate.approved | A customer approves an estimate |
estimate.declined | A customer declines an estimate |
voice_call.completed | An inbound or outbound voice call ends |
Subscribe to one event per subscription, or comma-separate multiple events into one subscription.
Payload shape
Each event POST has:
{
"event": "invoice.paid",
"delivery_id": "wd_...",
"created_at": "2026-01-01T12:34:56Z",
"organization_id": "...",
"data": { ... }
}
The data object holds the entity at the moment of the event. See the developer docs at docs.runacall.com for entity shapes.
Retries and auto-pause
| Outcome | What happens |
|---|---|
| HTTP 2xx | Successful delivery |
| Non-2xx or timeout | Retry on an exponential schedule |
| N consecutive failures (configurable per webhook) | Subscription is auto-paused to prevent runaway retries against a dead endpoint |
When auto-paused, you'll see auto_paused_at in the subscription. Fix the endpoint, then unpause from the webhook detail page.
Tracking deliveries
Each subscription has a delivery log:
| Field | What it shows |
|---|---|
last_delivery_at | Timestamp of the last delivery attempt |
last_delivery_status | 2xx / failed |
consecutive_failures | Counter that triggers auto-pause |
Security
[!IMPORTANT]
- Always verify the signature on incoming webhooks. Without verification, anyone with your URL can spoof events.
- Use HTTPS for the URL. HTTP webhooks are accepted today but will be deprecated.