Skip to main content
Webhooks let your integration receive real-time call and SMS conversation events at an HTTPS endpoint that you control. Webhook registrations configure the default destination for direct /v1/calls and /v1/sms-conversations events. A webhookUrl on an individual create request overrides only that conversation’s destination; event subscriptions and signing still come from your webhook registration. Register a webhook with the event types you want to receive:
The response includes a signing secret once. Store it securely and use it to verify future webhook payloads.

Event Types

Payload Shape

Webhook payloads share a common envelope:
PAM routes webhooks by clientOrgId and event type. A conversation event is delivered only to webhook subscriptions for the conversation’s client organization. If the create request included externalReferenceId, PAM includes it as top-level externalReferenceId next to conversationId on every webhook for that conversation. For pre-conversation call.failed events, PAM includes it when the original create-call request provided one. The value is an optional caller-owned reference. PAM does not interpret it, does not require it to be globally unique, and does not use it as an idempotency key. If the create request included externalReferenceId, PAM includes it as top-level externalReferenceId next to conversationId on every webhook for that conversation. For pre-conversation call.failed events, PAM includes it when the original create-call request provided one. The value is an optional caller-owned reference. PAM does not interpret it, does not require it to be globally unique, and does not use it as an idempotency key.

Lifecycle and Delivery

PAM emits webhook events after it persists the related conversation, call, or message state. For example, sms.message_received means the inbound message is already stored by PAM, and call.ended means the call end state has been recorded. Webhook delivery is asynchronous and at least once. Your endpoint may receive duplicate events, and retries can arrive after newer events. Verify the signature, enqueue your own work, and return a 2xx response quickly. Use the event payload to deduplicate and reconcile state in your system. SMS delivery updates are canonical PAM states. They are not raw carrier events. PAM normalizes duplicate and out-of-order provider signals before emitting sms.message_delivery_updated.

Voice Event Examples

call.started fires when the call has started:
call.ended includes the final transcript and call timing:
call.analyzed arrives after post-call analysis is complete:
call.failed fires when PAM accepted a voice call request but could not place the call. PAM tries to place the call before sending this event. You can retry the call with a new request, handle it manually, or treat the attempt as failed in your system.
Use data.dispatchRequestId, data.idempotencyKey, top-level externalReferenceId, or your own request metadata to reconcile the failed call attempt.

SMS Event Examples

sms.message_sent fires for the opening SMS and each later assistant SMS:
sms.message_delivery_updated is a canonical delivery projection. It is not a raw carrier event:
Tool-call events expose the tool name, tool version, arguments, and result without exposing provider transport details.

Signature Verification

Every delivery includes headers for the event type and payload signature:
The signature is an HMAC-SHA256 of the raw request body using the webhook endpoint’s secret as the key.

Delivery Notes

  • Webhook URLs must use HTTPS.
  • The webhook secret is returned only when the endpoint is created.
  • Delivery is at least once, so deduplicate events by delivery id and event body.
  • Failed deliveries are retried with exponential backoff.
  • Delivery times out after 10 seconds.
  • Return a 2xx response quickly after verifying and enqueueing the event.