Endpoints

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.

Monitors

List monitors

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 a monitor

GET /api/v1/monitors/{id}

Returns a single monitor.

Path parameters

  • id (string, uuid) — the monitor's ID

Response: Returns the monitor. Errors: not-found.

Example

curl https://api.stector.app/api/v1/monitors/00000000-0000-0000-0000-000000000000 \
  -H "Authorization: Bearer stc_..."

List monitor runs

GET /api/v1/monitors/{id}/runs

Returns the check history for a monitor.

Path parameters

  • id (string, uuid) — the monitor's ID

Response: 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_..."

Create a monitor

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"]
  }'

Update a monitor

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 ID

Request body — the same fields as create, all optional:

  • name, intervalSeconds, timeoutSeconds, regions, notificationPolicyId — same types and constraints as create.
  • HTTP monitors: url, method, expectedStatus, auth.
  • SSL monitors: 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 a monitor

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 ID

Response: 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_..."

Pause a monitor

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 ID

Response: 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_..."

Resume a monitor

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 ID

Response: 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_..."

Trigger a check

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 ID

Response: 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_..."

Incidents

List incidents

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 an incident

GET /api/v1/incidents/{id}

Returns a single incident.

Path parameters

  • id (string, uuid) — the incident's ID

Response: Returns the incident. Errors: not-found.

Example

curl https://api.stector.app/api/v1/incidents/00000000-0000-0000-0000-000000000000 \
  -H "Authorization: Bearer stc_..."

Create an incident

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 an incident update

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 ID

Request 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"
  }'

Resolve an incident

POST /api/v1/incidents/{id}/resolve

Resolves an open incident.

Roles: Admin or Owner

Path parameters

  • id (string, uuid) — the incident's ID

Request 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."
  }'

Status Page

Get the status page

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_..."

Team

Get the authenticated team

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_..."

List team members

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_..."