skills/axiom-alerting/SKILL.md
Create and manage Axiom monitors and notifiers via the v2 public API. Use when building alerting, routing notifications, validating monitor behavior, and maintaining alert configurations end-to-end.
npx skillsauth add axiomhq/skills axiom-alertingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You manage alerting in Axiom end-to-end: notifiers for routing and monitors for detection.
Base URL: https://api.axiom.co/v2/ with Bearer token auth from .axiom.toml (project root or ~/.axiom.toml).
/v2/monitors)| Operation | Method | Path |
|-----------|--------|------|
| List | GET | /v2/monitors |
| Get | GET | /v2/monitors/{id} |
| History | GET | /v2/monitors/{id}/history |
| Create | POST | /v2/monitors |
| Update | PUT | /v2/monitors/{id} |
| Delete | DELETE | /v2/monitors/{id} |
/v2/notifiers)| Operation | Method | Path |
|-----------|--------|------|
| List | GET | /v2/notifiers |
| Get | GET | /v2/notifiers/{id} |
| Create | POST | /v2/notifiers |
| Update | PUT | /v2/notifiers/{id} |
| Delete | DELETE | /v2/notifiers/{id} |
scripts/setup.axiom.toml has a deployment:[deployments.prod]
url = "https://api.axiom.co"
token = "xaat-your-token"
org_id = "your-org-id"
Core:
scripts/axiom-api <deploy> <method> <path> [body]Monitor scripts:
scripts/monitor-list <deployment> [--json]scripts/monitor-get <deployment> <id>scripts/monitor-history <deployment> <id> <startTime> <endTime>scripts/monitor-create <deployment> <json-file>scripts/monitor-update <deployment> <id> <json-file>scripts/monitor-delete <deployment> <id>Notifier scripts:
scripts/notifier-list <deployment> [--json]scripts/notifier-get <deployment> <id>scripts/notifier-create <deployment> <json-file>scripts/notifier-update <deployment> <id> <json-file>scripts/notifier-delete <deployment> <id>notifierIds.monitor-history.scripts/setup.scripts/notifier-list <deployment> and reuse one if appropriate.scripts/notifier-create.notifierIds attached.scripts/monitor-history <deployment> <id> <startTime> <endTime>.threshold, rangeMinutes, intervalMinutes, and N-of-M trigger fields.emails (not recipients) for email notifier payloads.triggerAfterNPositiveResults/triggerFromNRuns for noisy signals.bin() in monitor queries; avoid bin_auto() for alert logic.mplQuery for definitions; API responses may include both aplQuery and mplQuery.Monitor types:
ThresholdMatchEventAnomalyDetectionOperators:
AboveBelowAboveOrEqualBelowOrEqualAboveOrBelowCore fields:
name: Human-readable monitor name.type: Threshold, MatchEvent, or AnomalyDetection.aplQuery / mplQuery: Query evaluated by the monitor.notifierIds: Array of notifier IDs to notify.disabled: Whether monitor is disabled.disabledUntil: Optional timestamp for temporary disable/snooze.description: Optional monitor description.Threshold and evaluation fields:
operator: Threshold comparison operator.threshold: Numeric threshold value.rangeMinutes: Query evaluation window in minutes.intervalMinutes: Evaluation cadence in minutes.alertOnNoData: Whether no-data should trigger alerting.triggerAfterNPositiveResults: Positive evaluations required before firing.triggerFromNRuns: Total evaluation runs considered for N-of-M logic.Advanced behavior fields:
resolvable: Whether alerts can resolve automatically.notifyByGroup: Notify per group key/value result.notifyEveryRun: Notify on every positive evaluation.skipResolved: Skip sending resolved notifications.secondDelay: Delay (seconds) to tolerate late-arriving data.Type-specific fields:
columnName: Field used by some anomaly/value-anomaly monitors.Threshold:
{
"name": "High Error Count",
"type": "Threshold",
"aplQuery": "['logs'] | where status >= 500 | summarize count()",
"operator": "Above",
"threshold": 100,
"rangeMinutes": 5,
"intervalMinutes": 5,
"notifierIds": ["notifier-id"],
"triggerAfterNPositiveResults": 2,
"triggerFromNRuns": 3,
"disabled": false
}
MatchEvent:
{
"name": "Error Event Match",
"type": "MatchEvent",
"aplQuery": "['logs'] | where level == 'error'",
"rangeMinutes": 5,
"intervalMinutes": 5,
"notifierIds": ["notifier-id"],
"disabled": false
}
AnomalyDetection:
{
"name": "CPU Anomaly",
"type": "AnomalyDetection",
"aplQuery": "['metrics'] | summarize avg(cpu_usage)",
"columnName": "cpu_usage",
"operator": "AboveOrBelow",
"rangeMinutes": 5,
"intervalMinutes": 5,
"notifierIds": ["notifier-id"],
"disabled": false
}
Email:
{
"name": "Oncall Email",
"properties": {
"email": {
"emails": ["[email protected]"]
}
}
}
Slack:
{
"name": "Oncall Slack",
"properties": {
"slack": {
"slackUrl": "https://hooks.slack.com/services/T.../B.../XXX"
}
}
}
Custom webhook:
{
"name": "Oncall Custom Webhook",
"properties": {
"customWebhook": {
"url": "https://api.example.com/alerts",
"body": "{\"action\":\"{{.Action}}\",\"monitorID\":\"{{.MonitorID}}\"}"
}
}
}
401 Unauthorized:
~/.axiom.toml.scripts/setup and retry:
scripts/notifier-list <deployment>403 Forbidden:
scripts/monitor-list <deployment>404 Not Found on get/update/delete:
.axiom.toml.scripts/monitor-list <deployment> --jsonscripts/notifier-list <deployment> --json400 Bad Request on notifier create/update:
properties.emails (not recipients).scripts/notifier-create <deployment> <json-file>400 Bad Request on monitor create/update:
name, type, query field, schedule, and notifierIds.operator matches monitor type and threshold logic.scripts/monitor-create <deployment> <json-file>scripts/monitor-update <deployment> <id> <json-file>Monitor created but never alerts:
scripts/monitor-history <deployment> <id> <startTime> <endTime>rangeMinutes.triggerAfterNPositiveResults/triggerFromNRuns.Too many alerts (noisy monitor):
triggerAfterNPositiveResults and/or triggerFromNRuns.intervalMinutes or narrow match conditions.Notifier exists but no delivery:
scripts/notifier-get <deployment> <id>scripts/notifier-update <deployment> <id> <json-file>testing
Runs metrics queries against Axiom MetricsDB via scripts. Discovers available metrics, tags, and tag values. Use when asked to query metrics, explore metric datasets, check metric values, or investigate OTel metrics data.
development
Analyzes Axiom query patterns to find unused data, then builds dashboards and monitors for cost optimization. Use when asked to reduce Axiom costs, find unused columns or field values, identify data waste, or track ingest spend.
development
Designs and builds Axiom dashboards via API. Covers chart types, APL and metrics/MPL query patterns, SmartFilters, layout, and configuration options. Use when creating dashboards, migrating from Splunk, or configuring chart options.
development
Scaffolds evaluation suites for the Axiom AI SDK. Generates eval files, scorers, flag schemas, and config from natural-language descriptions. Use when creating evals, writing scorers, setting up flag schemas, or configuring axiom.config.ts.