Skip to main content

Event Types

These are the events a webhook subscription can receive. Omit events (or pass an empty array) when creating a subscription to receive all of them; otherwise pass a whitelist. Unknown event names are accepted (future-compatible); they just won't deliver until the emitter ships.

EventFires when
call.startedAn inbound or outbound call began
call.completedA call ended, with outcome/transcript/booking
call.missedA call ended without AI answer
sms.receivedInbound SMS to a tenant-owned number
sms.sentOutbound SMS successfully dispatched (campaigns, /v1/sms/send, internal flows)
receptionist.readyVAPI assistant finished provisioning
receptionist.errorProvisioning failed
lead.createdNew lead inserted via API / CSV / MCP
lead.updatedWritable fields on a lead changed
campaign.completedSMS campaign finished processing its list
webhook.testSynthetic event from POST /api/v1/webhooks/:id/test
usage.thresholdPlan usage crossed an alert threshold (80% or 100% of included minutes)

call.started

Fired when a call begins (inbound or outbound).

{
"event": "call.started",
"receptionist_id": "uuid",
"data": {
"call_id": "uuid",
"direction": "inbound",
"from": "+12125551234",
"to": "+16145551234",
"started_at": "2026-03-11T14:30:00Z"
},
"timestamp": "2026-03-11T14:30:00.123Z"
}

call.completed

Fired when a call ends. Includes outcome, customer data, and booking info (if applicable).

{
"event": "call.completed",
"receptionist_id": "uuid",
"data": {
"call_id": "uuid",
"direction": "inbound",
"from": "+12125551234",
"to": "+16145551234",
"duration_seconds": 180,
"outcome": "booked",
"customer_name": "John Smith",
"customer_phone": "+12125551234",
"transcript_summary": "Customer scheduled AC repair...",
"booking": {
"confirmation": "BK-20260315-ABC",
"date": "2026-03-15",
"time": "10:00",
"service_type": "AC Repair",
"address": "123 Main St, Columbus, OH"
},
"started_at": "2026-03-11T14:30:00Z",
"ended_at": "2026-03-11T14:33:00Z"
},
"timestamp": "2026-03-11T14:33:01.456Z"
}

call.missed

Fired when a call is missed or abandoned.

{
"event": "call.missed",
"receptionist_id": "uuid",
"data": {
"call_id": "uuid",
"from": "+12125551234",
"to": "+16145551234",
"missed_at": "2026-03-11T14:30:00Z",
"recovery_scheduled": false
},
"timestamp": "2026-03-11T14:30:05.789Z"
}

sms.received

Fired when the receptionist receives an inbound SMS.

{
"event": "sms.received",
"receptionist_id": "uuid",
"data": {
"sms_id": "msg_abc123",
"from": "+12125551234",
"to": "+16145551234",
"message": "Yes, 10 AM works for me!",
"received_at": "2026-03-11T15:05:00Z",
"is_opt_out": false
},
"timestamp": "2026-03-11T15:05:00.321Z"
}

sms.sent

Fired when an outbound SMS is successfully dispatched. This covers campaign sends, POST /api/v1/sms/send, and internal flows.

receptionist.ready

Fired when a new receptionist finishes provisioning and is ready to take calls.

{
"event": "receptionist.ready",
"receptionist_id": "uuid",
"data": {
"phone_number": "+16145559876",
"assistant_id": "asst_...",
"plan": "growth",
"provisioned_at": "2026-03-11T12:00:30Z"
},
"timestamp": "2026-03-11T12:00:30.654Z"
}

receptionist.error

Fired if provisioning or a critical operation fails.

lead.created

Fired when a new lead is inserted via API, CSV import, or MCP.

lead.updated

Fired when writable fields on a lead change.

campaign.completed

Fired when an SMS campaign finishes processing its list.

webhook.test

Synthetic event fired by POST /api/v1/webhooks/:id/test. It is delivered through the real HMAC signing path (single attempt, no retry), so you can use it to verify your endpoint and signature check end to end. The test payload carries an event id (prefixed evt_) and type: "webhook.test".

usage.threshold

Fired when account usage hits 80% or 100% of included minutes.

{
"event": "usage.threshold",
"data": {
"threshold": 80,
"minutes_used": 400,
"minutes_included": 1000,
"billing_period_end": "2026-04-01T00:00:00Z"
},
"timestamp": "2026-03-25T09:15:00Z"
}