Webhook Settings
Send OutCallerAI workspace events to your CRM, automation service, or backend.
Overview
Workspace webhooks send real-time JSON events from OutCallerAI to an HTTPS endpoint you control. Use them to sync leads, calls, tasks, and agent changes into your CRM or internal systems.
Capabilities
- Workspace events: Receive lead, call, task, and agent lifecycle events.
- Custom authentication: Add your own JSON headers to every delivery.
- Consistent envelope: Route events by event, resource, action, workspace, and timestamp.
- Sanitized data: Receive operational fields without provider credentials or internal secrets.
Prerequisites
- A publicly reachable HTTPS endpoint that accepts JSON
POSTrequests. - A handler that returns a
2xxresponse within 10 seconds. - An idempotency strategy for retries or duplicate business events.
- An authentication secret or routing header when the endpoint is not otherwise protected.
Setup
- Open Integrations.
- Click Webhook Settings.
- Enter your Webhook URL.
- Optionally enter Webhook Headers (JSON) for auth or routing.
- Save changes.
Headers must be a JSON object:
{
"Authorization": "Bearer your-secret-token",
"X-CRM-Source": "outcaller"
}OutCallerAI sends these headers on every webhook:
| Header | Value |
|---|---|
Content-Type | application/json |
X-Outcaller-Event | Event name, for example lead.created |
X-Outcaller-Resource | Resource type: lead, call, task, or agent |
X-Outcaller-Action | Action: created, updated, or deleted |
X-Outcaller-Workspace-Id | Workspace id |
Your configured custom headers are merged into the request.
How it works
Events
Common events include:
| Event | Resource | When it sends |
|---|---|---|
lead.created | lead | A lead is created or imported. |
lead.updated | lead | Lead data changes. |
lead.deleted | lead | A lead is deleted. |
lead.bulk_deleted | lead | Leads are deleted in bulk. |
call.created | call | A call record is created. |
call.<status> | call | Call status changes, for example call.initiated, call.completed, or call.failed. |
task.created | task | A follow-up task is created. |
task.updated | task | A task changes. |
task.<status> | task | Task status changes. |
agent.created | agent | An agent is created. |
Payload
Every webhook request is a POST with this envelope:
{
"event": "lead.created",
"resource": "lead",
"action": "created",
"workspaceId": "cmpxz43bl00032c6udndznzdg",
"timestamp": "2026-06-04T05:49:10.221000+00:00",
"data": {
"id": "lead_123",
"workspaceId": "cmpxz43bl00032c6udndznzdg",
"campaignId": "campaign_123",
"name": "Priya Sharma",
"phone": "+919876543210",
"email": "priya@example.com",
"source": "google_sheet_webhook",
"status": "new"
},
"metadata": {
"source": "google_drive_sync"
}
}Update events may include previousData.
Data included
Webhook payloads are sanitized before delivery. OutCallerAI includes useful operational fields such as ids, workspace/campaign links, lead contact fields, call status, call summary, transcription, recording URL, task status, and timestamps. Internal secrets and provider-only fields are not sent.
Delivery behavior
- OutCallerAI sends each webhook as an HTTPS
POST. - The request timeout is 10 seconds.
- Your endpoint should return any
2xxresponse. - Failed deliveries are logged by OutCallerAI.
Verify the integration
Save the endpoint, trigger a controlled event such as creating a test lead, and confirm the request headers, envelope, workspace ID, and event data in your receiver logs. Return 2xx only after the event is accepted.
Troubleshooting
- Use HTTPS in production.
- Keep responses fast; offload slow work to a queue.
- Make handlers idempotent by storing processed event ids or deduplicating by
event,resource,data.id, andtimestamp. - Validate your own auth header if you configure one in Webhook Headers (JSON).
- If no request arrives, confirm the saved URL is publicly reachable and trigger a new supported event.
- If delivery fails, inspect receiver status codes and ensure processing completes within 10 seconds.
- If JSON headers cannot be saved, confirm the value is a valid JSON object.
Disconnect
Open Webhook Settings, remove the webhook URL and custom headers, and save. OutCallerAI stops new workspace webhook deliveries; events already accepted by your endpoint are unaffected.
How is this guide?
