---
title: "Get Monitor"
method: GET
path: "/v1/monitors/{monitor_id}"
tags: ["Monitors"]
---

# Get Monitor

`GET /v1/monitors/{monitor_id}`

## Request

- Base URL: `https://api.fettle.sh` (the document declares no server; this is the origin it was published from)
- URL: `https://api.fettle.sh/v1/monitors/{monitor_id}`
- Auth: API key in header `Authorization`

Return a single monitor by id.

## Path parameters

- `monitor_id` string, uuid, required

## Headers

- `X-Organization-Id` string, uuid, nullable

## Response `200`

Successful Response

- MonitorRead: Response model for monitor reads and creates.
  - `id` string, uuid, required
  - `user_id` string, uuid, required
  - `name` string, required
  - `type` 'HTTP' | 'PING' | 'SSL' | 'TCP' | 'DNS', required: Type of probe a worker must run for a :class:`CheckJob`.
  - `target` string, required
  - `interval_seconds` integer, required
  - `timeout_seconds` integer, required
  - `regions` string[], required
  - `config` object, required
  - `status` 'PENDING' | 'UP' | 'DEGRADED' | 'DOWN' | 'PAUSED', required: Aggregated state of a monitor as derived by the results state machine.
  - `last_checked_at` string, date-time, nullable, required
  - `next_run_at` string, date-time, nullable, required
  - `confirmation_threshold` integer, required
  - `notification_cooldown_seconds` integer, required
  - `ssl_expires_at` string, date-time, nullable, required
  - `ssl_cert_info` SslCertInfo: Latest TLS certificate snapshot for an SSL monitor (У8). Promoted from an SSL probe's ``CheckResult.details`` onto the monitor row so the card/detail render "what cert, valid until, issued by/when" without a per-check query. All fields are nullable — a partial worker blob or a not-yet-probed monitor leaves them ``None``. ``not_before`` / ``not_after`` are kept as the raw RFC3339 strings the worker reported (display echo). The canonical, typed expiry is the monitor's top-level ``ssl_expires_at``; "expires in N days" is recomputed client-side from it, never the worker's stale ``days_left``.
    - `issuer` string, nullable
    - `subject` string, nullable
    - `not_before` string, nullable
    - `not_after` string, nullable
    - `valid` boolean, nullable
  - `is_active` boolean, required
  - `badge_enabled` boolean
  - `tags` string[]
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `channel_ids` string[]
  - `region_statuses` RegionStatusRead[], required: Per-region latest status, sorted by region name. Built from ``region_snapshots``; ``job_id`` is dropped (internal dedup key) and malformed/partial snapshot rows are skipped rather than failing the read.
    - `region` string, required
    - `status` 'UP' | 'DEGRADED' | 'DOWN' | 'ERROR', required: Outcome of a single probe execution reported in a :class:`CheckResult`. ``DEGRADED`` means the resource responded / is working but in a degraded state (e.g. partial ping packet loss, a TLS cert expiring soon). It counts as up for uptime — it never penalises uptime% and never opens an incident — but is tracked separately so the UI can render it distinctly.
    - `checked_at` string, date-time, required
    - `display_name` string, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/fettle/apis/fettle-sh.md) · [All operations](https://skmtc.dev/fettle/apis/fettle-sh/llms.txt) · [OpenAPI document](https://skmtc.dev/fettle/apis/fettle-sh/revisions/f32c8a18606f?raw)
