The base URL for every request is https://api.stector.app. Every endpoint below requires a Bearer token — see Authentication — and is subject to the limits and error catalog described in Rate limits & errors.
GET /api/v1/monitors
Returns every monitor on your team.
Response: Returns a list of monitors.
Example
curl https://api.stector.app/api/v1/monitors \
-H "Authorization: Bearer stc_..."GET /api/v1/monitors/{id}
Returns a single monitor.
Path parameters
id (string, uuid) — the monitor's IDResponse: Returns the monitor. Errors: not-found.
Example
curl https://api.stector.app/api/v1/monitors/00000000-0000-0000-0000-000000000000 \
-H "Authorization: Bearer stc_..."GET /api/v1/monitors/{id}/runs
Returns the check history for a monitor.
Path parameters
id (string, uuid) — the monitor's IDResponse: Returns up to 100 most recent runs, newest first. There's no parameter to adjust this limit on the REST endpoint. Errors: not-found.
Example
curl https://api.stector.app/api/v1/monitors/00000000-0000-0000-0000-000000000000/runs \
-H "Authorization: Bearer stc_..."POST /api/v1/monitors
Creates an HTTP or SSL monitor. Which fields apply depends on type.
Roles: Member, Admin, or Owner
Request body
type (string, required) — "http" or "ssl". Determines which fields below apply, and can't be changed after creation.name (string, required) — 1–200 characters.intervalSeconds (integer, required) — how often to check, 60–3600 seconds.timeoutSeconds (integer, required) — 1–120 seconds.regions (array of strings, required) — one or more of us-east, eu-west, asia.notificationPolicyId (string, uuid, optional, nullable) — which alert policy to notify when this monitor's status changes.HTTP monitors (type: "http") also take:
url (string, required) — the endpoint to check.method (string, required) — one of GET, POST, PUT, DELETE, HEAD.expectedStatus (integer, required) — 100–599. A successful check must return exactly this status code.auth (object, optional, nullable) — type ("bearer", "basic", or "header"), secret (string, required), plus username (for basic auth) or headerName (for a custom header). Omit or set to null for no authentication.SSL monitors (type: "ssl") also take:
host (string, required) — 1–253 characters, no https:// prefix.port (integer, optional) — 1–65535, defaults to 443.warningDays (integer, optional, nullable) — days before certificate expiry to send a warning. Omit or set to null to disable expiry warnings.Response: Returns the created monitor. Errors: validation, forbidden.
Example
curl -X POST https://api.stector.app/api/v1/monitors \
-H "Authorization: Bearer stc_..." \
-H "Content-Type: application/json" \
-d '{
"type": "http",
"name": "Production API",
"url": "https://example.com/health",
"method": "GET",
"expectedStatus": 200,
"intervalSeconds": 300,
"timeoutSeconds": 10,
"regions": ["us-east", "eu-west"]
}'PATCH /api/v1/monitors/{id}
Partially updates a monitor. Every field is optional — send only the fields you want to change. HTTP monitors accept HTTP fields, SSL monitors accept SSL fields; type itself is immutable and can't be sent in this request.
Roles: Member, Admin, or Owner
Path parameters
id (string, uuid) — the monitor's IDRequest body — the same fields as create, all optional:
name, intervalSeconds, timeoutSeconds, regions, notificationPolicyId — same types and constraints as create.url, method, expectedStatus, auth.host, port, warningDays.For auth, notificationPolicyId, and warningDays specifically, there are three distinct states: omit the field entirely to keep its current value, send it as null to clear it, or send a new value to replace it. This matters most for auth — leaving it out of the body keeps the existing (encrypted) credentials untouched, while explicitly sending "auth": null removes them from the monitor.
Response: Returns the updated monitor. Errors: validation, forbidden, not-found.
Example
curl -X PATCH https://api.stector.app/api/v1/monitors/00000000-0000-0000-0000-000000000000 \
-H "Authorization: Bearer stc_..." \
-H "Content-Type: application/json" \
-d '{
"intervalSeconds": 60,
"auth": null
}'DELETE /api/v1/monitors/{id}
Soft-deletes a monitor — it stops being checked and no longer appears in the monitor list.
Roles: Admin or Owner
Path parameters
id (string, uuid) — the monitor's IDResponse: Returns 204 No Content — no response body. Errors: forbidden, not-found.
Example
curl -X DELETE https://api.stector.app/api/v1/monitors/00000000-0000-0000-0000-000000000000 \
-H "Authorization: Bearer stc_..."POST /api/v1/monitors/{id}/pause
Stops check execution for a monitor without deleting it.
Roles: Member, Admin, or Owner
Path parameters
id (string, uuid) — the monitor's IDResponse: Returns the paused monitor. Errors: forbidden, not-found.
Example
curl -X POST https://api.stector.app/api/v1/monitors/00000000-0000-0000-0000-000000000000/pause \
-H "Authorization: Bearer stc_..."POST /api/v1/monitors/{id}/resume
Resumes checks for a paused monitor.
Roles: Member, Admin, or Owner
Path parameters
id (string, uuid) — the monitor's IDResponse: Returns the resumed monitor. Errors: forbidden, not-found.
Example
curl -X POST https://api.stector.app/api/v1/monitors/00000000-0000-0000-0000-000000000000/resume \
-H "Authorization: Bearer stc_..."POST /api/v1/monitors/{id}/check
Immediately runs a check for a monitor, outside its normal schedule. Limited to once per monitor per 60 seconds — see Rate limits & errors.
Roles: Member, Admin, or Owner
Path parameters
id (string, uuid) — the monitor's IDResponse: Confirms the check was enqueued. Errors: validation, forbidden, not-found, rate-limited.
Example
curl -X POST https://api.stector.app/api/v1/monitors/00000000-0000-0000-0000-000000000000/check \
-H "Authorization: Bearer stc_..."GET /api/v1/incidents
Returns every incident on your team.
Response: Returns up to 100 incidents, newest first.
Example
curl https://api.stector.app/api/v1/incidents \
-H "Authorization: Bearer stc_..."GET /api/v1/incidents/{id}
Returns a single incident.
Path parameters
id (string, uuid) — the incident's IDResponse: Returns the incident. Errors: not-found.
Example
curl https://api.stector.app/api/v1/incidents/00000000-0000-0000-0000-000000000000 \
-H "Authorization: Bearer stc_..."POST /api/v1/incidents
Creates a manual incident.
Roles: Member, Admin, or Owner
Request body
title (string, required) — 1–200 characters.monitorId (string, uuid, optional) — links the incident to an existing monitor on your team.message (string, optional) — up to 4000 characters, posted as the incident's first timeline update.severity (string, optional) — one of minor, major, critical. Defaults to major if omitted.Response: Returns the created incident. Errors: validation, forbidden, not-found (if monitorId doesn't belong to your team).
Example
curl -X POST https://api.stector.app/api/v1/incidents \
-H "Authorization: Bearer stc_..." \
-H "Content-Type: application/json" \
-d '{
"title": "Elevated error rate on checkout API",
"severity": "major"
}'POST /api/v1/incidents/{id}/updates
Posts a timeline update to an open incident.
Roles: Member, Admin, or Owner
Path parameters
id (string, uuid) — the incident's IDRequest body
message (string, required) — 1–4000 characters.status (string, optional) — one of investigating, identified, monitoring. resolved isn't accepted here — use the resolve endpoint instead. If omitted, the incident's current status is left unchanged.postedToStatusPage (boolean, optional) — whether this update appears on the public status page. Defaults to true.Response: Returns the created update. Errors: validation, forbidden, not-found.
Example
curl -X POST https://api.stector.app/api/v1/incidents/00000000-0000-0000-0000-000000000000/updates \
-H "Authorization: Bearer stc_..." \
-H "Content-Type: application/json" \
-d '{
"message": "We have identified the root cause and are deploying a fix.",
"status": "identified"
}'POST /api/v1/incidents/{id}/resolve
Resolves an open incident.
Roles: Admin or Owner
Path parameters
id (string, uuid) — the incident's IDRequest body
message (string, optional) — 1–4000 characters, the closing note. Defaults to "Incident closed manually" if omitted.Response: Returns the resolved incident. Errors: validation, forbidden, not-found (also returned if the incident is already resolved).
Example
curl -X POST https://api.stector.app/api/v1/incidents/00000000-0000-0000-0000-000000000000/resolve \
-H "Authorization: Bearer stc_..." \
-H "Content-Type: application/json" \
-d '{
"message": "Root cause fixed and verified in production."
}'GET /api/v1/status-pages/current
Returns your team's status page. Each team has at most one.
Response: Returns the status page. Errors: not-found (if your team hasn't created one yet).
Example
curl https://api.stector.app/api/v1/status-pages/current \
-H "Authorization: Bearer stc_..."GET /api/v1/teams/current
Returns the team your token belongs to.
Response: Returns the team.
Example
curl https://api.stector.app/api/v1/teams/current \
-H "Authorization: Bearer stc_..."GET /api/v1/teams/current/members
Returns every member of your team.
Response: Returns a list of members, each with their role and join date.
Example
curl https://api.stector.app/api/v1/teams/current/members \
-H "Authorization: Bearer stc_..."