Product feature
Post-call webhooks: send every call's result to your CRM automatically
A post-call webhook is an HTTP POST that Outpero sends to your URL when a call ends. It carries the outcome, summary, transcript, captured fields and a recording link, so your CRM can update itself. You choose whether it fires on every call, completed calls only, or voicemail only, and can sign it with HMAC.
* Time from the lead reaching Outpero to the first ring, under normal conditions. It depends on how quickly your lead source delivers the lead.
At a glance
Post-call webhooks: the short version
| Details | |
|---|---|
| Where it lives | Employee > Post-Call tab > Post-Call Webhooks |
| When it fires | Every call, Completed only, or Voicemail only |
| How many | Up to 10 webhooks per AI employee |
| Delivery | One POST, 5 second timeout, no retries |
| Security | Optional HMAC signing, plus custom headers such as a CRM API key |
| Format | Flat or nested payload, JSON or form encoding, transcript can be excluded |
On a call
How post-call webhooks works, step by step
- 01A call connects, runs to its end and is classified, producing an outcome, a summary and the values you asked the employee to capture.
- 02Outpero checks each webhook on the employee against its trigger: every call, completed only, or voicemail only.
- 03For every matching webhook it builds the payload in your chosen shape, adds your custom headers and, if signing is on, the timestamp and signature headers.
- 04It sends one POST with a 5 second timeout, and does not follow redirects or try again if your server is slow or returns an error.
- 05Your system receives the call.ended event, verifies the signature if you use one, and writes the result to the CRM, sheet or workflow tool.
Hear how a call goes
A sample call that uses post-call webhooks
A diagnostics lab follows up on a booking enquiry. The result is pushed to its CRM when the call ends. · Runs in Telugu with English words, shown here in English; shown here in English.
- Outpero AIHello Ms Lakshmi, I am an AI assistant calling from Sree Diagnostics about the full body checkup you enquired about. Do you have two minutes?
- CallerYes, go ahead.
- Outpero AIWould you like to book it for this week? We have fasting slots from 7 to 10 in the morning.
- CallerFriday morning is good. Which branch is that?
- Outpero AII can note Friday morning for our Kukatpally branch. May I confirm your age for the right package?
- CallerI am 42.
- Outpero AIThank you. I have noted Friday at the Kukatpally branch for the package suited to age 42. Our team will send the confirmation shortly.
- CallerFine, thank you.
- Outpero AIThank you, Ms Lakshmi. Have a good day.
When the call ended, Outpero sent a call.ended POST to the lab's CRM with status completed, the qualified outcome, a two line summary, and captured fields for preferred day, branch and age. The CRM created the booking task without anyone opening the dashboard. Illustrative example.
An example written to show the shape of the call, not a recording or a customer result.
In the product
Set up post-call webhooks
- 01Open the AI employee, go to the Post-Call tab and scroll to the Post-Call Webhooks section, then add a new webhook with your endpoint URL.
- 02Choose the trigger: Every call, Completed only, or Voicemail only, depending on which outcomes your system needs to hear about.
- 03Add any custom headers your endpoint expects, such as an API key for your CRM, and pick flat or nested payload and JSON or form encoding.
- 04Switch on Turn on signing if your server should verify requests, and tick the option to exclude the transcript if it should not leave Outpero.
- 05Use the test send button to deliver a sample payload to your URL, check it arrives as expected, then save the webhook.
In detail
Post-call webhooks explained
When a post-call webhook fires
| Trigger | Fires for | Typical use |
|---|---|---|
| Every call | All connected calls, including voicemail | Full logging in a warehouse or CRM timeline |
| Completed only | Connected calls that were not detected as voicemail | Updating lead status and notifying the sales team |
| Voicemail only | Calls where voicemail was detected | Scheduling another attempt or tagging a lead |
A call that never connects, such as one that goes unanswered, never becomes a call record, so none of these triggers apply to it. Use the dashboard or your own dial logs for those.
What is in the payload
- —event, always call.ended, with call_id, employee and direction.
- —from and to numbers, plus status (completed or voicemail) and hangup_reason.
- —duration_s, started_at and ended_at timestamps.
- —recording_url, a signed link valid for 24 hours.
- —pre_call, the lead data the call started with.
- —transcript, containing spoken turns only.
- —outcome, summary and captured, the classified result and the fields you defined.
You can pick a flat or nested shape, send JSON or form-encoded data, and exclude the transcript when the receiving system does not need it.
Verifying the signature
When Turn on signing is enabled, every request carries two extra headers: X-Outpero-Timestamp and X-Outpero-Signature, whose value begins with sha256=. The signature is an HMAC over the timestamp, a full stop, and the raw request body. Recompute it on your server with the shared secret, compare, and reject mismatches or very old timestamps.
Because there are no retries, treat the webhook as a fast notification, not a queue. Return a 200 quickly, do heavy work afterwards, and use the dashboard export to reconcile anything your server missed.
Webhooks in and out
Post-call webhooks send results out. For the reverse direction, Outpero also has an instant-lead intake endpoint that lets a form or CRM push a new lead in so it is called within seconds. That is covered on its own page and is only mentioned here for completeness.
Put it to work
What teams use post-call webhooks for
| Use | How it helps |
|---|---|
| CRM updates without data entry | Create or update a lead in your CRM the moment the call ends, with the outcome, summary and captured fields attached. |
| Alerting your sales team | Post only qualified or callback outcomes into a Slack, Teams or email workflow so the team acts on warm leads first. |
| Separate handling for voicemail | Add a Voicemail only webhook that tags the lead for another attempt, while a different webhook handles completed calls. |
| Feeding a data warehouse | Send every call, with the transcript, to your own store for reporting beyond what the dashboard shows. |
| Several systems at once | Run up to 10 webhooks per employee, for example one to the CRM, one to billing and one to a notification tool. |
Straight answers
What post-call webhooks does not do
- !Each delivery is a single POST with a 5 second timeout and no retries, so a down or slow endpoint loses that event unless you also check the dashboard.
- !Calls that never connect create no call record, so no webhook is sent for them; only connected calls are reported.
- !Redirects are not followed, so the URL you enter must be the final address of the endpoint.
- !Outcome, summary and captured fields are null in the payload if the call could not be classified, and the payload carries no cost or system prompt.
- !The recording link inside the payload is a signed link that stays valid for 24 hours, so download or store the audio promptly.
Post-call webhooks: questions people ask
What does Outpero send to a webhook after a call?
+
A call.ended event containing call_id, employee, direction, from and to numbers, status, hangup_reason, duration, start and end times, a recording link, the pre-call data, the transcript, the outcome, the summary and the captured fields. You can choose a flat or nested shape, JSON or form encoding, and leave the transcript out.
Are failed webhooks retried?
+
No. Each webhook is a single POST with a 5 second timeout and no retries. If your server is down or answers too slowly, that event is not sent again. Respond quickly, process in the background, and use the dashboard or CSV export to catch anything your system missed during an outage.
How do I verify that a webhook really came from Outpero?
+
Turn on signing for the webhook. Each request then includes X-Outpero-Timestamp and X-Outpero-Signature, which starts with sha256=. Compute an HMAC of the timestamp, a full stop and the raw body using your secret, compare it with the header, and reject requests that do not match or are too old.
Can I send results only for completed calls or only voicemail?
+
Yes. Each webhook has a trigger: Every call, Completed only, or Voicemail only. Completed only skips calls detected as voicemail. You can add up to 10 webhooks per AI employee, so one endpoint can receive completed calls while another receives voicemail leads for a retry workflow.
How long is the recording link valid?
+
The recording_url in the payload is a signed link that stays valid for 24 hours. After that it stops working, so your system should download or store the audio soon after receiving the event if you need it for longer. The dashboard keeps its own recording player for each call.
Is there a webhook for calls that were never answered?
+
No. A call that never connects does not produce a call record, so no post-call webhook is sent for it. Webhooks are sent for connected calls only. Track unanswered attempts through your lead source, the dashboard or your retry settings rather than relying on a webhook event.
Keep reading
Other product features
Enterprise and custom: volume plans go as low as ₹3.5/min, quoted on your needs.
Get a custom quoteTry it in 30 seconds
Hear your business’s fastest employee take a call
Call the agent yourself and hear how it handles a real enquiry in your customers' language. No card, no signup — 50 free credits when you’re ready to deploy one.
No setup fee · calls from ₹5/min
Or see the full product — Calls from ₹5/min, no setup fee.
