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-skill

Authentication

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_here

Credentials 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_here

Priority order: --api_key flag > UPTIME_MONITOR_API_KEY env var > stored config file.

Global Options

These options are available on all commands:

FlagDescription
--jsonOutput 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 prompt

HTTPS-Specific Options

These flags apply to create and update for HTTPS monitors:

FlagDescription
--method <METHOD>HTTP method: HEAD, GET, POST, PUT, PATCH, DELETE (default: HEAD)
--check-cert / --no-check-certEnable/disable SSL certificate expiration checks
--no-follow-redirectDisable 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_ID

All 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_ID

Scripting & 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