CLI Tool
Manage monitors, contacts, incidents, and status pages from your terminal.
Installation
Install the pre-built binary for your platform (Linux and macOS, x86_64 and ARM64). Add --with-claude-skill to also install the Claude Code skill for AI-assisted monitoring:
curl -sSfL https://cli.uptime-monitor.io/install.sh | sh [-s -- --with-claude-skill]The CLI installs to /usr/local/bin/. The skill installs to ~/.claude/skills/uptime-monitor-cli/ and lets Claude Code manage monitors, contacts, status pages, and incidents through natural language.
If the CLI is already installed, you can add the skill separately:
uptime-monitor setup-skillAuthentication
Generate an API key from your Account Settings, then authenticate:
# Interactive — opens browser to settings page, then prompts for key
uptime-monitor auth
# Non-interactive
uptime-monitor auth --api_key um_your_api_key_hereCredentials are stored in ~/.uptime-monitor/config.json (file permissions 0600). You can also use the environment variable:
export UPTIME_MONITOR_API_KEY=um_your_api_key_herePriority order: --api_key flag > UPTIME_MONITOR_API_KEY env var > stored config file.
Global Options
These options are available on all commands:
| Flag | Description |
|---|---|
--json | Output raw JSON instead of formatted tables |
--api-key <KEY> | Override stored API key for this command |
--api-url <URL> | Override API URL (default: https://uptime-monitor.io) |
Monitors
# List all monitors
uptime-monitor monitors list
# Filter by status or name
uptime-monitor monitors list --status up
uptime-monitor monitors list --search "Production"
# Account summary (up/down/paused counts)
uptime-monitor monitors status
# Get details for a specific monitor
uptime-monitor monitors get MONITOR_ID
# Create an HTTPS monitor
uptime-monitor monitors create \
--name "Production API" \
--url "https://api.example.com/health" \
--regions us-east-1,eu-west-1,ap-northeast-1 \
--interval 60 \
--timeout 10 \
--fail-threshold 2 \
--check-cert \
--contacts CONTACT_ID_1,CONTACT_ID_2
# Create a TCP monitor
uptime-monitor monitors create \
--name "PostgreSQL" \
--url "tcp://db.example.com:5432" \
--type tcp \
--regions us-east-1 \
--interval 120
# Create a Ping monitor
uptime-monitor monitors create \
--name "Gateway" \
--url "ping://10.0.0.1" \
--type ping \
--regions us-east-1
# Update a monitor
uptime-monitor monitors update MONITOR_ID \
--name "Updated Name" \
--interval 30 \
--regions us-east-1,us-west-1
# Pause / resume
uptime-monitor monitors pause MONITOR_ID
uptime-monitor monitors resume MONITOR_ID
# Delete (prompts for confirmation)
uptime-monitor monitors delete MONITOR_ID
uptime-monitor monitors delete MONITOR_ID --yes # skip promptHTTPS-Specific Options
These flags apply to create and update for HTTPS monitors:
| Flag | Description |
|---|---|
--method <METHOD> | HTTP method: HEAD, GET, POST, PUT, PATCH, DELETE (default: HEAD) |
--check-cert / --no-check-cert | Enable/disable SSL certificate expiration checks |
--no-follow-redirect | Disable following HTTP redirects |
--request-header "Name: Value" | Add request header (repeatable) |
--request-body <BODY> | Request body for POST/PUT/PATCH |
--response-body <TEXT> | Expected substring in response body |
--expected-statuses <CODES> | Expected status codes (e.g., "200,201-204") |
Contacts
# List all contacts
uptime-monitor contacts list
# Filter by channel type
uptime-monitor contacts list --channel slack
# Get contact details
uptime-monitor contacts get CONTACT_ID
# Create contacts (each channel type has specific flags)
uptime-monitor contacts create email --name "Alerts" --email [email protected]
uptime-monitor contacts create webhook --name "Hook" --url https://example.com/webhook
uptime-monitor contacts create slack --name "#alerts" --webhook-url https://hooks.slack.com/services/...
uptime-monitor contacts create discord --name "#monitoring" --webhook-url https://discord.com/api/webhooks/...
uptime-monitor contacts create ms-teams --name "Ops Channel" --webhook-url https://...
# PagerDuty with options
uptime-monitor contacts create pagerduty \
--name "On-Call" \
--integration-key R01234567890123456789012345678901
# Opsgenie with EU instance and priority
uptime-monitor contacts create opsgenie \
--name "Opsgenie" \
--opsgenie-api-key xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--priority P2 \
--eu
# Zendesk
uptime-monitor contacts create zendesk \
--name "Support Tickets" \
--subdomain company \
--email [email protected] \
--api-token xxxxx
# incident.io
uptime-monitor contacts create incidentio \
--name "Incident.io" \
--webhook-url https://api.incident.io/webhooks/... \
--bearer-token inc_xxxxx
# Update a contact
uptime-monitor contacts update CONTACT_ID --name "New Name"
# Test a contact (sends test notification)
uptime-monitor contacts test CONTACT_ID
# Reactivate a deactivated contact
uptime-monitor contacts reactivate CONTACT_ID
# Delete
uptime-monitor contacts delete CONTACT_IDAll create commands accept --down-alerts-only to only receive notifications when monitors go down (skip recovery alerts).
Incidents
# List recent incidents
uptime-monitor incidents list
# Filter by monitor or status
uptime-monitor incidents list --monitor-id MONITOR_ID
uptime-monitor incidents list --unresolved
uptime-monitor incidents list --resolved --limit 10
# Get incident details (includes per-region check results)
uptime-monitor incidents get INCIDENT_ID
# Add or update a comment
uptime-monitor incidents comment INCIDENT_ID \
--comment "Root cause: memory leak in worker process"Status Pages
# List status pages
uptime-monitor status-pages list
# Get details
uptime-monitor status-pages get STATUS_PAGE_ID
# Create a status page
uptime-monitor status-pages create \
--name "Service Status" \
--monitors MONITOR_ID_1,MONITOR_ID_2 \
--period 30 \
--show-incident-reasons
# With custom domain and basic auth
uptime-monitor status-pages create \
--name "Internal Status" \
--monitors MONITOR_ID_1 \
--custom-domain status.example.com \
--basic-auth "viewer:secretpass"
# Update
uptime-monitor status-pages update STATUS_PAGE_ID \
--monitors MONITOR_ID_1,MONITOR_ID_2,MONITOR_ID_3 \
--period 90
# Remove basic auth
uptime-monitor status-pages update STATUS_PAGE_ID --remove-basic-auth
# Delete
uptime-monitor status-pages delete STATUS_PAGE_IDScripting & CI/CD
Use --json on any command for machine-readable output, and --yes on delete commands to skip confirmation prompts:
# Get monitor IDs as JSON for scripting
uptime-monitor monitors list --json | jq '.monitors[].id'
# CI/CD: create monitor with env var auth
export UPTIME_MONITOR_API_KEY=um_your_key
uptime-monitor monitors create \
--name "Staging API" \
--url "https://staging.example.com/health" \
--regions us-east-1 \
--interval 300 \
--json
# Cleanup in teardown scripts
uptime-monitor monitors delete MONITOR_ID --yes