Monitors

Monitor types, regions and checks, heartbeat monitors, tags, and binding monitors to services.

Monitors

A monitor is an active or passive health check on one target. upzero runs the active types (HTTP, TCP, ping, DNS) from two probe regions on a fixed schedule, and accepts heartbeat monitors as pushes from your own cron jobs or schedulers. Every check that comes back writes a row to the monitor's check history, and the monitor's live status (pending, up, down, paused) updates from it.

No Monitors screen in the console yet

Monitoring is one of the console's eight planned sections, and it has not been built. There is no monitor list, no create form, and no detail page. Today, monitors are created and managed through the API directly, and up0 monitors covers listing and service binding. This page documents that real surface, not the planned one. This section was walked on a local kind cluster rather than staging, because staging's profile runs no monitoring plane, so a monitor created there never gets checked.

The console's Home screen, showing its full left rail: Home, Issues, Alerts, Explore, Services, Dashboards, Objectives, Statistics. There is no Monitors entry.

What is live

TypeLiveConfig
HTTPYesMonitor types
TCPYesMonitor types
PingYesMonitor types
DNSYesMonitor types
HeartbeatYesHeartbeat monitors
BrowserNothe field shape exists in the API schema, but no prober executes it

Creating a monitor

POST /api/v1/me/monitors requires your own signed-in session (a bearer token), not an API key. This is deliberate: an API key can list, pause, resume and delete monitors once they exist, but creating one always takes a real person's session.

curl -X POST https://api.up0.io/api/v1/me/monitors \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production API",
    "type": "http",
    "url": "https://example.com",
    "interval_seconds": 300,
    "config": { "method": "GET", "expected_status": [200] }
  }'

interval_seconds is plan-gated, not a scheduling knob (see Regions and checks for what actually governs check frequency). Creating below your plan's minimum interval fails with 402 INTERVAL_RESTRICTED. The limits below are the plans row each organization is actually seeded with (backend/alembic/versions/0001_squashed_schema.py), not the plan-tier constants defined elsewhere in the codebase but never read by this check:

PlanMinimum intervalMonitor limit
Free300s10
Starter60s50
Pro30s200
Business10s300

Managing a monitor once it exists

Reading, pausing, resuming and deleting a monitor all accept either your own session or an API key scoped monitors:write (monitors:read for reads), created under Settings → API keys:

The API keys settings page after creating a key scoped monitors:read, heartbeats:write and monitors:write. The plaintext key is shown once, with instructions to send it as the X-API-Key header.

curl https://api.up0.io/api/v1/me/monitors/<MONITOR_ID>/pause \
  -H "X-API-Key: up0_live_..." \
  -X POST -d '{}'

On this page