---
title: "Check Now Monitor"
method: POST
path: "/v1/monitors/{monitor_id}/check-now"
tags: ["Monitors"]
---

# Check Now Monitor

`POST /v1/monitors/{monitor_id}/check-now`

## 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}/check-now`
- Auth: API key in header `Authorization`

Run this monitor on the next scheduler tick instead of waiting for its interval.

Repeat requests for the same monitor within 30 seconds return it unchanged.
Across monitors the endpoint is limited per user; over the limit it answers
429 with a `Retry-After` header.

## 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)
