Skip to main content

Overview

Webhooks allow you to receive HTTP POST notifications when events occur in your Voicy account. When a call ends, Voicy sends the full call data — transcript (STT text, not audio), summary, extracted variables, a recording link, and more — to your server in real time. Each agent supports up to 5 webhooks, all firing in parallel. Use them to push call data to your CRM, analytics platform, or any custom integration.

Creating a Webhook

1

Open Agent Settings

In the Voicy Dashboard, navigate to your agent and open the Settings tab. Scroll down to the Webhooks section and expand it.
2

Add a Webhook

Click the + button to add a new webhook. Fill in the fields:Click Add to save.
3

Deploy the Agent

Webhooks are part of the agent configuration. After adding or modifying webhooks, deploy the agent for changes to take effect on phone calls.
Changes take effect immediately for web (test) calls, but phone calls use the deployed version.
4

Test It

Make a test call from the dashboard’s built-in call simulator. When the call ends, your endpoint will receive a POST request with the full call payload.
Use a service like webhook.site to inspect payloads during development.

Managing Webhooks

  • Edit — Click the pencil icon on any webhook to change its name, URL, or secret. Leave the secret field blank to keep the existing secret.
  • Delete — Click the trash icon to remove a webhook.
  • Limit — Up to 5 webhooks per agent. The badge shows your current count (e.g. “2/5”).

Managing Webhooks via the API

Prompt-based agents’ webhooks can also be set through the Agent API, with the same fields and limits as the dashboard. Changes are deployed immediately — no separate deploy step.
  • Create — pass webhooks to Create Agent.
  • Update — pass webhooks to Update Agent. It replaces the agent’s whole list: a webhook you leave out is deleted, and [] removes them all. Omit the field to leave webhooks unchanged.
  • Read — every Agent response includes webhooks, with has_secret / has_headers in place of the values.
Secrets and headers are write-only. On update, omit them (or send null) to keep what is stored; send "" to remove a secret, or {} to remove all headers. Include each webhook’s id to update it in place — without one, a webhook with the same url is updated.
This keeps the CRM webhook (and its secret), adds an Analytics webhook, and deletes any other webhook on the agent.

Custom Headers

Custom headers let you attach arbitrary HTTP headers to every webhook request — useful when your receiving endpoint requires authentication (e.g. Authorization: Bearer <token>) or a vendor-specific API key header. Limits: Up to 10 headers per webhook. Names must be valid RFC 7230 tokens. Values cannot contain line breaks. Reserved headers that cannot be overridden: Content-Type, x-voicy-event, x-voicy-signature, Host, Content-Length, Transfer-Encoding. Security: Header values are stored server-side and never returned by the API (same treatment as signing secrets). When editing a webhook, leave all value fields blank to preserve the existing headers.

Events

call_ended

Fired after all post-call processing completes (summary generation, variable extraction, email notifications). The payload contains the full call data in the same format as the Get Call API. Headers: Payload:
recording_url is a signed link to the call recording, valid for 1 hour from when the webhook fires. If you need the recording after it expires, re-fetch it via the Get Call API, which issues a fresh signed URL.

Handling Webhooks

When your server receives a webhook, respond with a 200 status code to acknowledge receipt. Here’s a minimal handler:

Signature Verification

If a signing secret is configured, each webhook request includes an x-voicy-signature header containing an HMAC-SHA256 signature of the raw request body. Always verify signatures in production to ensure requests are genuinely from Voicy.

Behavior

If a webhook endpoint is unreachable or returns an error, the failure is logged but does not affect call processing or other webhooks.