Threshold alerts
Create an alert from the Customise page or by asking Ask Analytics (create_alert). An alert watches one metric over a sliding window and fires when it crosses your threshold.
string
required
One of
calls_count, cost_total, savings_total, tokens_in,
tokens_out, tokens_total, errors_count, tool_calls_count,
unique_users, unique_models, avg_latency_ms, p95_latency_ms.string
required
Comparison:
>, <, >=, or <=.number
required
The value to compare against.
number
default:"5"
Sliding window to evaluate the metric over (1–1440).
number
default:"60"
Minimum gap between fires (1–10080).
string
required
An
https:// receiver. A hooks.slack.com URL is auto-formatted for Slack.object
Optional scoping by
workflow_id, end_user_id, model, provider, or
tool_name.Webhook payload
When a non-Slack alert fires, Orbitrage POSTs JSON and signs it:X-Orbitrage-Signature: <hex>, an HMAC-SHA256 of the raw body using the alert’s webhook secret (shown once at creation). Verify it:
Slack webhooks (
hooks.slack.com) receive Block Kit instead of the signed JSON — the URL itself is the secret, so no signature is added.Anomaly detection (automatic)
Beyond explicit thresholds, Orbitrage learns each org’s normal pattern and alerts on deviations — no configuration beyond a Slack connection.- Baselines are computed per hour-of-week (so 3pm Tuesday is judged against past 3pm Tuesdays), as a rolling mean and standard deviation over
calls,cost,errors, andtokens. - Each hour, the just-completed hour is compared to its baseline. If it deviates beyond a Z-threshold (default 3) — and the same metric hasn’t already fired this hour — a Block Kit message is posted to your Slack channel.
- Anomalies are skipped when there aren’t enough samples yet (minimum 3 for that hour-of-week) or while a cooldown is active.
Delivering to Slack
Scheduling (self-hosted note)
Alerts and anomaly checks run on a schedule (every minute for threshold alerts; hourly for anomalies) authenticated with a sharedCRON_SECRET. The managed platform wires this up already; if you self-host, schedule the cron endpoints via pg_cron + pg_net or any external scheduler.