Alerting checks a metric on a schedule and tells you when it crosses a threshold, and again when it recovers. Use it to catch a drop in success rate, a spike in negative sentiment, failing tools or transfers, rising latency or cost, without watching dashboards.
Open it from MONITOR > Alerting. A workspace can have up to 10 alert rules.
How a rule works#
- Every rule has a Check frequency. A scheduler looks at the rules every 30 seconds and evaluates each one whose frequency has elapsed.
- The metric is computed over the Time window ending now, for the selected agents.
- If the condition is met and the rule was OK, it becomes Triggered: an
alert_triggerednotification is sent and a history event is recorded. - While it stays breached, nothing more is sent.
- When the condition is no longer met, it goes back to OK and an
alert_resolvednotification is sent.
Create an alert#
Click Create alert.
| Field | Description |
|---|---|
| Name | Shown in the list, history, emails and webhook payloads. |
| Metric | What to measure. The hint under the field explains it. |
| Condition | Absolute value or Change vs last cycle, then a comparator and a threshold. |
| Time window | 5 minutes, 15 minutes, 1 hour, 4 hours, 24 hours or 7 days. |
| Check frequency | Every minute, Every 5 minutes, Every 15 minutes, Every hour or Every day. |
| Agents | Leave all unticked to watch every agent. |
| Email recipients | Press Enter after each address. Up to 20. |
| Webhook URL | Receives signed alert_triggered and alert_resolved events. Falls back to the workspace webhook when empty. |
| Enabled | Paused rules are not evaluated. |
A new alert starts as: Call success rate is below 80% over 1 hour, checked every 5 minutes.
Comparators#
| Label | API comparator |
|---|---|
| is above | > |
| is at or above | >= |
| is below | < |
| is at or below | <= |
Absolute value or change vs last cycle#
- Absolute value compares the metric in the window with the threshold. Rates are percentages (0 to 100) and costs are AUD.
- Change vs last cycle compares the window with the window just before it and uses the percentage change:
(current - previous) / previous * 100. If the previous window was 0, the change is 0 when the current value is also 0, otherwise 100. Use a negative threshold with is below to catch drops, for example "is below -20" for a 20% fall. Concurrency used always uses its absolute value.
Metrics#
The dashboard offers these metrics:
| Label | API metric |
How it is measured |
|---|---|---|
| Call count | call_count |
Calls created in the window. |
| Call success rate | call_success_rate |
Percent of analysed calls marked successful. |
| Negative sentiment rate | negative_sentiment_rate |
Percent of calls with a sentiment where it is Negative. |
| Total call cost | total_call_cost |
Sum of combined_cost in AUD. |
| Concurrency used | concurrency_used |
Calls holding a concurrency slot at check time. |
| Custom function failures | custom_function_failure_count |
Tool results that look like an error: a JSON error or errors key, "success": false, a status or status_code of 400 or more, or text starting with error, failed or failure. |
| Transfer call failures | transfer_call_failure_count |
Calls that invoked a tool with "transfer" in its name but did not end with call_transfer. |
| API errors | api_error_count |
API responses with status 400 or higher. |
These metrics are available through the API (GET /alerts/metrics lists them all):
API metric |
How it is measured |
|---|---|
e2e_latency_p50, e2e_latency_p90 |
Percentile of every end-to-end latency sample in the window, in ms. |
qa_score_average |
Average QA weighted score (or the criteria score when there is no weighted score) of QA results created in the window. |
qa_failure_count |
QA results that did not pass, after manual overrides. |
chat_count |
Chats started in the window. |
chat_success_rate |
Percent of analysed chats marked successful. |
chat_negative_sentiment_rate |
Percent of chats with a sentiment where it is Negative. |
total_chat_cost |
Sum of chat costs. |
Chat metrics ignore the agent filter. QA metrics apply it through the scored call's agent. See AI QA overview.
Notifications#
Email#
Each recipient gets a message with the subject [Tried] Alert triggered: <name> (or Alert resolved, Test alert) and the metric, value, threshold and window.
Needs keys Email is sent over SMTP when SMTP_URL is set. Without it, messages are written to the server log.
Webhook#
The rule's Webhook URL, or the workspace webhook when empty, receives a signed POST:
{
"event": "alert_triggered",
"alert": {
"alert_id": "alert_5c1d...",
"name": "Success rate drop",
"metric": "call_success_rate",
"threshold_type": "absolute",
"comparator": "<",
"threshold": 80,
"window_minutes": 60,
"frequency_minutes": 5,
"agent_ids": [],
"emails": ["ops@example.com"],
"webhook_url": "https://example.com/hooks/alerts",
"enabled": true,
"state": "triggered",
"last_value": 72.5,
"last_checked_timestamp": 1760850000000,
"created_timestamp": 1760000000000,
"value": 72.5,
"message": "Success rate drop: call_success_rate is 72.5% (< 80%) over the last 60 min",
"timestamp": 1760850000000
}
}event is alert_triggered, alert_resolved or alert_test. Deliveries carry the same signature headers as call webhooks (x-tried-signature and x-retell-signature).
The alert list#
Each row shows the name, the condition in words with the check frequency, the agents, where notifications go (Workspace webhook when neither email nor webhook is set), the last value and when it was checked, an enable switch and the status: OK, Triggered or Paused.
Row actions:
- Check evaluates the rule now and applies the transition, the same as the scheduler. A toast says Triggered, Resolved, Still breached or Within threshold.
- Test sends an
alert_testnotification to the emails and webhook without changing the state, and records a Test event. - The pencil edits the rule; the trash icon deletes it with its history.
History#
The History tab lists triggers, resolutions and tests, newest first, for All alerts or one rule.
| Column | Content |
|---|---|
| Time | When the event happened |
| Alert | Rule name |
| Event | Triggered, Resolved or Test |
| Value | Metric value at the time |
| Threshold | The rule threshold |
| Message | The notification text |
API#
| Endpoint | Description |
|---|---|
GET /alerts/metrics |
Every metric name. |
POST /alerts |
Create a rule. 400 when the workspace already has 10. |
GET /alerts, GET /alerts/:id |
List or get rules. |
PATCH /alerts/:id |
Update any field. |
DELETE /alerts/:id |
Delete a rule and its history. |
POST /alerts/:id/evaluate |
Evaluate now. Returns value, current, previous, breached, transition. |
POST /alerts/:id/test |
Send a test notification. |
GET /alert-events |
History, with optional alert_id and limit (1 to 500, default 100). |
Rule fields: name, metric, threshold_type (absolute or relative, default absolute), comparator (default >), threshold, window_minutes (1 to 10080, default 60), frequency_minutes (1 to 1440, default 5), agent_ids, emails, webhook_url, enabled (default true). The API accepts any window and frequency in range, not only the dashboard presets.