# Pause, enable and delete a monitor

Besides editing its settings, a monitor has four lifecycle actions: **pause** (stop checking, keep everything),
**enable** (resume), **reset statistics** (start the uptime history over) and **delete** (remove it for good).

## Settings reference

| Setting (app label) | API field (v2) | Type / allowed values | Default | Plan limits | What it does for you |
|---|---|---|---|---|---|
| **Monitoring enabled** (create form), **Enabled** / **Paused** (edit panel header) | `enabled` | `true` / `false` | `true` | Enabling counts against your plan's monitor limit; paused monitors do not | `false` pauses: no checks and no alerts until you enable it again. |
| - | `state` (read-only) | `up`, `down`, `maintenance`, `paused` | - | - | Reads `paused` both for monitors you paused and for monitors switched off by your plan's limit. |

## Pause a monitor

Use pause for planned work you do not want to set up a [maintenance window](/maintenance/overview/) for, or for a
site you are not watching right now.

1. On **Sites**, open the monitor's row menu and choose **Disable** (or switch the **Enabled** toggle in the
   monitor's edit panel).
2. Confirm **Pause "..."?** - "Checks and alerts stop until you enable it again. History is kept."

Many at once: select them and click **Disable** in the bulk bar, or **Edit** -> **Monitoring state** -> **Paused**
(see [Bulk operations](/monitors/bulk-operations/)).

While a monitor is paused:

- no checks run and no alerts are sent;
- its state reads **paused**;
- its settings, subscriptions, results and incidents are kept; the paused period appears as a gap in its
  history (`disabledSpans` in `expand=spans`), not as downtime;
- it does not count toward your plan's limit of active monitors.

## Enable (resume) a monitor

1. On **Sites**, open the row menu and choose **Enable** (or switch the edit panel's toggle to **Enabled**).
2. The monitor is picked up by the scheduler within about a minute and continues on its normal schedule.

If enabling would take you over your plan's monitor limit, it is refused and the monitor stays paused ("Failed to
enable monitor"). Pause or delete another monitor, or upgrade, and try again.

**Over-limit monitors.** When your plan's limit is lower than the number of enabled monitors (for example after a
downgrade), some monitors are switched off automatically. They keep `enabled: true` but read `state: "paused"` and
show **Over limit** on the dashboard ("This monitor is over your package limits and isn't being monitored.
Upgrade your package or free up capacity to re-enable it.").

## Reset statistics

Clears a monitor's computed uptime and state history and starts fresh; the monitor keeps running. In the row
menu choose **Reset Stats** and confirm ("This deletes the computed uptime and state history. Monitoring continues
and starts with fresh statistics."). For many monitors use **Reset Stats** in the bulk bar.

## Delete a monitor

1. On **Sites**, open the row menu and choose **Delete** (or select several and click **Delete** in the bulk bar).
2. Confirm **Delete "..."?** - "This permanently deletes the monitor and its history. It cannot be undone."

Deleting removes the monitor and its history, its alert and report subscriptions, its place in maintenance
windows, and the results of its attached sub-checks. None of it can be read from the app or the API afterwards.

:::caution[Deletion is permanent]
There is no undo and no recycle bin. If you might want the history later, pause the monitor instead.
:::

## Do it with the API or MCP

```bash
# Pause (scope monitor:write)
curl -X PATCH "https://api2.host-tracker.com/monitor/$MONITOR_ID" \
  -H "Authorization: Bearer $HT_TOKEN" -H "Content-Type: application/json" \
  -d '{ "enabled": false }'

# Resume; "onOverlimit": "disable" applies the rest of the patch but leaves the monitor off
# (instead of refusing) when your plan has no room
curl -X PATCH "https://api2.host-tracker.com/monitor/$MONITOR_ID" \
  -H "Authorization: Bearer $HT_TOKEN" -H "Content-Type: application/json" \
  -d '{ "enabled": true }'

# Reset statistics (asynchronous job; Idempotency-Key required)
curl -X POST "https://api2.host-tracker.com/monitor/$MONITOR_ID/reset-stats" \
  -H "Authorization: Bearer $HT_TOKEN" -H "Idempotency-Key: reset-$MONITOR_ID-1"

# Delete - answers with a receipt of what was removed with it
curl -X DELETE "https://api2.host-tracker.com/monitor/$MONITOR_ID" -H "Authorization: Bearer $HT_TOKEN"
# { "id": "...", "deleted": true, "type": "http", "name": "Shop", "url": "https://shop.example.com/",
#   "cascaded": { "alertSubscriptions": 2, "reportSubscriptions": 1, "maintenanceSubscriptions": 0 } }
```

- Many monitors: `POST /monitor/bulk-update` with `{ "patch": { "enabled": false } }`, `{ "operation": "resetStats" }`,
  or `POST /monitor/bulk-delete` - see [Bulk operations](/monitors/bulk-operations/).
- MCP: **`pause_monitor`** and **`resume_monitor`** (`id`), **`delete_monitor`** (call once to see the monitor,
  then again with `confirmed=true`), **`bulk_update_monitors`** (`operation=resetStats` or `patchJson`
  `{"enabled":false}`), **`bulk_delete_monitors`**.
- To follow these changes from another system, subscribe a [webhook](/integrations/webhooks/) to
  `monitor.updated` (a pause or resume arrives as one) and `monitor.deleted`.

## Limits and gotchas

- Resuming over your plan's limit answers `403 package_limit` unless you send `"onOverlimit": "disable"`.
- A paused monitor still counts toward the total number of monitors an account may hold (your plan's limit plus
  5000, running and paused together); only deleting frees that room.
- `DELETE` of a monitor that does not exist, or belongs to another account, answers `404 not_found`.
- A manual pause does not move the monitor's `updated` timestamp, so `GET /monitor?updatedSince=` does not report
  it; use the `monitor.updated` webhook.

## Related

- [Bulk operations](/monitors/bulk-operations/)
- [Copy an existing monitor](/monitors/copying/)
- [Maintenance windows](/maintenance/overview/)
