Monitor types

Config fields per monitor type, as the API validates them.

Monitor types

Five monitor types are live: HTTP, TCP, ping, DNS and heartbeat. A sixth, browser, has a config shape declared in the API schema for forward compatibility, but no prober module executes it and no browser monitor can run a check today, so it is not documented here.

type is set once at creation and cannot be changed afterward. config is a JSON object whose shape depends on type. The API rejects an unknown field for the type you picked with a 422.

Each of the sections below was created against a real cluster during this page's review (POST /api/v1/me/monitors, one call per type) and reached up within one probe cycle.

HTTP

{
  "name": "Production API",
  "type": "http",
  "url": "https://example.com/health",
  "interval_seconds": 300,
  "config": {
    "method": "GET",
    "timeout_ms": 30000,
    "expected_status": [200, 201],
    "expected_body": null,
    "headers": { "Authorization": "Bearer ..." },
    "body": null,
    "follow_redirects": true,
    "verify_ssl": true
  }
}

url must start with http:// or https://. expected_status defaults to treating any 2xx as success when omitted.

TCP

{
  "name": "Postgres port",
  "type": "tcp",
  "url": "db.example.com:5432",
  "interval_seconds": 300,
  "config": { "timeout_ms": 5000, "port": 5432 }
}

url carries host:port together, split on the last colon so an IPv6 host still works. config.port is accepted but nothing reads it back out. The port that is actually probed is the one in url.

Ping

{
  "name": "Edge node",
  "type": "ping",
  "url": "8.8.8.8",
  "interval_seconds": 300,
  "config": { "timeout_ms": 5000 }
}

url is a bare hostname or IP. No scheme, no port, no path: either one makes creation fail with a validation error.

DNS

{
  "name": "Apex A record",
  "type": "dns",
  "url": "example.com",
  "interval_seconds": 300,
  "config": {
    "record_type": "A",
    "expected_value": null,
    "nameserver": null
  }
}

url is a bare domain name, the same rule as ping. record_type is one of A, AAAA, CNAME, MX, TXT, NS. Leaving expected_value unset checks resolution only; setting it also checks the resolved value matches.

Heartbeat

Heartbeat monitors take no url and are covered on their own page, since creating one is only half the story: Heartbeat monitors.

SSRF guard on every type but heartbeat

url is checked before it is stored: a hostname that resolves to a private, loopback, link-local or otherwise reserved address is rejected, for every type that takes one. There is no override for this in the current API.

Common fields

FieldNotes
name1-255 chars, unique within the organization
interval_seconds10-3600, floored by your plan (see Monitors)
service_idOptional. Soft-binds the monitor to a service catalog entry, see Binding to services

tags is not a field on monitor creation or update. See Tags for what tag management covers today.

On this page