You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 3bdb62a
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: fern/observability/monitoring-quickstart.mdx
+80-5Lines changed: 80 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,10 +21,12 @@ Monitoring is Vapi's automated quality and effectiveness system for voice AI. Yo
21
21
22
22
### Monitor categories
23
23
24
-
-**Technical** tracks system-level failures like API errors, provider outages, and timeouts
25
-
-**Infrastructure** tracks resource utilization, latency, and capacity issues
26
-
-**Effectiveness** tracks assistant performance metrics like task completion and user satisfaction
27
-
-**Compliance** tracks regulatory and policy adherence across conversations
24
+
Categories help you organize and route monitors. Technical and Infrastructure monitors currently share the same trigger options, so the metric either category evaluates is defined by the Insight attached to its trigger. Effectiveness and Compliance monitors use a separate evaluation flow based on call transcripts and structured outputs.
25
+
26
+
-**Technical** groups issues in your own integrations and configuration, such as API errors, provider outages, and timeouts
27
+
-**Infrastructure** groups platform-level issues, such as capacity and resource limits
28
+
-**Effectiveness** groups assistant performance metrics like task completion and user satisfaction
29
+
-**Compliance** groups regulatory and policy adherence across conversations
28
30
29
31
### What you'll build
30
32
@@ -75,6 +77,12 @@ In this quickstart, you will create a monitor that tracks error rates across you
75
77
assistants have processed calls.
76
78
</Note>
77
79
80
+
<Warning>
81
+
Monitoring currently requires retained call data. Organizations using Zero
82
+
Data Retention (ZDR) do not receive monitor evaluations because the required
83
+
call logs are not retained.
84
+
</Warning>
85
+
78
86
## Step 1: Set up notifiers
79
87
80
88
Notifiers are alert channels (email, Slack, or webhook) that send notifications when issues are detected. You configure them as credentials in the Dashboard.
@@ -115,6 +123,73 @@ Once created, each notifier has a credential ID that you reference in your monit
115
123
</Tab>
116
124
</Tabs>
117
125
126
+
## Webhook payload
127
+
128
+
When a webhook notifier is attached to a trigger, Vapi sends a single `POST` request the moment an issue is created. The body is the same envelope every time, wrapped in a `message` object:
129
+
130
+
<Tip>
131
+
Your endpoint should verify that each request actually came from Vapi. Configure authentication directly on the webhook notifier. The Dashboard supports OAuth 2.0 and bearer-token authentication for webhook notifiers.
132
+
</Tip>
133
+
134
+
```json title="Webhook payload"
135
+
{
136
+
"message": {
137
+
"type": "issue.created",
138
+
"timestamp": 1752574205000,
139
+
"orgId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
140
+
"issue": {
141
+
"id": "e5f6a7b8-c9d0-1234-efab-567890123456",
142
+
"status": "created",
143
+
"totalCalls": 150,
144
+
"failingCalls": 12,
145
+
"evaluationStartAt": "2025-07-15T09:30:00.000Z",
146
+
"createdAt": "2025-07-15T10:30:00.000Z"
147
+
},
148
+
"monitor": {
149
+
"id": "550e8400-e29b-41d4-a716-446655440000",
150
+
"name": "Error Rate Monitor",
151
+
"description": "Tracks API and provider errors across all assistants",
|`message.type`| Always `issue.created`. This is the only monitoring event Vapi emits (see [below](#one-webhook-per-issue)). |
173
+
|`message.timestamp`| When the alert was sent, in milliseconds since the Unix epoch. |
174
+
|`message.orgId`| The organization that owns the monitor and issue. |
175
+
|`message.issue.totalCalls`| Calls evaluated in the window. |
176
+
|`message.issue.failingCalls`| Calls that matched the Insight during the evaluation that created the issue. Your failure rate for that evaluation is `failingCalls / totalCalls`. The `callsCount` returned by `GET /monitoring/issue/:id` can increase as later evaluations add affected calls to the active issue. |
177
+
|`message.issue.evaluationStartAt`| Start of the evaluation window. |
178
+
|`message.monitor.category`|`technical`, `infrastructure`, `effectiveness`, or `compliance`. The payload shape is identical across categories, so this field is how you tell them apart. |
179
+
|`message.monitor.trigger.insight.name`| Human-readable name of the metric that breached, for display. |
180
+
|`message.monitor.trigger.insight.id`| Stable ID of the configured Insight. Match on this rather than `name` for routing logic. |
181
+
|`message.monitor.trigger.threshold`| The comparator and value that were exceeded. |
182
+
183
+
<Note>
184
+
The webhook reports **only** the breach counts (`totalCalls` and `failingCalls`). It does not include per-call latency (such as p50 or p95), remaining concurrency, or the list of affected calls. To get the individual call IDs behind an issue, call `GET /monitoring/issue/:id` and read the `calls` array (see [Step 3](#step-3-view-issues)).
185
+
</Note>
186
+
187
+
### One webhook per issue
188
+
189
+
Vapi sends the webhook once, when the issue is first created. There are no `issue.updated` or `issue.resolved` webhooks. If the problem persists across evaluation windows, Vapi updates the same non-resolved issue with newly affected calls and does not send another webhook. After that issue is resolved, a later threshold breach creates a new issue and sends a new `issue.created` webhook. Acknowledging or resolving an issue happens in the Dashboard or via `PATCH /monitoring/issue/:id` and does not emit a webhook.
190
+
191
+
By default, delivery is attempted once per notifier. If a backoff plan is configured for the webhook notifier's server, failed requests can be retried. The final delivery result is recorded in the issue's `alerts` array, so a `"failure"` status there means the notification could not be delivered (see [Troubleshooting](#troubleshooting)).
192
+
118
193
## Step 2: Create a monitor
119
194
120
195
Define a monitor that tracks error rates and alerts you when errors exceed a threshold.
| Analysis returns an error | Ensure the issue has associated calls. Analysis requires call data to identify patterns. |
585
660
| Monitor not evaluating | Check that the `insightId` references a valid Insight. Verify the trigger interval is at least 1 minute. |
586
661
| Wrong calls detected | Review the Insight query that the trigger references. Ensure the monitor targets the correct assistants. |
587
-
|Duplicate issues | Triggers create new issues per evaluation window. This is expected behavior when a problem persists across multiple evaluation periods. |
662
+
|A repeated breach does not create a new issue | A trigger updates the same non-resolved issue across evaluation windows. After you resolve that issue, a later threshold breach can create a new issue. |
588
663
589
664
<Warning>
590
665
If an alert shows a `"failure"` status in the issue's alerts array, the
Copy file name to clipboardExpand all lines: fern/server-url/events.mdx
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -29,6 +29,10 @@ Most events are informational and do not require a response. Responses are only
29
29
30
30
Note: Some specialized messages like "voice-request" and "call.endpointing.request" are sent to their dedicated servers if configured (e.g. `assistant.voice.server.url`, `assistant.startSpeakingPlan.smartEndpointingPlan.server.url`).
31
31
32
+
<Note>
33
+
Monitoring alerts are a separate webhook. When a monitor detects an issue, Vapi sends an `issue.created` message to your notifier endpoint rather than the assistant Server URL. Its payload is documented in [Monitoring](/observability/monitoring-quickstart#webhook-payload).
0 commit comments