API reference
Every endpoint, parameter, and schema. Generated from the API's OpenAPI document, so it always matches the deployed backend.
19 endpoints across 4 groups, from Upcheck API v1.0.0. Authenticate with a project API key as described in the REST API guide.
https://upcheck-api-a.rekwiem.comMonitors
/v1/monitorsList the caller's monitors
Responses
200OK401Missing/invalid tokenError422Validation errorError
/v1/monitorsCreate a monitor
Request body · MonitorInput
| Field | Type | Description |
|---|---|---|
url | string | Required for `http` and `scheduler` monitors; omit for `heartbeat`. |
name | string | Default: "Untitled" |
type | string | Check type. `http` (we poll a URL to check it's up), `heartbeat` (your job pings us), or `scheduler` (we call your URL on a schedule as a trigger — 2xx = success). Other types (dns, port, ...) are planned.httpheartbeatschedulerDefault: "http" |
method | string | HEAD is forced to GET when content rules are set. Schedulers reject HEAD/OPTIONS (a trigger must act) and default to POST.HEADGETPOSTPUTPATCHDELETEOPTIONSDefault: "HEAD" |
interval_sec | integer | Floored to the plan minimum (free 300, pro 60). For heartbeat, the expected max gap between pings. |
grace_sec | integer | Heartbeat only: extra seconds after interval_sec before 'down' (default 60). |
slow_ms | integer | Latency ≥ this ⇒ 'slow'.Default: 1500 |
timeout_ms | integer | Clamped to 1000–60000.Default: 10000 |
expect_status | integer | null | Exact code required; null/0 ⇒ any 2xx/3xx. |
follow_redirects | boolean | Follow 3xx redirects and judge the final response. Off (default) treats a 3xx as reachable. Turning it on forces the fetch path (no connect/ttfb split). |
check_ssl | boolean | https only: report a certificate/TLS failure as a distinct SSL problem instead of a generic connection error. Off by default. |
check_domain | boolean | Look up the domain's registration expiry via RDAP and warn before it lapses. Off by default. |
content_rules | ContentRule[] | |
request_headers | HeaderInput[] | |
request_body | string | Request body for write methods (POST/PUT/PATCH/DELETE) — rejected with GET/HEAD. Sent with EVERY scheduled check, so point writes at test data or a dedicated test route. application/json unless a Content-Type header is set. |
fail_threshold | integer | Consecutive fails before 'down'.Default: 3 |
recover_threshold | integer | Default: 1 |
project_id | string | Group under a project (id from /v1/projects). |
Responses
201CreatedMonitor401Missing/invalid tokenError403Monitor limit reachedError422Validation errorError
/v1/monitors/testRun one check against a draft config (nothing saved)
Request body · MonitorInput
| Field | Type | Description |
|---|---|---|
url | string | Required for `http` and `scheduler` monitors; omit for `heartbeat`. |
name | string | Default: "Untitled" |
type | string | Check type. `http` (we poll a URL to check it's up), `heartbeat` (your job pings us), or `scheduler` (we call your URL on a schedule as a trigger — 2xx = success). Other types (dns, port, ...) are planned.httpheartbeatschedulerDefault: "http" |
method | string | HEAD is forced to GET when content rules are set. Schedulers reject HEAD/OPTIONS (a trigger must act) and default to POST.HEADGETPOSTPUTPATCHDELETEOPTIONSDefault: "HEAD" |
interval_sec | integer | Floored to the plan minimum (free 300, pro 60). For heartbeat, the expected max gap between pings. |
grace_sec | integer | Heartbeat only: extra seconds after interval_sec before 'down' (default 60). |
slow_ms | integer | Latency ≥ this ⇒ 'slow'.Default: 1500 |
timeout_ms | integer | Clamped to 1000–60000.Default: 10000 |
expect_status | integer | null | Exact code required; null/0 ⇒ any 2xx/3xx. |
follow_redirects | boolean | Follow 3xx redirects and judge the final response. Off (default) treats a 3xx as reachable. Turning it on forces the fetch path (no connect/ttfb split). |
check_ssl | boolean | https only: report a certificate/TLS failure as a distinct SSL problem instead of a generic connection error. Off by default. |
check_domain | boolean | Look up the domain's registration expiry via RDAP and warn before it lapses. Off by default. |
content_rules | ContentRule[] | |
request_headers | HeaderInput[] | |
request_body | string | Request body for write methods (POST/PUT/PATCH/DELETE) — rejected with GET/HEAD. Sent with EVERY scheduled check, so point writes at test data or a dedicated test route. application/json unless a Content-Type header is set. |
fail_threshold | integer | Consecutive fails before 'down'.Default: 3 |
recover_threshold | integer | Default: 1 |
project_id | string | Group under a project (id from /v1/projects). |
Responses
200Check resultCheckResult401Missing/invalid tokenError422Validation errorError
/v1/monitors/{id}Update a monitor (partial)
Parameters
idpath · required
Request body · MonitorPatch
| Field | Type | Description |
|---|---|---|
url | string | Required for `http` and `scheduler` monitors; omit for `heartbeat`. |
name | string | Default: "Untitled" |
type | string | Check type. `http` (we poll a URL to check it's up), `heartbeat` (your job pings us), or `scheduler` (we call your URL on a schedule as a trigger — 2xx = success). Other types (dns, port, ...) are planned.httpheartbeatschedulerDefault: "http" |
method | string | HEAD is forced to GET when content rules are set. Schedulers reject HEAD/OPTIONS (a trigger must act) and default to POST.HEADGETPOSTPUTPATCHDELETEOPTIONSDefault: "HEAD" |
interval_sec | integer | Floored to the plan minimum (free 300, pro 60). For heartbeat, the expected max gap between pings. |
grace_sec | integer | Heartbeat only: extra seconds after interval_sec before 'down' (default 60). |
slow_ms | integer | Latency ≥ this ⇒ 'slow'.Default: 1500 |
timeout_ms | integer | Clamped to 1000–60000.Default: 10000 |
expect_status | integer | null | Exact code required; null/0 ⇒ any 2xx/3xx. |
follow_redirects | boolean | Follow 3xx redirects and judge the final response. Off (default) treats a 3xx as reachable. Turning it on forces the fetch path (no connect/ttfb split). |
check_ssl | boolean | https only: report a certificate/TLS failure as a distinct SSL problem instead of a generic connection error. Off by default. |
check_domain | boolean | Look up the domain's registration expiry via RDAP and warn before it lapses. Off by default. |
content_rules | ContentRule[] | |
request_headers | HeaderInput[] | |
request_body | string | Request body for write methods (POST/PUT/PATCH/DELETE) — rejected with GET/HEAD. Sent with EVERY scheduled check, so point writes at test data or a dedicated test route. application/json unless a Content-Type header is set. |
fail_threshold | integer | Consecutive fails before 'down'.Default: 3 |
recover_threshold | integer | Default: 1 |
project_id | string | Group under a project (id from /v1/projects). |
enabled | boolean | false = pause the monitor. |
Responses
200UpdatedMonitor401Missing/invalid tokenError404Not foundError422Validation errorError
/v1/monitors/{id}Delete a monitor
Parameters
idpath · required
Responses
200Deleted401Missing/invalid tokenError404Not foundError422Validation errorError
/v1/monitors/{id}/muteMute a monitor for N minutes (maintenance window; 0 clears)
Parameters
idpath · required
Request body
| Field | Type | Description |
|---|---|---|
minutesreq | integer | Minutes to suppress down-detection + alerts; 0 clears, capped at 7 days. |
Responses
200UpdatedMonitor401Missing/invalid tokenError404Not foundError422Validation errorError
/v1/heartbeats/{id}/pingNo authHeartbeat check-in — call from your job (public; GET also works)
Parameters
idpath · required
Responses
200Ping recorded404Not a heartbeat / not foundError
Tokens
/v1/tokensList personal access tokens
Responses
200OK401Missing/invalid tokenError422Validation errorError
/v1/tokensCreate a project-scoped token (session auth only)
Request body
| Field | Type | Description |
|---|---|---|
project_idreq | string | Project to scope the token to (id from /v1/projects). Required — every PAT is confined to one project. You must be its owner, admin, or member. |
namereq | string | Label for the token. |
ttl_seconds | number | Optional expiry (60–7776000s). Omit for a non-expiring token. |
Responses
201Created — plaintext returned onceTokenCreated400Missing project_id / not permitted on itError401Missing/invalid tokenError403Requires a session token, not a PATError422Validation errorError
/v1/tokens/{id}Revoke a token
Parameters
idpath · required
Responses
200Revoked401Missing/invalid tokenError404Not foundError422Validation errorError
Projects
/v1/projectsList projects with per-project status
Responses
200OK401Missing/invalid tokenError422Validation errorError
/v1/projectsCreate a project
Request body
| Field | Type | Description |
|---|---|---|
namereq | string |
Responses
201CreatedProject401Missing/invalid tokenError422Validation errorError
/v1/projects/{id}Rename a project
Parameters
idpath · required
Request body
| Field | Type | Description |
|---|---|---|
namereq | string |
Responses
200Renamed401Missing/invalid tokenError404Not foundError422Validation errorError
/v1/projects/{id}Delete a project (its monitors are detached, not deleted)
Parameters
idpath · required
Responses
200Deleted401Missing/invalid tokenError404Not foundError422Validation errorError
Connectors
/v1/connectors/{provider}/oauth/startBegin the OAuth connect flow
Parameters
providerpath · required
Responses
200Open this URL to authorize401Missing/invalid tokenError422Validation errorError503Provider not configuredError
/v1/connectorsList connected providers
Responses
200OK401Missing/invalid tokenError422Validation errorError
/v1/connectors/{provider}/projectsList a provider's projects (with import status)
Parameters
providerpath · required
Responses
200OK401Missing/invalid tokenError404Not connectedError422Validation errorError
/v1/connectors/{provider}/importImport selected projects as monitors
Parameters
providerpath · required
Request body
| Field | Type | Description |
|---|---|---|
external_refsreq | string[] | |
project_id | string | Import the monitors into this project. |
Responses
200Import resultImportResult401Missing/invalid tokenError422Validation errorError
/v1/connectors/{provider}Disconnect a provider
Parameters
providerpath · required
Responses
200Disconnected401Missing/invalid tokenError404Not connectedError422Validation errorError
Prefer the raw document? It's served straight from the API at /openapi.json.