# Monitor types

HostTracker checks different things in different ways, so each kind of check is its own **monitor type**. The
type is chosen when you create a monitor and cannot be changed afterwards. Not sure which one you need? See
[Choosing a monitor type](/monitors/types/choosing/).

## The catalogue

| Type (app label) | API `type` | What it checks | Runs from | App default interval | Plan feature |
|---|---|---|---|---|---|
| [Website / HTTPS](/monitors/types/http/) (**Fast Check Https**) | `http` | Downloads the page like a visitor; status, keywords, [assertions](/monitors/advanced/assertions/), TLS policy | Your locations (main fleet) | 3 min | No separate gate |
| [API](/monitors/types/api/) (**API monitoring/text analysis**) | `api` | An HTTP request plus parsing of the JSON, XML or text response and a check on a selected value | Your locations (main fleet) | 3 min | Yes |
| [Ping](/monitors/types/ping/) (**Ping check**) | `ping` | ICMP reachability of a host or IP | Your locations (ICMP-capable checkpoints) | 3 min | No separate gate |
| [Port](/monitors/types/port/) (**TCP Port check**) | `port` | A TCP connection to `host:port`, optionally TLS and a banner match | Your locations (main fleet) | 3 min | No separate gate |
| [Page speed](/monitors/types/page-speed/) (**Page speed**) | `waterfall` (alias `pageSpeed`) | Full page load in a real browser with budgets per resource type | Your locations (browser fleet) | 15 min (min 10) | Yes |
| [Transaction](/monitors/types/transaction/) (**Transaction check**) | `tran` | A scripted multi-step browser scenario | Your locations (browser fleet) | 10 min | Yes |
| [Content check](/monitors/types/content-check/) (**Web content check**) | `cntCheck` | Keywords in the rendered page, including JavaScript content | Your locations (browser fleet) | 10 min | Yes |
| [Database](/monitors/types/database/) (**Database check**) | `database` | Connects to a database, optionally runs a query and compares the result | HostTracker's internal network | 10 min (min 10) | Yes |
| [SNMP](/monitors/types/snmp/) (**SNMP check**) | `snmp` | Reads an OID from network equipment | HostTracker's internal network | 5 min | Yes |
| [Counter](/monitors/types/counter/) (**Monitor CPU, RAM, HDD**) | `counter` | A metric reported by a probe on your server | HostTracker's internal network | 3 min | Yes |
| [SSL/TLS certificate expiry](/monitors/types/ssl-expiry/) (**Certificate expiration**) | `sslExp` | The certificate served by an endpoint, before it expires | Main fleet, chosen automatically | Fixed 6 h | Yes |
| [Domain expiry](/monitors/types/domain-expiry/) (**Domain expiration**) | `domainExp` | Domain registration expiry (whois/RDAP) | HostTracker's internal network | Fixed 6 h | Yes |
| [DNSBL / blacklist](/monitors/types/dnsbl/) (**DNSBL check**) | `dnsbl` | Listing of a domain or IP on DNS blacklists | HostTracker's internal network | Fixed 6 h | Yes |
| [Web Risk](/monitors/types/web-risk/) (**Web risk**) | `webRisk` | Google's lists of phishing, malware and deceptive sites | HostTracker's internal network | Fixed 12 h | Yes |
| Site crawl (**Site crawl**) | `crawl` (alias `siteCrawl`) | Walks the whole site and reports what changed since the last run | One location you choose | Cron, weekly | Only on accounts where it is enabled |

"Yes" in the last column means the type is a separately sold plan feature: a plan can leave it out, cap how many monitors of that
type you may have, or set its own minimum interval for it. Creating a type your plan does not include is refused
with `403 package_limit`. The **Russian BL check** in the app is a Website/HTTPS monitor built from the preset
`bl:ru` (`"type": "http"`, `"settings": { "preset": "bl:ru" }`), not a separate type.

**DNS lookup** and **Traceroute** are [instant check](/getting-started/instant-checks-vs-monitors/) tools, not
monitor types - see [DNS](/monitors/types/dns/) and [Traceroute](/monitors/types/trace/).

:::tip[Watch several things with one monitor]
SSL expiry, domain expiry, DNSBL and Web Risk can also run as **attached sub-checks** of a Website monitor instead
of a monitor of their own (DNSBL can also attach to Ping and Port monitors) - see
[Attaching sub-checks to a monitor](/monitors/types/attached-sub-checks/).
:::

## Pick a type in the app

1. On **Sites**, click **Add Monitor**.
2. Pick the type card (each shows a one-line description).
3. The form for that type opens; enter the address and adjust the settings groups, then **Save**.

To change a monitor's type later, create a new monitor of the other type (or [copy](/monitors/copying/) settings
you can reuse) and delete the old one.

## Read the catalogue with the API or MCP

`GET /monitor/type` needs no token; with a token each row also carries your account's limits:

```bash
curl https://api2.host-tracker.com/monitor/type -H "Authorization: Bearer $HT_TOKEN"
```

| Field | Meaning |
|---|---|
| `type`, `label` | The API token and the app label |
| `minInterval` | The type's own minimum interval, seconds |
| `fixedInterval` | Present for the fixed-cadence types (`sslExp`, `domainExp`, `dnsbl`: 21600; `webRisk`: 43200) |
| `requiresPool` | `true` when a create must include `locations.pools` |
| `entitlement` | The plan feature that gates the type, or `null` |
| `attachable`, `attachableTo` | Whether the type can ride on another monitor, and on which types |
| `presets` | Server-built settings presets (`http` and `api`: `["bl:ru"]`) |
| `accountLimits.minInterval` | With a token: your effective minimum for this type (type floor or plan floor, whichever is larger) |
| `accountLimits.available` | With a token: `false` when your plan does not include the type |

- `GET /monitor/type/{type}` returns one row plus the full JSON schema of its `settings`; `GET /monitor/type/schema`
  returns one combined schema for all types. Use them to build a valid create body.
- MCP: **`list_monitor_types`** (label, minimum interval, whether your plan can create it); **`api_request`** for
  the per-type schema.

## Limits and gotchas

- `type` is fixed after creation: a `PATCH` that changes it answers `422 type_immutable`.
- The old `rusRegBL` type is discontinued; creating it answers `422 monitor_type_discontinued` and names the
  replacement (`http` with preset `bl:ru`).
- An unknown type token answers `422 unknown_enum_value` with the list of valid tokens.

## Related

- [Choosing a monitor type](/monitors/types/choosing/)
- [What a monitor is](/monitors/what-a-monitor-is/)
- [Check intervals](/monitors/intervals/)
- [Attaching sub-checks to a monitor](/monitors/types/attached-sub-checks/)
