# Monitor uptime

> An uptime monitor requests a URL every 30 seconds to 1 hour. 2xx and 3xx are up; two failed checks in a row are down and alert the team.

An uptime monitor requests one public URL on a fixed interval and alerts the team when it stops answering. It needs no code in your app.

## Requirements

- A project. Every team member can manage its monitors.
- A public `http://` or `https://` URL of at most 2,000 characters, without a username or password. Loopback, private and other non-public addresses are refused.
- At most 100 monitors per project, 100 per team, and 300 over all the teams one owner owns.

## Add a monitor

1. Open the project and go to **Uptime** in the sidebar, or press <kbd>⌘</kbd> <kbd>K</kbd> → **Add uptime monitor**.
2. Under **Add monitor**, enter the **URL**, for example `https://example.com/up`.
3. Optional: a **Name** (default: the host).
4. Pick **Check every**: 30 seconds, 1 minute (the default), 5 minutes, 10 minutes, 30 minutes or 1 hour.
5. Click **Add monitor**.

The first check runs within seconds. Each monitor also checks its [SSL certificate, domain and DNS](/docs/host-checks/).

## Check that it works

The monitor's page shows **Status** (**Pending** until the first check, then **Up** or **Down**), the uptime in the selected range, the average and p95 response time, and the latest 20 checks with their HTTP status, duration and error (**Show all** lists the latest 100).

## How a check decides up or down

| Rule | Value |
|---|---|
| Up | The final response, after redirects, has status 2xx or 3xx. |
| Failed check | Any other status, no response headers within 10 seconds, a DNS, connection or TLS error, or more than 5 redirects. |
| Down | 2 failed checks in a row. |
| Retry | After a first failure, Lampwick checks again within 15 seconds instead of waiting a full interval. |
| Back up | 1 successful check. |
| Method | `GET` |
| User-Agent | `lampwick-uptime/<version>` |

A single dropped request alerts no one; an outage is noticed within one interval plus about 15 seconds.

## Pick the right URL

Monitor a health endpoint, such as Laravel's `/up` route, rather than a heavy page. If a firewall, WAF or bot protection (Cloudflare, for example) blocks automated requests, allow the User-Agent `lampwick-uptime`, or every check fails with `HTTP 403`.

## Change, pause or delete a monitor

On the monitor's page:

- **Settings → Monitor**: change the URL, name or interval. A new URL starts over: status **Pending**, checked at once.
- **Alerts → Mute alerts for everyone**: the checks keep running, but no one gets [alerts](/docs/alerts/) for this monitor.
- **Danger zone → Pause checks**: no checks, host checks or crawl. **Resume checks** starts over like a new URL.
- **Danger zone → Delete monitor**: deletes the monitor and its check history.

Check history follows the retention of your other records.

## API

| Operation | What it does |
|---|---|
| `listMonitors` | Monitors with uptime, response times and latest checks. |
| `createMonitor` | Body: `url`, `name`, `interval_secs` (30 to 3600, any value). |
| `getMonitor` | One monitor with its checks, DNS changes and charts. |
| `updateMonitor` | `url`, `name`, `interval_secs`, `paused`, `notify`, and the host check switches. |
| `deleteMonitor` | Deletes the monitor and its checks. |

Tokens and conventions: [API](/docs/api/).

## Troubleshooting

| What you see | Cause and fix |
|---|---|
| `HTTP 403 Forbidden` on every check, while the site works in your browser | A WAF or bot protection blocks the check. Allow the User-Agent `lampwick-uptime`, or monitor a health endpoint that it doesn't filter. |
| `timed out after 10 s` | The server took longer than 10 seconds to send response headers. Monitor a lighter endpoint, or find what makes it slow. |
| `connection failed: …` | DNS, the connection or TLS failed; the rest of the message says why. An expired or invalid certificate shows here too. |
| `more than 5 redirects` | The URL redirects in a loop or through too many hops. Monitor the final URL. |
| `address is not public` | The URL points to a private or loopback address. Lampwick only checks public addresses. |
| `this team already has the maximum of 100 uptime monitors` | Delete monitors you no longer need, in any project of the team. |

To show your monitors to customers, [create a status page](/docs/status-pages/).
