---
title: "Get from zero to first monitor in under 3 minutes"
description: "Everything the dashboard does is available over API, MCP, or GitHub Action."
doc_version: "1"
last_updated: "2026-06-02"
---

## Get an API key

Sign in with GitHub, create a key, and label it for your environment.

```bash
Authorization: Bearer umk_live_...
```

1. Go to [app.uptimemonitoring.com](https://app.uptimemonitoring.com)
2. Sign in with GitHub
3. Create an API key and label it (e.g. `ci-prod`, `local-dev`, `mcp`)

---

## Create your first monitor

```bash
curl -X POST https://api.uptimemonitoring.com/api/v1/monitors \
  -H "Authorization: Bearer $UPTIMEMONITORING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"myapp","url":"https://myapp.com/healthz","type":"http"}'
```

The hostname must resolve at creation time — typos and unreachable targets fail immediately. The response wraps the monitor record and its first state snapshot:

```json
{
  "monitor": {
    "id": 1287,
    "name": "myapp",
    "url": "https://myapp.com/healthz",
    "type": "http",
    "interval_sec": 60,
    "expected_status": "200",
    "enabled": true
  },
  "state": {
    "status": "up",
    "last_check_at": "2026-05-07T10:21:01Z",
    "evidence_buffer": [
      { "region": "EU", "status_code": 200, "ttfb_ms": 182 }
    ]
  }
}
```

Capture the ID for the rest of the Quickstart:

```bash
MONITOR_ID=1287
```

---

## Check current status

Capture the monitor ID from the create response, then poll it:

```bash
curl https://api.uptimemonitoring.com/api/v1/monitors/$MONITOR_ID \
  -H "Authorization: Bearer $UPTIMEMONITORING_API_KEY"
```

---

## Add a webhook

Webhooks are scoped to a monitor — set or replace with `PUT`:

```bash
curl -X PUT https://api.uptimemonitoring.com/api/v1/monitors/$MONITOR_ID/webhook \
  -H "Authorization: Bearer $UPTIMEMONITORING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://hooks.example.com/incident"}'
```

The HMAC secret is returned on the initial PUT — store it now. Replacing the URL keeps the existing secret. See [Webhooks](/docs/webhooks/) for signature verification and the account-wide `/api/v1/webhook-deliveries` log.

---

## Connect via MCP

Set up UptimeMonitoring as an MCP server in your preferred tool:

- **Claude** — Add the MCP server in Claude Desktop settings or Claude Code
- **ChatGPT** — Configure via the ChatGPT plugin/MCP settings
- **Cursor** — Add to `.cursor/mcp.json`
- **OpenAI API** — Use the MCP endpoint in your tool configuration

See the [MCP docs](/docs/mcp/) for detailed setup instructions per host.

---

## Use in GitHub Actions

```yaml
- name: Verify deploy health
  uses: uptimemonitoring/assert-healthy@v1
  with:
    api-key: ${{ secrets.UPTIMEMONITORING_API_KEY }}
    monitor-id: ${{ vars.MONITOR_ID }}
    timeout: 120
```

This step waits up to 120 seconds for the monitor to report healthy, then fails the workflow if it doesn't recover. See the [GitHub Action docs](/docs/github-action/) for advanced options.

---

:::tip[Working examples]
Full runnable copies of every snippet on this page — GitHub Actions workflows, MCP setup, webhook relay scripts, and language examples — live at [github.com/uptimemonitoring/examples](https://github.com/uptimemonitoring/examples).
:::