---
title: "Precheck Monitor Target"
method: POST
path: "/v1/monitors/precheck"
tags: ["Monitors"]
---

# Precheck Monitor Target

`POST /v1/monitors/precheck`

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

Probe a target once before creating a monitor to flag if it looks down.

## Headers

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

## Request body

- MonitorPrecheckRequest: Request body for ``POST /v1/monitors/precheck``. The pre-check probes a target once before a monitor is created. The same type-aware normalization (and SSRF / non-global reject) as monitor creation runs here, so a target the API would reject on create fails fast with 422 rather than being dispatched to the worker fleet.
  - `type` 'HTTP' | 'PING' | 'SSL' | 'TCP' | 'DNS', required: Type of probe a worker must run for a :class:`CheckJob`.
  - `target` string, required
  - `config` object

## Response `200`

Successful Response

- MonitorPrecheckResponse: Advisory result of a pre-check, returned to the create-monitor form. ``status`` is ``up``/``down``/``error`` from the probing region, or ``unknown`` when the core could not get a definite answer (no worker, timeout, kill switch) — the form treats ``unknown`` as "proceed without a warning". ``region`` names the single probing region so the UI can say "seems down from <region>".
  - `status` 'up' | 'down' | 'error' | 'unknown', required: Advisory outcome of a У2 pre-check, returned to the create-monitor form. ``UP``/``DOWN``/``ERROR`` map from the worker's ``CheckResultStatus``; ``UNKNOWN`` is the fail-open value used whenever the core cannot get a definite reply (no worker in the region, request timeout, malformed reply, or the pre-check kill switch). Only ``DOWN``/``ERROR`` should gate the form with a modal; ``UP``/``UNKNOWN`` proceed to create directly.
  - `region` string, required
  - `response_time_ms` integer, nullable
  - `status_code` integer, nullable
  - `error` string, nullable
  - `failure_kind` 'TIMEOUT' | 'DNS_FAILURE' | 'CONNECTION_REFUSED' | 'TLS_INVALID' | 'HTTP_4XX' | 'HTTP_5XX' | 'HTTP_UNEXPECTED_STATUS' | 'KEYWORD_MISSING' | 'TOO_MANY_REDIRECTS' | 'TARGET_BLOCKED' | 'PORT_STATE_MISMATCH' | 'INVALID_TARGET' | 'UNKNOWN': Structured classification of why a probe reported a non-UP result. Set by the worker on DOWN/ERROR outcomes so the core can store a typed incident cause (icons, grouping, filtering) while ``CheckResult.error`` / the incident's ``cause_detail`` carry the raw human-readable reason. Absent on UP results.

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