Orq MCP is live: Use natural language to interrogate traces, spot regressions, and experiment your way to optimal AI configurations. Available in Claude Desktop, Claude Code, Cursor, and more. Start now →
Traces record what happened. Alerts report when it happened, without anyone having to look.An Alert watches one metric in one Project, on a chosen schedule, and sends a notification the moment that metric crosses a defined threshold. A second notification follows when the metric recovers.
The Alerts overview, listing each alert with its condition, check frequency, and recent run history.
The Recent runs column renders each alert’s evaluation history as a bar strip, showing at a glance whether it has been evaluating cleanly or breaching.
Alerts are built around four signals, each mapped to the metrics that matter for it.
Suspicious cost
Catch spend spikes before the invoice does. A runaway retry loop, a prompt
that grew, or a switch to a more expensive model surfaces within minutes.
Unusual latency
Watch average or p95 latency. Provider degradation and slow tool calls
appear here long before they register as errors.
Guardrail results
Watch guardrail pass rate or average guardrail score. A drop means the
model started producing output the checks reject, the earliest available
signal that quality regressed.
Errors
Watch failed request counts or error rate, scoped to a provider, model,
or Deployment.
Selecting a signal narrows the Metric dropdown to the metrics that fit it:
The create form. The preview pane on the right resolves the query and config before saving.
1
Open Alerts
Head to Observability in the AI Studio, select the Alerts tab, then choose + Alert.
2
Name the alert
Enter a Name that describes the problem rather than the metric. High spend on production reads better than cost alert. Names must be unique within the workspace.Add an optional Description, and confirm the Project. An Alert belongs to exactly one Project, and the Project cannot be changed after creation.
3
Choose a signal and metric
Pick Cost, Latency, Errors, or Guardrails, then choose the Metric. The default is LLM cost.The Guardrails signal adds a guardrail picker. Leaving it empty covers every guardrail in the Project. Selecting specific Guardrails limits the alert to those.
4
Set the condition
The condition reads as a single sentence: trigger when the value is [comparator][threshold] over the last [window], checked [frequency].See Condition options for the full set of values, and note that thresholds are entered in each metric’s own unit.
5
Narrow the scope with filters
Without filters, the Alert evaluates the metric across the whole Project. Filters restrict it to a specific slice. This step is optional. See Filters.
6
Choose where it notifies
Under Notify via, select one or more Notifiers, up to 10 per Alert. Notifiers are reusable destinations for email, Slack, or generic webhooks, managed under Settings > Organization > Notifiers. A new one can be created inline from the form.Notifiers are optional. An Alert without any still evaluates and records its triggers, but notifies nobody.
7
Check the preview, then save
The right-hand pane plots the metric over 1h, 4h, 1d, or 7d alongside the resolved query and stored config. Use it to check the threshold against real traffic before committing. A threshold that has never been crossed is as unhelpful as one that fires constantly.Choose Create Alert. New Alerts are enabled immediately.
from orq_ai_sdk import Orqimport osorq = Orq(api_key=os.getenv("ORQ_API_KEY"))alert = orq.alerts.create( display_name="High spend on production", description="LLM cost above $30 in any 15 minute window", project_id="01JQ8Z0MB5W1YTVN3GCK7B0EXA", signal="cost", query={"metric": "genai.cost", "filters": []}, condition={ "comparator": "gt", "threshold": 30, "window": "15m", "interval": "5m", }, notifier_ids=["01JQ8Z1TF7QK9D2RH4NMV6PY3C"],)
The signal field uses different identifiers from the UI labels:
UI label
API signal value
Cost
cost
Latency
latency
Errors
errors
Guardrails
evals
No preset, any catalogue metric
custom
Alert routes are Project scoped, so a Project API key is sufficient.The API accepts two optional condition fields that the form does not expose:
degraded_threshold: opens a trigger at degraded severity before the critical threshold is reached. It must sit on the recovery side of threshold.
resolve_threshold: hysteresis. It defaults to the lowest configured tier and must sit at or past that tier on the recovery side. Use it to stop an alert flapping when a metric hovers at the threshold.
Neither field is supported when comparator is eq.
See the API Reference for the full parameter specification.
Filters support the is and is not operators on the following fields:provider, model, identity, agent, deployment, evaluator, evaluator nameEach filter group uses a single field and a single operator. An Alert can carry up to 20 filters.
An Alert runs on its check frequency and holds one of three statuses:
Status
Meaning
ok
The last evaluation did not breach the threshold
degraded
The value crossed the warning tier set by degraded_threshold (API only)
triggered
The value crossed the threshold
A breach opens a trigger, an incident record that stays open until the metric recovers and then closes as resolved. Notifications fire twice per incident: once when the trigger opens, once when it resolves. No repeat-notification interval exists, so a long-running incident will not flood an inbox.Each trigger retains its supporting evidence, including the evaluated value, the threshold it crossed, and the runs that led there, making it possible to move from a notification to the Traces that caused it.