> ## Documentation Index
> Fetch the complete documentation index at: https://docs.callers.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhook events

> Every webhook event Callers sends for Voice, Text, and Email agents, when each one fires, and which events to choose for common integrations.

Each webhook fires only for the events you select. This page lists every event, when it fires, and how it appears in the dashboard's **Send the webhook for** picker. The event that triggered a delivery is in the payload's `webhookEvent` field.

## Voice agent events

A typical answered outbound call produces events in this order:

<ol />

### Pre-call and in-call events

| Event | Dashboard label | Fires when | Typical handler |
| - | - | - | - |
| `DIALING` | Dialing | Callers starts placing an outbound call. | Show "calling…" in your app. |
| `CONNECTED` | Connected | The call is answered and the conversation starts. | Mark the contact as in-call in your CRM. |
| `COULD_NOT_CONNECT:NO_ANSWER` | Could not connect → No answer | The contact didn't answer. | Log the attempt; the agent retries on its own. |
| `COULD_NOT_CONNECT:BUSY` | Could not connect → Busy | The line was busy. | Same as no answer. |
| `FAILED` | Failed | The call couldn't be placed or failed for a technical reason. `failedReason` is set on the call. | Alert on repeated failures for one number. |
| `HANG_UP` | Hang up | The conversation ended (by either side). Post-call analysis hasn't run yet, so `summary` and `successCriteria` may be empty. | Clear the in-call state; wait for the outcome. |
| `FORWARDED` | Forwarded | The agent [transferred](https://docs.callers.ai/documentation/voice/call-transfers.md) the call to a person or number. | Screen-pop the contact for the receiving agent. |
| `FORWARDED_CALL_FINISHED` | Forwarded call finished | The transferred part of the call ended. `totalDuration` includes it. | Record the handled-by-human time. |

### Post-call events

| Event | Dashboard label | Fires when | Typical handler |
| - | - | - | - |
| `POST_PROCESSING_FINISHED:INTERESTED` | Post processing finished → Interested | Analysis finished and the contact reached the agent's goal. | Create a deal or task; notify sales. |
| `POST_PROCESSING_FINISHED:NOT_INTERESTED` | → Not interested | Analysis finished and the goal wasn't reached. | Update the lead stage; schedule nurture. |
| `POST_PROCESSING_FINISHED:CALL_ME_LATER` | → Call later | The contact asked to be called back later. | Note the callback; the agent reschedules on its own. |
| `POST_PROCESSING_FINISHED:WRONG_NUMBER` | → Wrong number | The person said it's the wrong number. | Flag the number in your CRM. |
| `POST_PROCESSING_FINISHED:DO_NOT_CALL` | → Do not call | The contact asked not to be called again. | Mark the contact as opted out everywhere. |
| `POST_PROCESSING_FINISHED:VOICE_MAIL` | → Voice mail | The call reached voicemail. | Count the attempt; the agent retries. |
| `POST_PROCESSING_FINISHED:<criterion name>` | → your criterion's name | Analysis finished and this custom [success criterion](https://docs.callers.ai/documentation/results/success-criteria.md) matched, for example `POST_PROCESSING_FINISHED:Demo Scheduled`. | Run the workflow for that outcome (book, escalate, invoice). |
| `CALL_FINISHED` | Call finished | The call is completely over (including any transferred part) and analysis is done. Fires once per call regardless of outcome, with final durations and the [recording URL](https://docs.callers.ai/documentation/voice/call-recording-and-limits.md). | Store the call record, transcript, and recording. |
| `CONTACT_UNREACHED` | Contact unreached | The contact used up all dial attempts without being reached. Contains the last call. | Hand off to an email or SMS agent. |
| `CONTACT_LAST_DAILY_ATTEMPT` | Contact last daily attempt | The contact reached the agent's maximum attempts for the day but still has attempts left on later days. | Send a same-day text so the contact expects tomorrow's call. |

> [!NOTE]
>
> `POST_PROCESSING_FINISHED` events also fire again when someone changes a call's outcome in the dashboard, so your system stays in sync with manual corrections. Their payload carries the [post-call analysis](https://docs.callers.ai/documentation/using-callers/key-questions.md) answers.

### Outcome events and success criteria

`INTERESTED` and `NOT_INTERESTED` are the two goal groups. If your agent defines custom success criteria (for example "Demo Scheduled" in the goal-reached group), each one gets its own event. You can subscribe to the group, to individual criteria, or both. A webhook is delivered once per call event even if several of its selected events match.

Custom criterion events are selected in the dashboard. Through the API you can subscribe to the standard events listed in the tables above.

## Text agent events

For SMS, WhatsApp, and other Text agents:

| Event | Fires when | Example value in the payload |
| - | - | - |
| `POST_PROCESSING_FINISHED:INTERESTED` | A conversation was analyzed and the goal was reached. | `["POST_PROCESSING_FINISHED:INTERESTED"]` |
| `POST_PROCESSING_FINISHED:NOT_INTERESTED` | The goal wasn't reached. | `["POST_PROCESSING_FINISHED:NOT_INTERESTED"]` |
| `POST_PROCESSING_FINISHED:FOLLOW_UP_PENDING` | The conversation needs a follow-up. | `["POST_PROCESSING_FINISHED:FOLLOW_UP_PENDING"]` |
| `POST_PROCESSING_FINISHED:WRONG_NUMBER` | The person said it's the wrong number. | `["POST_PROCESSING_FINISHED:WRONG_NUMBER"]` |
| `POST_PROCESSING_FINISHED:UNSUBSCRIBED` | The contact opted out. | `["POST_PROCESSING_FINISHED:UNSUBSCRIBED"]` |
| `POST_PROCESSING_FINISHED:<criterion name>` | A custom success criterion matched. | `["POST_PROCESSING_FINISHED:Renewal Confirmed"]` |
| `CONTACT_UNREACHED` | The contact didn't respond after all follow-ups. | `["CONTACT_UNREACHED"]` |
| `FAILED` | The conversation failed, for example because of a sending error. | `["FAILED"]` |

> [!NOTE]
>
> Text and Email payloads don't have a `webhookEvent` field. Simple webhooks send the triggering event names as a `webhookEvents` array, as shown in the last column.

## Email agent events

| Event | Fires when | Example value in the payload |
| - | - | - |
| `POST_PROCESSING_FINISHED:INTERESTED` | An email conversation was analyzed and the goal was reached. | `["POST_PROCESSING_FINISHED:INTERESTED"]` |
| `POST_PROCESSING_FINISHED:NOT_INTERESTED` | The goal wasn't reached. | `["POST_PROCESSING_FINISHED:NOT_INTERESTED"]` |
| `POST_PROCESSING_FINISHED:FOLLOW_UP_PENDING` | A follow-up is pending. | `["POST_PROCESSING_FINISHED:FOLLOW_UP_PENDING"]` |
| `POST_PROCESSING_FINISHED:UNSUBSCRIBED` | The contact unsubscribed. | `["POST_PROCESSING_FINISHED:UNSUBSCRIBED"]` |
| `POST_PROCESSING_FINISHED:INVALID_EMAIL` | The address is invalid. | `["POST_PROCESSING_FINISHED:INVALID_EMAIL"]` |
| `POST_PROCESSING_FINISHED:UNCLASSIFIED` | The reply couldn't be classified. | `["POST_PROCESSING_FINISHED:UNCLASSIFIED"]` |
| `POST_PROCESSING_FINISHED:<criterion name>` | A custom success criterion matched. | `["POST_PROCESSING_FINISHED:Quote Accepted"]` |

Text and Email payloads differ from call payloads. See [Webhook payload](https://docs.callers.ai/documentation/webhook/webhook-payload.md#text-and-email-payloads).

## Default events

When you create a webhook through the API without `events`, it subscribes to:

* `POST_PROCESSING_FINISHED:INTERESTED`
* `POST_PROCESSING_FINISHED:NOT_INTERESTED`
* `POST_PROCESSING_FINISHED:CALL_ME_LATER`
* `POST_PROCESSING_FINISHED:WRONG_NUMBER`
* `POST_PROCESSING_FINISHED:DO_NOT_CALL`

In the dashboard, a webhook with no events selected is flagged and sends nothing until you choose events.

## Recommended event sets

| Goal | Subscribe to |
| - | - |
| Log every call in a CRM or warehouse | `CALL_FINISHED` |
| Act on hot leads immediately | `POST_PROCESSING_FINISHED:INTERESTED` or your goal-reached criteria |
| Keep opt-outs in sync | `POST_PROCESSING_FINISHED:DO_NOT_CALL`, `POST_PROCESSING_FINISHED:WRONG_NUMBER` |
| Hand off unreachable contacts to another channel | `CONTACT_UNREACHED` |
| Show live call status in your app | `DIALING`, `CONNECTED`, `HANG_UP` |
| Track human handoffs | `FORWARDED`, `FORWARDED_CALL_FINISHED` |

> [!TIP]
>
> `HANG_UP` arrives before analysis is done. If you need the outcome, summary, or extracted variables, use a `POST_PROCESSING_FINISHED:*` event or `CALL_FINISHED`.

## Related

> **[Webhooks overview](https://docs.callers.ai/documentation/webhook/webhook-overview.md)**
>
> Configure webhooks and handle delivery.

> **[Webhook payload](https://docs.callers.ai/documentation/webhook/webhook-payload.md)**
>
> Every field in each delivery.

> **[Statuses and outcomes](https://docs.callers.ai/documentation/using-callers/call-statuses.md)**
>
> How outcomes are decided.

> **[Success criteria](https://docs.callers.ai/documentation/results/success-criteria.md)**
>
> Define the outcomes that drive events.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.