REST reference | JustMonitorIt API
On this page

REST API reference

Generated from the API's OpenAPI document (/api/v1/openapi.json). Every path below is relative to https://dash.justmonitorit.com/api/v1. Send your API token as Authorization: Bearer jmi_…; the token role shown for each operation is the lowest role that may call it. Conventions (errors, pagination, idempotency, If-Match, rate limits) are in REST conventions.

Contents

Token

Describe the calling token

GET /token · token role: viewer

The token making the request, the organisation it belongs to and its effective role (the lower of the token's role and its creator's current role). Use it to find the org id for the other paths. Only API tokens can call it.

Responses

  • 200: TokenInfo
  • Errors: 401 unauthenticated (no, or an invalid, API token); 403 account_suspended; 429 rate_limited

Organisation

Get the organisation

GET /orgs/{org} · token role: viewer

Name, timezone, state, your effective role (my_role) and plan of the organisation.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Responses

  • 200: Org
  • Errors: 401 unauthenticated; 403 account_suspended; 404 not_found; 429 rate_limited

Update the organisation

PATCH /orgs/{org} · token role: admin

Rename the organisation or change its timezone (an IANA name such as Europe/London).

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Request body (OrgPatch)

FieldTypeDescription
name (optional)string or null1-100 characters.
timezone (optional)string or nullIANA timezone.

Responses

  • 200: Org
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, org_suspended, org_deleting, billing_inactive; 404 not_found; 413 payload_too_large; 415 unsupported_media_type; 422 validation; 429 rate_limited

Audit log

GET /orgs/{org}/audit-log · token role: admin

Who did what in the organisation, newest first. Entries made with an API token carry data.api_token ({id, name}).

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Query parameters

NameTypeDescription
action (optional)stringExact action, e.g. monitor.updated (at most 64 characters).
actor (optional)stringActor user id (usr_…).
cursor (optional)stringOpaque cursor from next_cursor.
limit (optional)integer1-200, default 50.

Responses

  • 200: page of AuditEntry
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, org_suspended, org_deleting; 404 not_found; 422 validation (/query/...); 429 rate_limited

Plan limits and usage

GET /orgs/{org}/entitlements · token role: viewer

What the organisation may do right now (monitor count, minimum interval, locations per monitor, checks per minute, contacts, seats, SMS credits, retention) and how much of it is used.

Path parameters

NameTypeDescription
orgstringOrganisation id (org_…); GET /token returns it

Responses

  • 200: OrgEntitlements
  • Errors: 401 unauthenticated; 403 account_suspended, org_deleting; 404 not_found (unknown org or not a member); 429 rate_limited

List open invitations

GET /orgs/{org}/invites · token role: admin

Invitations that have not been accepted, revoked or expired, newest first.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Query parameters

NameTypeDescription
cursor (optional)stringOpaque cursor from next_cursor.
limit (optional)integer1-200, default 50.

Responses

  • 200: page of Invite
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, org_suspended, org_deleting; 404 not_found; 422 validation (/query/cursor, /query/limit); 429 rate_limited

Invite someone

POST /orgs/{org}/invites · token role: admin

Email an invitation to join the organisation with a role (admin, member or viewer; owner invitations need a signed-in owner). The invitation is valid for 7 days. Counts against the plan's seats.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Headers

NameTypeDescription
Idempotency-Key (optional)string or null8-64 characters [A-Za-z0-9_-]

Request body (CreateInviteRequest)

FieldTypeDescription
emailstring
roleowner | admin | member | viewer

Responses

  • 201: Invite
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, plan_limit (seats), org_suspended, org_deleting, billing_inactive; 404 not_found; 409 conflict (already a member or invited), idempotency_in_progress; 413 payload_too_large; 415 unsupported_media_type; 422 validation, idempotency_mismatch; 429 rate_limited (20 per day)

Revoke an invitation

DELETE /orgs/{org}/invites/{inv} · token role: admin

The link in the invitation email stops working.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
invid inv_…Invitation id (inv_…)

Responses

  • 204: no body (revoked)
  • Errors: 401 unauthenticated; 403 forbidden, org_suspended, org_deleting, billing_inactive; 404 not_found; 429 rate_limited

Resend an invitation

POST /orgs/{org}/invites/{inv}/resend · token role: admin

Send the invitation again with a new link (the old link stops working) and a fresh 7-day expiry.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
invid inv_…Invitation id (inv_…)

Responses

  • 202: no body (sent)
  • Errors: 401 unauthenticated; 403 forbidden, plan_limit, org_suspended, org_deleting, billing_inactive; 404 not_found; 429 rate_limited

List members

GET /orgs/{org}/members · token role: viewer

Every member of the organisation with their role and when they were last active.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Responses

  • 200: list of Member
  • Errors: 401 unauthenticated; 403 org_suspended, org_deleting; 404 not_found; 429 rate_limited

Change a member's role

PATCH /orgs/{org}/members/{usr} · token role: admin

Set a member's role to admin, member or viewer. Granting or removing owner is not possible with a token. If the member is demoted below the role of one of their API tokens, that token is revoked.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
usrid usr_…User id (usr_…)

Request body (RoleRequest)

FieldTypeDescription
roleowner | admin | member | viewer

Responses

  • 200: Member
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, org_suspended, org_deleting, billing_inactive; 404 not_found; 409 sole_owner; 413 payload_too_large; 415 unsupported_media_type; 422 validation; 429 rate_limited

Remove a member

DELETE /orgs/{org}/members/{usr} · token role: admin

Remove a member from the organisation; their API tokens for it are deleted. Removing an owner, or the token's own creator (leaving), is not possible with a token.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
usrid usr_…User id (usr_…)

Responses

  • 204: no body (removed)
  • Errors: 401 unauthenticated; 403 forbidden, org_suspended, org_deleting; 404 not_found; 409 sole_owner; 429 rate_limited

Organisation overview

GET /orgs/{org}/overview · token role: viewer

Monitor counts by status, open incidents (newest first, at most 20), the latest status changes and usage against the plan.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Responses

  • 200: Overview
  • Errors: 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 429 rate_limited

Monitors

List locations

GET /locations · token role: none (public)

The active check locations and the regions they belong to. Monitors name locations by code (lon1) or by region. No authentication needed.

Responses

List monitors

GET /orgs/{org}/monitors · token role: viewer

The organisation's monitors, filtered and sorted, with cursor pagination (up to 500 per page).

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Query parameters

NameTypeDescription
status (optional)stringComma-separated statuses: unknown,up,down,degraded,no_data,paused.
kind (optional)stringComma-separated kinds.
label (optional)stringOne label.
run_state (optional)stringComma-separated run states: active,paused,system_paused.
contact_id (optional)stringMonitors linked to this contact.
q (optional)stringSubstring of the name or target (≤ 100 characters).
sort (optional)stringcreated_at (default) | name | status | status_since.
dir (optional)stringasc (default) | desc.
limit (optional)integer1-500, default 50.
cursor (optional)stringnext_cursor of the previous page.

Responses

  • 200: page of Monitor
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 422 validation; 429 rate_limited

Create a monitor

POST /orgs/{org}/monitors · token role: member

Validate and create a monitor. It starts checking at once unless paused is true. Send an Idempotency-Key so a retried request does not create a second monitor. 403 plan_limit names the limit that would be exceeded.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Headers

NameTypeDescription
Idempotency-Key (optional)string or null8-64 characters [A-Za-z0-9_-]

Request body (MonitorInput)

FieldTypeDescription
contact_ids (optional)array of id con_… or nullAt most 100; omitted = every auto_attach contact.
degraded_after_ms (optional)integer or nullhttp_adv only; 100-30000 and below the time budget; null = off.
failure_threshold (optional)integer or null1-10, default 2; for domain_expiry 1, the default (a second probe confirms each change instead); for heartbeat 1.
interval_sinteger30, 60, 120, 300, 600, 900, 1800 or 3600, at least the plan minimum. domain_expiry: 86400 only. heartbeat: the period between pings, 60-604800 (no plan minimum).
kindicmp | http | http_adv | tcp | ssl_expiry | domain_expiry | imap | smtp | heartbeatImmutable after create.
labels (optional)array of stringAt most 10, each 1-32 characters of [a-z0-9-_.].
locations (optional)MonitorLocationsInput or nullRequired, except for domain_expiry, which must omit it: each of its lookups runs from one location, a different one each day; and for heartbeat, which runs no checks.
namestring1-100 characters.
paused (optional)boolean
recovery_threshold (optional)integer or null1-10, default 2; for domain_expiry and heartbeat 1, the default.
reminder_interval_s (optional)integer or nullnull = no reminders; 900-86400.
specMonitorSpecInputThe per-kind spec without the type tag: the MonitorSpecInput schema of kind; secret fields are write-only. Fields per kind: Monitor kinds.

Responses

  • 201: Monitor, header ETag
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, billing_inactive, plan_limit, org_suspended, org_deleting, account_suspended; 404 not_found; 409 idempotency_in_progress; 413 payload_too_large; 415 unsupported_media_type; 422 validation, idempotency_mismatch; 429 rate_limited

Run a check once

POST /orgs/{org}/monitors/preview-check · token role: member

Run a check from one location now and return the result, without creating a monitor or storing anything. The same validation as creating a monitor applies. Waits for the probe (up to the check's time budget plus 15 seconds); 503 unavailable if no probe in that location can run it.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Request body (PreviewCheckInput)

FieldTypeDescription
kindicmp | http | http_adv | tcp | ssl_expiry | domain_expiry | imap | smtp | heartbeat
locationstringLocation code.
specMonitorSpecInputThe spec as in MonitorInput (secrets inline). Fields per kind: Monitor kinds.

Responses

  • 200: CheckResult
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 413 payload_too_large; 415 unsupported_media_type; 422 validation; 429 rate_limited; 503 unavailable

Get a monitor

GET /orgs/{org}/monitors/{mon} · token role: viewer

One monitor with its current state per location and its uptime over the last 24 hours. The ETag header carries version for If-Match.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Responses

  • 200: Monitor, header ETag
  • Errors: 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 429 rate_limited

Update a monitor

PATCH /orgs/{org}/monitors/{mon} · token role: member

Change any field except kind (JSON merge patch: omitted fields are unchanged, null clears a nullable field, arrays are replaced whole; spec is merged field by field). Send If-Match: "<version>" to get 412 precondition_failed instead of overwriting someone else's change.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Headers

NameTypeDescription
If-Match (optional)string or null"<version>"

Request body (MonitorPatch)

FieldTypeDescription
contact_ids (optional)array of id con_… or null
degraded_after_ms (optional)integer or null
failure_threshold (optional)integer or null
interval_s (optional)integer or null
kind (optional)icmp | http | http_adv | tcp | ssl_expiry | domain_expiry | imap | smtp | heartbeat or nullNot allowed (422 not_allowed): the kind is immutable.
labels (optional)array of string or null
locations (optional)MonitorLocationsInput or null
name (optional)string or null
paused (optional)boolean or nullfalse runs the same checks as POST .../resume.
recovery_threshold (optional)integer or null
reminder_interval_s (optional)integer or null
spec (optional)object or nullMerged into the stored spec (RFC 7396): any subset of the MonitorSpecInput schema of the monitor's kind. Fields per kind: Monitor kinds.

Responses

  • 200: Monitor, header ETag
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, billing_inactive, plan_limit, org_suspended, org_deleting, account_suspended; 404 not_found; 412 precondition_failed; 413 payload_too_large; 415 unsupported_media_type; 422 validation; 429 rate_limited

Delete a monitor

DELETE /orgs/{org}/monitors/{mon} · token role: member

Delete a monitor with its results, incidents and pending notifications. No notification is sent.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Headers

NameTypeDescription
If-Match (optional)string or null"<version>"

Responses

  • 204: no body (deleted)
  • Errors: 401 unauthenticated; 403 forbidden, org_suspended, org_deleting, account_suspended; 404 not_found; 412 precondition_failed; 422 validation; 429 rate_limited

List a monitor's contacts

GET /orgs/{org}/monitors/{mon}/contacts · token role: viewer

The contacts notified for a monitor.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Responses

  • 200: list of Contact
  • Errors: 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 429 rate_limited

Set a monitor's contacts

PUT /orgs/{org}/monitors/{mon}/contacts · token role: member

Replace the set of contacts notified for a monitor.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Headers

NameTypeDescription
If-Match (optional)string or null"<version>" of the monitor

Request body (MonitorContactIds)

FieldTypeDescription
contact_idsarray of id con_…At most 100 contacts of the org; replaces the set.

Responses

  • 200: MonitorContactIds
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 412 precondition_failed; 415 unsupported_media_type; 422 validation; 429 rate_limited

List a monitor's incidents

GET /orgs/{org}/monitors/{mon}/incidents · token role: viewer

Incidents of one monitor, newest first, within the plan's history.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Query parameters

NameTypeDescription
limit (optional)integer1-200, default 50.
cursor (optional)stringnext_cursor of the previous page.

Responses

  • 200: page of Incident
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 422 validation; 429 rate_limited

Pause a monitor

POST /orgs/{org}/monitors/{mon}/pause · token role: member

Stop checking until resumed. Pausing resolves an open incident. Idempotent.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Responses

  • 200: Monitor, header ETag
  • Errors: 401 unauthenticated; 403 forbidden, org_suspended, org_deleting, account_suspended; 404 not_found; 429 rate_limited

List heartbeat pings

GET /orgs/{org}/monitors/{mon}/pings · token role: viewer

A heartbeat monitor's ping history, newest first: when each ping arrived, success or fail (the job requested the ping URL followed by /fail), the method, the client's address and user agent. The newest 100 are kept; other kinds have none.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Query parameters

NameTypeDescription
limit (optional)integer1-100, default 50.

Responses

  • 200: list of HeartbeatPing
  • Errors: 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 422 validation; 429 rate_limited

List check results

GET /orgs/{org}/monitors/{mon}/results · token role: viewer

Raw results of a monitor, newest first. The window defaults to the last 24 hours, spans at most 7 days, and starts no earlier than the plan's raw data retention.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Query parameters

NameTypeDescription
from (optional)stringDefault to − 24 h; at most 7 days before to; clamped to the plan's raw retention.
to (optional)stringDefault now.
location (optional)stringLocation code.
outcome (optional)stringComma-separated outcomes.
limit (optional)integer1-1000, default 50.
cursor (optional)stringnext_cursor of the previous page.

Responses

  • 200: page of CheckResult
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 422 validation; 429 rate_limited

Resume a monitor

POST /orgs/{org}/monitors/{mon}/resume · token role: member

Start checking again. 403 plan_limit if the plan no longer allows the monitor.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Responses

  • 200: Monitor, header ETag
  • Errors: 401 unauthenticated; 403 forbidden, plan_limit, billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 422 validation; 429 rate_limited

List rollups

GET /orgs/{org}/monitors/{mon}/rollups · token role: viewer

Hourly (hour, at most 31 days) or daily (day, at most 731 days) aggregates per location: check counts by outcome and latency statistics. Not paginated.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Query parameters

NameTypeDescription
granularity (optional)stringhour (default) or day.
from (optional)stringDefault to − 24 h (hour) or to − 30 days (day); at most 31 / 731 days before to; clamped to plan history.
to (optional)string
location (optional)stringLocation code.

Responses

  • 200: RollupsResponse
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 422 validation; 429 rate_limited

Response-time series

GET /orgs/{org}/monitors/{mon}/series · token role: viewer

Median response time per location over 24h, 7d, 30d or 90d, with the periods the monitor was not up.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Query parameters

NameTypeDescription
range (optional)string24h (default) | 7d | 30d | 90d.

Responses

  • 200: Series
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 422 validation; 429 rate_limited

Status timeline

GET /orgs/{org}/monitors/{mon}/timeline · token role: viewer

The status periods (up, down, degraded, no data, paused) overlapping a window, oldest first.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Query parameters

NameTypeDescription
from (optional)stringDefault to − 24 h; clamped to plan history.
to (optional)stringDefault now.

Responses

  • 200: list of StatusPeriod
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 422 validation; 429 rate_limited

List path traces

GET /orgs/{org}/monitors/{mon}/traces · token role: viewer

Traceroute/MTR runs towards a monitor's target, newest first, within the plan's raw data retention. Traces run automatically when an incident opens.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Query parameters

NameTypeDescription
incident_id (optional)stringOnly the traces run for this incident.
limit (optional)integer1-50, default 10.

Responses

  • 200: list of PathTrace
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 422 validation; 429 rate_limited

Run a path trace

POST /orgs/{org}/monitors/{mon}/traces · token role: member

Trace the network path to the monitor's target from a location (mtr by default, about 15 seconds; traceroute about 5). Returns at once with status: pending; poll GET /orgs/{org}/traces/{trc} for the result.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Request body (PathTraceInput)

FieldTypeDescription
locationstringLocation code to trace from (any active location).
mode (optional)traceroute | mtr or nullDefault mtr.
protocol (optional)icmp | tcp or nullDefault: tcp to the target's port when it has one (falling back to icmp when no probe there can trace over TCP), else icmp.

Responses

  • 202: PathTrace
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 409 conflict (a trace from this location is still running); 413 payload_too_large; 415 unsupported_media_type; 422 validation; 429 rate_limited; 503 unavailable (no probe there can run it)

Uptime

GET /orgs/{org}/monitors/{mon}/uptime · token role: viewer

Uptime ratio and seconds down, degraded, without data and paused, for named windows (24h, 7d, 30d, 90d) or a from/to range. Degraded counts as up; paused and no-data time is left out of the ratio.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
monid mon_…Monitor id (mon_…)

Query parameters

NameTypeDescription
from (optional)string
to (optional)string
windows (optional)stringComma-separated 24h,7d,30d,90d (default all four).

Responses

  • 200: list of Uptime
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 422 validation; 429 rate_limited

Get a path trace

GET /orgs/{org}/traces/{trc} · token role: viewer

One path trace with its hops.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
trcid trc_…Path trace id (trc_…)

Responses

  • 200: PathTrace
  • Errors: 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 429 rate_limited

Incidents

List incidents

GET /orgs/{org}/incidents · token role: viewer

The organisation's incidents, newest first, filtered by status, monitor, severity and time.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Query parameters

NameTypeDescription
status (optional)stringopen | resolved.
monitor_id (optional)string
severity (optional)stringdown | degraded.
from (optional)stringOpened at or after (clamped to plan history; open incidents are always listed).
to (optional)stringOpened before.
limit (optional)integer1-200, default 50.
cursor (optional)stringnext_cursor of the previous page.

Responses

  • 200: page of Incident
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 422 validation; 429 rate_limited

Get an incident

GET /orgs/{org}/incidents/{inc} · token role: viewer

One incident with its timeline events and the notifications it sent.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
incid inc_…Incident id (inc_…)

Responses

  • 200: IncidentDetail
  • Errors: 401 unauthenticated; 403 forbidden, account_suspended, org_suspended, org_deleting; 404 not_found; 429 rate_limited

Acknowledge an incident

POST /orgs/{org}/incidents/{inc}/acknowledge · token role: member

Mark an open incident as acknowledged: reminders stop. Idempotent; 409 incident_resolved once it is resolved.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
incid inc_…Incident id (inc_…)

Responses

  • 200: Incident
  • Errors: 401 unauthenticated; 403 forbidden, billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 409 incident_resolved; 429 rate_limited; 503 unavailable

Add a note to an incident

POST /orgs/{org}/incidents/{inc}/notes · token role: member

Add a note (1-2000 characters) to an incident's timeline.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
incid inc_…Incident id (inc_…)

Request body (IncidentNoteInput)

FieldTypeDescription
bodystring1-2000 characters.

Responses

  • 201: IncidentEvent
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 413 payload_too_large; 415 unsupported_media_type; 422 validation; 429 rate_limited

Contacts

List contacts

GET /orgs/{org}/contacts · token role: viewer

The organisation's contacts (email, SMS, phone calls, Pushover, Discord, PagerDuty, Slack, webhooks), oldest first. Secrets are never returned.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Query parameters

NameTypeDescription
kind (optional)stringemail | sms | voice | pushover | discord | pagerduty | slack | webhook | teams.
status (optional)stringunverified | active | disabled.
limit (optional)integer1-200, default 50.
cursor (optional)stringnext_cursor of the previous page.

Responses

  • 200: page of Contact
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, org_suspended, org_deleting, account_suspended; 404 not_found; 422 validation; 429 rate_limited

Create a contact

POST /orgs/{org}/contacts · token role: member

Create a contact. Email, SMS and voice contacts start unverified and are sent a 6-digit code (an SMS code uses one SMS credit; a voice contact gets a call that reads the code, which uses a call's credits); Pushover and Discord contacts are validated with the provider and start active; PagerDuty contacts (an Events API v2 integration key) are checked offline and start active; Slack contacts (an incoming webhook URL) are checked with Slack and start active; webhook contacts start active when their host has the organisation's TXT record (config.txt_name, config.txt_value), else unverified until a re-check finds it; Microsoft Teams contacts (a Workflows webhook URL) start unverified and get a 6-digit code posted into the channel.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Headers

NameTypeDescription
Idempotency-Key (optional)string or null8-64 characters [A-Za-z0-9_-]

Request body (ContactInput)

FieldTypeDescription
auto_attach (optional)boolean or nullAttach to monitors created without contact_ids. Default false.
config (optional)objectPer kind: email {"address"}, sms and voice {"phone"} (E.164; a voice contact may be a landline), pushover {"device", "priority_down", "priority_up", "sound"}, discord {}, pagerduty {"region"} (us or eu, default us), slack {}, webhook {}, teams {}.
kindemail | sms | pushover | discord | pagerduty | slack | webhook | voice | teams
name (optional)string1-100 characters.
notify_on (optional)array of down | recovered | degraded or nullNon-empty subset of down, recovered, degraded; default ["down", "recovered"].
secret (optional)object or nullWrite-only: pushover {"user_key"}, discord {"webhook_url"}, pagerduty {"routing_key"} (an Events API v2 integration key), slack {"webhook_url"} (an incoming webhook), webhook {"url"} (https:// on a hostname whose _justmonitorit.<host> TXT record is the org's txt_value), teams {"webhook_url"} (a Workflows webhook on *.logic.azure.com or *.environment.api.powerplatform.com); none for email, sms and voice.

Responses

  • 201: Contact, header ETag
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, plan_limit, billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 409 sms_allowance_exhausted, idempotency_in_progress; 413 payload_too_large; 415 unsupported_media_type; 422 validation, idempotency_mismatch; 429 rate_limited; 503 unavailable

Get a contact

GET /orgs/{org}/contacts/{con} · token role: viewer

One contact. The ETag header carries version for If-Match.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
conid con_…Contact id (con_…)

Responses

  • 200: Contact, header ETag
  • Errors: 401 unauthenticated; 403 forbidden, org_suspended, org_deleting, account_suspended; 404 not_found; 429 rate_limited

Update a contact

PATCH /orgs/{org}/contacts/{con} · token role: member

Change any field except kind (JSON merge patch). Changing an email address, phone number or Teams webhook URL makes the contact unverified again and sends a new code. A secret that is omitted is kept.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
conid con_…Contact id (con_…)

Headers

NameTypeDescription
If-Match (optional)string or null"<version>"

Request body (ContactPatch)

FieldTypeDescription
auto_attach (optional)boolean or null
config (optional)object or null
kind (optional)email | sms | pushover | discord | pagerduty | slack | webhook | voice | teams or nullNot allowed (422 not_allowed).
name (optional)string or null
notify_on (optional)array of down | recovered | degraded or null
secret (optional)object or null

Responses

  • 200: Contact, header ETag
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 409 conflict, sms_allowance_exhausted; 412 precondition_failed; 413 payload_too_large; 415 unsupported_media_type; 422 validation; 429 rate_limited; 503 unavailable

Delete a contact

DELETE /orgs/{org}/contacts/{con} · token role: member

Delete a contact; it is removed from every monitor and its pending notifications are dropped.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
conid con_…Contact id (con_…)

Headers

NameTypeDescription
If-Match (optional)string or null"<version>"

Responses

  • 204: no body (deleted)
  • Errors: 401 unauthenticated; 403 forbidden, org_suspended, org_deleting, account_suspended; 404 not_found; 412 precondition_failed; 422 validation; 429 rate_limited

Disable a contact

POST /orgs/{org}/contacts/{con}/disable · token role: member

Stop sending to a contact (disabled_reason = "user") without deleting it.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
conid con_…Contact id (con_…)

Responses

  • 200: Contact, header ETag
  • Errors: 401 unauthenticated; 403 forbidden, org_suspended, org_deleting, account_suspended; 404 not_found; 429 rate_limited

Enable a contact

POST /orgs/{org}/contacts/{con}/enable · token role: member

Re-enable a contact disabled by a user or after repeated delivery failures. Other disabled states (bounce, complaint, unsubscribe, invalid) return through verification or a signed-in owner or admin.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
conid con_…Contact id (con_…)

Responses

  • 200: Contact, header ETag
  • Errors: 401 unauthenticated; 403 forbidden (also: a bounced address and the caller is not an owner or admin), billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 409 conflict (also: the address bounced before it was verified, or the email provider lists it for a complaint); 429 rate_limited (also: a bounced address was reactivated less than 24 h ago); 503 unavailable (the email provider could not reactivate the address)

Set a contact's monitors

PUT /orgs/{org}/contacts/{con}/monitors · token role: member

Replace the set of monitors a contact is notified for.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
conid con_…Contact id (con_…)

Headers

NameTypeDescription
If-Match (optional)string or null"<version>" of the contact

Request body (ContactMonitors)

FieldTypeDescription
monitor_idsarray of id mon_…At most 1,000; replaces the contact's monitor links.

Responses

  • 200: ContactMonitors, header ETag
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 412 precondition_failed; 413 payload_too_large; 415 unsupported_media_type; 422 validation; 429 rate_limited

Send a test notification

POST /orgs/{org}/contacts/{con}/test · token role: member

Queue a test message to an active contact and return the notification id; follow it with GET /orgs/{org}/notifications/{ntf}. 409 contact_unverified, contact_disabled or sms_allowance_exhausted when it cannot be sent.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
conid con_…Contact id (con_…)

Headers

NameTypeDescription
Idempotency-Key (optional)string or null8-64 characters [A-Za-z0-9_-]

Responses

  • 202: TestSent
  • Errors: 401 unauthenticated; 403 forbidden, billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 409 contact_unverified, contact_disabled, sms_allowance_exhausted, idempotency_in_progress, conflict; 422 validation, idempotency_mismatch; 429 rate_limited

Verify a contact

POST /orgs/{org}/contacts/{con}/verify · token role: member

Verify an email, SMS, voice or Teams contact with the 6-digit code it received. A wrong code is 422 validation with errors[0].code = "invalid_code"; after 5 wrong codes the code is void.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
conid con_…Contact id (con_…)

Request body (VerifyInput)

FieldTypeDescription
codestringThe 6-digit code.

Responses

  • 200: Contact, header ETag
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 409 conflict; 413 payload_too_large; 415 unsupported_media_type; 422 validation (invalid_code, with attempts_left); 429 rate_limited

Send a verification code

POST /orgs/{org}/contacts/{con}/verify/send · token role: member

Send a new code to an email, SMS, voice or Teams contact, or validate a Pushover, Discord, PagerDuty or Slack contact again, or look for a webhook's TXT record again (it becomes active on success).

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
conid con_…Contact id (con_…)

Responses

  • 202: no body (code sent, or validation passed)
  • Errors: 401 unauthenticated; 403 forbidden, billing_inactive, org_suspended, org_deleting, account_suspended; 404 not_found; 409 conflict, sms_allowance_exhausted; 422 validation (pushover_invalid, discord_webhook_invalid); 429 rate_limited; 503 unavailable

Notifications

List notifications

GET /orgs/{org}/notifications · token role: viewer

The organisation's notification log, newest first, with each delivery attempt. Filter by contact, incident, monitor, status or kind.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Query parameters

NameTypeDescription
contact_id (optional)stringcon_…: the delivery log of one contact.
incident_id (optional)stringinc_…
monitor_id (optional)stringmon_…
status (optional)stringpending | sending | sent | failed | cancelled | suppressed
kind (optional)stringA notification kind.
cursor (optional)stringOpaque cursor from next_cursor.
limit (optional)integer1-200, default 50.

Responses

  • 200: page of Notification
  • Errors: 400 bad_request; 401 unauthenticated; 403 org_suspended, org_deleting, account_suspended; 404 not_found (not a member); 422 validation (bad filter or cursor); 429 rate_limited

Get a notification

GET /orgs/{org}/notifications/{ntf} · token role: viewer

One notification with its delivery attempts and provider status.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
ntfid ntf_…Notification id (ntf_…)

Responses

  • 200: Notification
  • Errors: 401 unauthenticated; 403 org_suspended, org_deleting, account_suspended; 404 not_found; 429 rate_limited

Maintenance windows

List maintenance windows

GET /orgs/{org}/maintenance · token role: viewer

Active and upcoming maintenance windows, and those that ended in the last 30 days, by start. While a window is active, the monitors it covers keep checking and record incidents, but their alerts are held until it ends.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Responses

  • 200: list of MaintenanceWindow
  • Errors: 401 unauthenticated; 403 forbidden, org_suspended, org_deleting; 404 not_found; 429 rate_limited

Schedule a maintenance window

POST /orgs/{org}/maintenance · token role: member

Hold the alerts of all monitors (all_monitors: true, including monitors added later) or of monitor_ids from starts_at (default now) until ends_at, or for duration_minutes; at most 7 days. When it ends, each incident still open alerts its contacts once; incidents that ended inside the window send nothing.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it

Request body (CreateMaintenanceRequest)

FieldTypeDescription
all_monitors (optional)booleanCover every monitor, including ones added later.
duration_minutes (optional)integer or null1-10080, instead of ends_at.
ends_at (optional)timestamp or nullAfter starts_at, at most 7 days later.
monitor_ids (optional)array of stringThe monitors to cover when all_monitors is false (at least one).
namestring1-100 characters, e.g. "Postgres upgrade".
starts_at (optional)timestamp or nullAbsent = now. At most a year ahead.

Responses

  • 201: MaintenanceWindow
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, org_suspended, org_deleting; 404 not_found; 409 conflict (50 windows that have not ended); 413 payload_too_large; 415 unsupported_media_type; 422 validation; 429 rate_limited

Get a maintenance window

GET /orgs/{org}/maintenance/{mnt} · token role: viewer

One maintenance window, with state (upcoming, active or ended) and the number of incidents whose alerts it holds now.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
mntstringWindow id (mnt_…)

Responses

  • 200: MaintenanceWindow
  • Errors: 401 unauthenticated; 403 forbidden, org_suspended, org_deleting; 404 not_found; 429 rate_limited

Change a maintenance window

PATCH /orgs/{org}/maintenance/{mnt} · token role: member

Rename a window that has not ended or move its end (for example to extend it); the start can only move before the window starts.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
mntstringWindow id (mnt_…)

Request body (UpdateMaintenanceRequest)

FieldTypeDescription
ends_at (optional)timestamp or null
name (optional)string or null
starts_at (optional)timestamp or null

Responses

  • 200: MaintenanceWindow
  • Errors: 400 bad_request; 401 unauthenticated; 403 forbidden, org_suspended, org_deleting; 404 not_found; 409 conflict (the window has ended); 415 unsupported_media_type; 422 validation; 429 rate_limited

Delete a maintenance window

DELETE /orgs/{org}/maintenance/{mnt} · token role: member

Delete a window that has not started. To stop an active window, end it instead.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
mntstringWindow id (mnt_…)

Responses

  • 204: no body (deleted)
  • Errors: 401 unauthenticated; 403 forbidden, org_suspended, org_deleting; 404 not_found; 409 conflict (started: end it instead); 429 rate_limited

End a maintenance window now

POST /orgs/{org}/maintenance/{mnt}/end · token role: member

End an active window now. Within seconds, each incident still open alerts its contacts once.

Path parameters

NameTypeDescription
orgid org_…Organisation id (org_…); GET /token returns it
mntstringWindow id (mnt_…)

Responses

  • 200: MaintenanceWindow
  • Errors: 401 unauthenticated; 403 forbidden, org_suspended, org_deleting; 404 not_found; 409 conflict (not started: delete it; or already ended); 429 rate_limited

Billing

List plans

GET /billing/plans · token role: none (public)

The plans on sale with their prices and limits. No authentication needed.

Responses

  • 200: list of PlanOffer
  • Errors: 404 billing_disabled ([billing] mode = "disabled"); 429 rate_limited; 503 unavailable: Stripe not configured, unreachable, or a catalogue price is missing

Billing state

GET /orgs/{org}/billing · token role: viewer

The organisation's plan, subscription state, entitlements and usage. Checkout and the customer portal need a signed-in owner.

Path parameters

NameTypeDescription
orgstringOrganisation id (org_…); GET /token returns it

Responses

  • 200: Billing
  • Errors: 401 unauthenticated; 403 account_suspended, org_deleting; 404 not_found (unknown org or not a member), billing_disabled ([billing] mode = "disabled"; use GET /orgs/{org}/entitlements); 429 rate_limited

Schemas

Response and request objects referenced above. Every field of a response is present; absent values are null.

ApiToken

An API token (never its secret).

FieldTypeDescription
created_attimestamp
created_byUserRefThe member the token acts for.
expires_attimestamp or nullnull = never expires.
idid tok_…
last_used_attimestamp or null
last_used_ipstring or null
namestring
prefixstringThe first 8 characters after jmi_, for recognising the token.
roleadmin | member | viewer

Assertion

An http_adv assertion.

With type = body_contains:

FieldTypeDescription
typebody_contains
valuestring

With type = body_not_contains:

FieldTypeDescription
typebody_not_contains
valuestring

With type = body_regex:

FieldTypeDescription
patternstring
typebody_regex

With type = json_path:

FieldTypeDescription
opexists | not_exists | equals | not_equals | contains | lt | gt
pathstring
typejson_path
valueanyAny JSON value; required except for exists and not_exists.

With type = header:

FieldTypeDescription
namestring
opexists | not_exists | equals | contains | regex
typeheader
valuestring or null

Billing

An org's subscription, entitlements and usage.

FieldTypeDescription
billing_intervalmonth | year or null
cancel_at_period_endboolean
current_period_endtimestamp or null
entitlementsEntitlements
grace_ends_attimestamp or null
past_due_sincetimestamp or null
plantrial | starter | pro | business
statustrialing | active | past_due | canceledEffective status: a lapsed trial or grace period is canceled.
trial_ends_attimestamp or null
usageBillingUsage

BillingUsage

Current usage of an org (Billing.usage).

FieldTypeDescription
checks_per_minuteinteger
contactsinteger
monitorsinteger
seatsinteger
sms_credits_limitinteger
sms_credits_usedinteger
sms_period_endtimestampStart of the next UTC month, when the credits reset.
sms_stateok | warning | exhausted

CheckResult

One check result.

FieldTypeDescription
error_detailstring or null
error_kinddns_failure | blocked_address | connect_timeout | connection_refused | connection_reset | host_unreachable | tls_error | cert_expired | timeout | protocol_error | status_mismatch | assertion_failed | too_many_redirects | redirect_blocked | packet_loss | slow_response | cert_expiring | domain_expiring | domain_expired | domain_not_found | rdap_unavailable | heartbeat_missed | heartbeat_failed | network_unreachable | icmp_unavailable | resource_exhausted | probe_overloaded | internal or null
latency_msinteger or null
locationstringCode of the location that ran the check.
metricsobject or null
outcomeup | degraded | down | error
resolved_ipstring or null
slot_locationstring or nullCode of the configured location it stood in for, if substituted.
status_codeinteger or null
timingsCheckTimings
tls_not_aftertimestamp or null
tstimestamp
work_kindround | recheck | shadow | canary | preview | trace

CheckTimings

Phase timings of a result.

FieldTypeDescription
connect_msinteger or null
dns_msinteger or null
tls_msinteger or null
total_msinteger or null
ttfb_msinteger or null

Contact

A contact (secrets are never returned; secret_set says whether one is stored).

FieldTypeDescription
auto_attachboolean
configobjectStored config: email {"address"}, sms and voice {"phone_e164", "country_code"}, pushover {"device", "priority_down", "priority_up", "sound", "devices"}, discord {"webhook_id", "webhook_name", "channel_id", "guild_id"}, pagerduty {"region", "key_hint"}, slack {"team_id", "webhook_id"}, webhook {"host", "txt_name", "txt_value"} (the TXT record that verifies the host), teams {"host", "workflow_id"}.
consecutive_failuresinteger
created_attimestamp
credits_per_callinteger or nullVoice only: the SMS credits each call to this number uses, from what the number costs to call. null for other kinds.
disabled_reasonuser | bounced | complaint | opted_out | invalid | unsubscribed | failing | abuse or null
idid con_…
kindemail | sms | pushover | discord | pagerduty | slack | webhook | voice | teams
last_delivery_attimestamp or null
last_errorstring or null
monitor_countinteger
namestring
notify_onarray of down | recovered | degraded
secret_setboolean
statusunverified | active | disabled
updated_attimestamp
verified_attimestamp or null
versionintegerOptimistic-concurrency version (also the ETag).

ContactInput

POST /orgs/{org}/contacts body.

FieldTypeDescription
auto_attach (optional)boolean or nullAttach to monitors created without contact_ids. Default false.
config (optional)objectPer kind: email {"address"}, sms and voice {"phone"} (E.164; a voice contact may be a landline), pushover {"device", "priority_down", "priority_up", "sound"}, discord {}, pagerduty {"region"} (us or eu, default us), slack {}, webhook {}, teams {}.
kindemail | sms | pushover | discord | pagerduty | slack | webhook | voice | teams
name (optional)string1-100 characters.
notify_on (optional)array of down | recovered | degraded or nullNon-empty subset of down, recovered, degraded; default ["down", "recovered"].
secret (optional)object or nullWrite-only: pushover {"user_key"}, discord {"webhook_url"}, pagerduty {"routing_key"} (an Events API v2 integration key), slack {"webhook_url"} (an incoming webhook), webhook {"url"} (https:// on a hostname whose _justmonitorit.<host> TXT record is the org's txt_value), teams {"webhook_url"} (a Workflows webhook on *.logic.azure.com or *.environment.api.powerplatform.com); none for email, sms and voice.

ContactMonitors

PUT .../monitors body and response.

FieldTypeDescription
monitor_idsarray of id mon_…At most 1,000; replaces the contact's monitor links.

ContactPatch

PATCH /orgs/{org}/contacts/{con} body (JSON merge patch; kind is immutable, config is merged, secret replaces the stored one).

FieldTypeDescription
auto_attach (optional)boolean or null
config (optional)object or null
kind (optional)email | sms | pushover | discord | pagerduty | slack | webhook | voice | teams or nullNot allowed (422 not_allowed).
name (optional)string or null
notify_on (optional)array of down | recovered | degraded or null
secret (optional)object or null

ContactRef

{ "id": "con_…", "name": "…", "kind": "sms" }.

FieldTypeDescription
idid con_…
kindemail | sms | pushover | discord | pagerduty | slack | webhook | voice | teams
namestring

CreateInviteRequest

{email, role}.

FieldTypeDescription
emailstring
roleowner | admin | member | viewer

CreateMaintenanceRequest

POST /orgs/{org}/maintenance body. Give ends_at or duration_minutes, and all_monitors: true or monitor_ids.

FieldTypeDescription
all_monitors (optional)booleanCover every monitor, including ones added later.
duration_minutes (optional)integer or null1-10080, instead of ends_at.
ends_at (optional)timestamp or nullAfter starts_at, at most 7 days later.
monitor_ids (optional)array of stringThe monitors to cover when all_monitors is false (at least one).
namestring1-100 characters, e.g. "Postgres upgrade".
starts_at (optional)timestamp or nullAbsent = now. At most a year ahead.

DeliveryView

One delivery attempt of a notification.

FieldTypeDescription
attemptinteger
errorstring or null
error_codestring or null
http_statusinteger or null
idid dlv_…
latency_msinteger
provider_statusdelivered | undelivered | failed | bounced | complaint | acknowledged or null
provider_status_attimestamp or null
started_attimestamp
statussent | failed_retryable | failed_permanent | ambiguous

DomainExpirySpec

domain_expiry.

FieldTypeDescription
domainstringThe registered domain, IDNA A-label, lower case.
expiry_warn_daysintegerDegraded this many days before expiry, 1-365 (default 30).
timeout_msinteger1000-30000 (default 10000).

Entitlements

The single answer to "what may this org do now".

FieldTypeDescription
history_retention_daysinteger
max_checks_per_minuteinteger
max_contactsinteger
max_locations_per_monitorinteger
max_monitorsinteger
max_seatsinteger
min_interval_sinteger
min_locations_per_monitorinteger
monitors_may_runboolean
plantrial | starter | pro | business
raw_retention_daysinteger
sms_credits_per_monthinteger
statustrialing | active | past_due | canceledEffective: a lapsed trial or grace period counts as canceled.
writes_allowedboolean

HeaderSpec

One request header of an http_adv check.

FieldTypeDescription
namestring
secretboolean
valuestring or nullThe header value. With secret, write-only: sent in requests, null in responses (the value lives in the secrets blob).

HeartbeatSpec

heartbeat. The period between pings is the monitor's interval_s.

FieldTypeDescription
grace_sintegerHow late a ping may be before the monitor is down, 60-604800 s (default 300).

HttpAdvSpec

http_adv spec in responses. A secret header has "secret": true, "value": null.

FieldTypeDescription
assertionsarray of Assertion
authHttpAuthView
bodystring or null
body_max_bytesinteger
cert_expiry_warn_daysinteger or null
expected_statusarray of string
follow_redirectsboolean
headersarray of HeaderSpec
ip_familyauto | ipv4 | ipv6
max_redirectsinteger
methodGET | HEAD | POST | PUT | PATCH | DELETE | OPTIONS
timeout_msinteger
urlstring
verify_tlsboolean

HttpAdvSpecInput

http_adv spec in requests. A header with secret: true carries its write-only value in value.

FieldTypeDescription
assertions (optional)array of AssertionAt most 20.
auth (optional)HttpAuthInput or nullDefault {"type": "none"}.
body (optional)string or nullNot with GET or HEAD; at most 16 KiB.
body_max_bytes (optional)integerDefault 65536.
cert_expiry_warn_days (optional)integer or nullDefault 14; null disables the warning.
expected_status (optional)array of stringCodes ("200") or ranges ("200-299"); default ["200-299"].
follow_redirects (optional)booleanDefault true.
headers (optional)array of HeaderSpecAt most 32; a secret header needs a unique name.
ip_family (optional)auto | ipv4 | ipv6
max_redirects (optional)integer0-10, default 5.
method (optional)GET | HEAD | POST | PUT | PATCH | DELETE | OPTIONSDefault GET.
timeout_ms (optional)integerDefault 10000.
urlstring
verify_tls (optional)booleanDefault true.

HttpAuthInput

auth of an http_adv spec in requests. A secret that is absent or null keeps the stored value; "" clears it.

With type = none:

FieldTypeDescription
typenone

With type = basic:

FieldTypeDescription
password (optional)string or nullWrite-only.
typebasic
usernamestring

With type = bearer:

FieldTypeDescription
token (optional)string or nullWrite-only.
typebearer

HttpAuthView

auth of an http_adv spec in responses: whether each secret is stored, never its value.

With type = none:

FieldTypeDescription
typenone

With type = basic:

FieldTypeDescription
password_setboolean
typebasic
usernamestring

With type = bearer:

FieldTypeDescription
token_setboolean
typebearer

HttpSpec

http.

FieldTypeDescription
ip_familyauto | ipv4 | ipv6
keywordstring or nullText the body must contain, 1-128 bytes.
timeout_msinteger1000-30000 (default 10000).
urlstringhttp or https URL (normalised, fragment dropped).

IcmpSpec

icmp.

FieldTypeDescription
countintegerPings per check, 1-10 (default 3).
hoststringHost name or public IP address.
interval_msintegerBetween pings, 200-1000 (default 500).
ip_familyauto | ipv4 | ipv6
loss_threshold_pctintegerPacket loss that counts as down, 1-100 (default 100).
payload_bytesinteger16-1024 (default 56).
timeout_msintegerPer ping, 500-10000 (default 2000).

Incident

An incident.

FieldTypeDescription
acknowledged_attimestamp or null
acknowledged_byUserRef or nullnull with acknowledged_at set = acknowledged via Pushover.
causestring
cause_detailobjectRootCause with location ids expanded to {id, code, name}.
current_statusup | down | degraded | no_data
duration_sintegerFrom the first failure to resolution (or now).
first_failure_attimestamp
flappingboolean
idid inc_…
monitorIncidentMonitor
notification_countintegerNotification jobs of this incident with status sent.
opened_attimestamp
reminders_sentinteger
resolutionrecovered | paused or null
resolved_attimestamp or null
severitydown | degradedWorst status reached.
statusopen | resolved

IncidentDetail

An incident with its timeline and notifications.

Every field of Incident, and:

FieldTypeDescription
eventsarray of IncidentEvent
notificationsarray of Notification

IncidentEvent

One timeline entry of an incident.

FieldTypeDescription
actorUserRef or nullThe user who acted, null for system events.
dataobjectPer type.
idid iev_…
tstimestamp
typecheck_failed | opened | status_changed | location_failed | location_recovered | no_data | data_resumed | flapping_started | flapping_ended | acknowledged | reminder_sent | reminders_exhausted | note | resolved | no_contacts | notification_sent | notification_failed | notification_suppressed | notification_undelivered

IncidentMonitor

{ "id": "mon_…", "name": "…" }.

FieldTypeDescription
idid mon_…
namestring

IncidentNoteInput

POST .../notes body.

FieldTypeDescription
bodystring1-2000 characters.

Invite

An open invitation.

FieldTypeDescription
created_attimestamp
emailstring
expires_attimestamp
idid inv_…
invited_byUserRef or nullnull if the inviter's account was deleted.
roleowner | admin | member | viewer

Location

A customer-selectable location.

FieldTypeDescription
availablebooleanStatus active and at least one eligible probe.
codestring
country_codestring
idid loc_…
ipv6boolean
namestring
regioneu | na | sa | as | oc | af

LocationsResponse

GET /locations response.

FieldTypeDescription
locationsarray of Location
regionsarray of RegionView

MailSpec

imap and smtp.

FieldTypeDescription
cert_expiry_warn_daysinteger or nullDegraded this many days before the certificate expires, 1-90 (default 14); null disables the warning; always null with tls = none.
hoststringHost name or public IP address.
ip_familyauto | ipv4 | ipv6
portinteger1-65535.
timeout_msinteger1000-30000 (default 10000).
tlsimplicit | starttls | none
verify_tlsbooleanDefault true; always true with tls = none.

MaintenanceWindow

A maintenance window: while it is active, the monitors it covers keep checking and record incidents, but their alerts are held. When it ends, each incident still open alerts its contacts once; incidents that ended inside the window send nothing.

FieldTypeDescription
all_monitorsbooleanEvery monitor of the org, including ones added later.
created_attimestamp
created_byUserRef or nullnull if the member left the org.
ended_earlybooleanEnded before its scheduled end.
ends_attimestamp
held_incidentsintegerIncidents whose alerts the window is holding now.
idid mnt_…
monitor_idsarray of id mon_…The monitors covered when all_monitors is false.
namestring
starts_attimestamp
stateupcoming | active | ended

Member

One member of an org.

FieldTypeDescription
joined_attimestamp
last_active_attimestamp or nullLatest activity of any of the user's sessions.
roleowner | admin | member | viewer
userMemberUser

MemberUser

The user part of a member.

FieldTypeDescription
emailstring
idid usr_…
namestring
totp_enabledboolean

Monitor

A monitor. Secret values are never returned.

FieldTypeDescription
contact_idsarray of id con_…
created_attimestamp
degraded_after_msinteger or null
failure_thresholdinteger
idid mon_…
interval_sinteger
kindicmp | http | http_adv | tcp | ssl_expiry | domain_expiry | imap | smtp | heartbeat
labelsarray of string
locationsMonitorLocations or nullnull for domain_expiry: each lookup runs from one location, chosen each day; and for heartbeat, which runs no checks.
namestring
ping_urlstring or nullheartbeat only: the URL its job requests (GET, HEAD or POST) each time it runs. null for every other kind, and for a viewer: the URL can keep the monitor UP.
recovery_thresholdinteger
reminder_interval_sinteger or null
run_stateactive | paused | system_paused
specMonitorSpecThe per-kind spec without the type tag (the MonitorSpec schema of kind); secrets show as password_set / token_set / "value": null. Fields per kind: Monitor kinds.
stateMonitorState
system_pause_reasonbilling | plan_limit | org_suspended | org_deleting | admin or null
timeout_msintegerRead-only execution budget derived from the spec.
updated_attimestamp
uptime_24hnumber or nullUptime over the last 24 h; null when nothing was observed.
versioninteger
warningsarray of stringCreate and update responses only, e.g. does_not_resolve.

MonitorContactIds

PUT .../contacts body and response.

FieldTypeDescription
contact_idsarray of id con_…At most 100 contacts of the org; replaces the set.

MonitorInput

POST /orgs/{org}/monitors body.

FieldTypeDescription
contact_ids (optional)array of id con_… or nullAt most 100; omitted = every auto_attach contact.
degraded_after_ms (optional)integer or nullhttp_adv only; 100-30000 and below the time budget; null = off.
failure_threshold (optional)integer or null1-10, default 2; for domain_expiry 1, the default (a second probe confirms each change instead); for heartbeat 1.
interval_sinteger30, 60, 120, 300, 600, 900, 1800 or 3600, at least the plan minimum. domain_expiry: 86400 only. heartbeat: the period between pings, 60-604800 (no plan minimum).
kindicmp | http | http_adv | tcp | ssl_expiry | domain_expiry | imap | smtp | heartbeatImmutable after create.
labels (optional)array of stringAt most 10, each 1-32 characters of [a-z0-9-_.].
locations (optional)MonitorLocationsInput or nullRequired, except for domain_expiry, which must omit it: each of its lookups runs from one location, a different one each day; and for heartbeat, which runs no checks.
namestring1-100 characters.
paused (optional)boolean
recovery_threshold (optional)integer or null1-10, default 2; for domain_expiry and heartbeat 1, the default.
reminder_interval_s (optional)integer or nullnull = no reminders; 900-86400.
specMonitorSpecInputThe per-kind spec without the type tag: the MonitorSpecInput schema of kind; secret fields are write-only. Fields per kind: Monitor kinds.

MonitorLocationState

One location of a monitor's live state.

FieldTypeDescription
codestring
error_kinddns_failure | blocked_address | connect_timeout | connection_refused | connection_reset | host_unreachable | tls_error | cert_expired | timeout | protocol_error | status_mismatch | assertion_failed | too_many_redirects | redirect_blocked | packet_loss | slow_response | cert_expiring | domain_expiring | domain_expired | domain_not_found | rdap_unavailable | heartbeat_missed | heartbeat_failed | network_unreachable | icmp_unavailable | resource_exhausted | probe_overloaded | internal or null
last_result_attimestamp or null
latency_msinteger or null
statusup | down | degraded | no_data
substitutestring or nullCode of the location currently standing in for this one: the location that ran the slot's newest fresh result when it was not the slot itself, or null.

MonitorLocations

The location selection of a monitor.

FieldTypeDescription
codesarray of string or nullSet when mode = locations.
moderegions | locations
regionsarray of eu | na | sa | as | oc | af or nullSet when mode = regions.
resolvedarray of stringThe materialised location codes, by sort_order, code.

MonitorLocationsInput

Location selection of a monitor (MonitorInput.locations).

FieldTypeDescription
codes (optional)array of string or nullWith mode = locations: 2-12 location codes.
moderegions | locations
regions (optional)array of eu | na | sa | as | oc | af or nullWith mode = regions: 1-6 region codes.

MonitorPatch

PATCH /orgs/{org}/monitors/{mon} body: any subset of MonitorInput except kind (JSON merge patch; spec is merged per RFC 7396).

FieldTypeDescription
contact_ids (optional)array of id con_… or null
degraded_after_ms (optional)integer or null
failure_threshold (optional)integer or null
interval_s (optional)integer or null
kind (optional)icmp | http | http_adv | tcp | ssl_expiry | domain_expiry | imap | smtp | heartbeat or nullNot allowed (422 not_allowed): the kind is immutable.
labels (optional)array of string or null
locations (optional)MonitorLocationsInput or null
name (optional)string or null
paused (optional)boolean or nullfalse runs the same checks as POST .../resume.
recovery_threshold (optional)integer or null
reminder_interval_s (optional)integer or null
spec (optional)object or nullMerged into the stored spec (RFC 7396): any subset of the MonitorSpecInput schema of the monitor's kind. Fields per kind: Monitor kinds.

MonitorSpec

A monitor's spec in responses: the schema of its kind, with every field present (defaults applied, hosts and URLs normalised). Secrets of http_adv show as flags (HttpAdvSpec).

The schema of the monitor's kind:

kindSchema
domain_expiryDomainExpirySpec
heartbeatHeartbeatSpec
httpHttpSpec
http_advHttpAdvSpec
icmpIcmpSpec
imapMailSpec
smtpMailSpec
ssl_expirySslExpirySpec
tcpTcpSpec

MonitorSpecInput

A monitor's spec in requests: the schema of its kind (imap and smtp share MailSpec), without a type tag. Secret values of http_adv are sent inline (HttpAdvSpecInput).

The schema of the monitor's kind:

kindSchema
domain_expiryDomainExpirySpec
heartbeatHeartbeatSpec
httpHttpSpec
http_advHttpAdvSpecInput
icmpIcmpSpec
imapMailSpec
smtpMailSpec
ssl_expirySslExpirySpec
tcpTcpSpec

MonitorState

A monitor's live state.

FieldTypeDescription
last_ping_attimestamp or nullheartbeat only: when the newest ping arrived.
last_result_attimestamp or null
locationsarray of MonitorLocationStateOne per configured location; empty for domain_expiry, whose lookups run from a different location each day (the newest result says where), and for heartbeat.
open_incident_idid inc_… or null
statusunknown | up | down | degraded | no_data | paused
status_sincetimestamp

Notification

One notification_jobs row.

FieldTypeDescription
attemptsinteger
channelemail | sms | pushover | discord | pagerduty | slack | webhook | voice | teams
contactContactRef or nullnull for account notices sent to a user.
created_attimestamp
deliveriesarray of DeliveryView
finished_attimestamp or null
idid ntf_…
incident_idid inc_… or null
kinddown | recovered | degraded | flapping | reminder | test | fallback | account_notice | pushover_cancel
last_errorstring or null
monitor_idid mon_… or null
next_attempt_attimestamp or null
statuspending | sending | sent | failed | cancelled | suppressed | held
status_reasonsms_cap | anomaly_brake | notify_hold | contact_disabled | monitor_deleted | monitor_paused | permanent_failure | gave_up | maintenance or null

Org

An organisation as its member sees it.

FieldTypeDescription
billingOrgBilling
created_attimestamp
idid org_…
my_roleowner | admin | member | viewer
namestring
purge_aftertimestamp or nullSet while deleting or canceled.
statusactive | suspended | deleting
timezonestringIANA name.

OrgBilling

{plan, status}; status is effective (a lapsed trial or grace period counts as canceled).

FieldTypeDescription
plantrial | starter | pro | business
statustrialing | active | past_due | canceled

OrgEntitlements

The org's effective entitlements and current usage (GET /orgs/{org}/entitlements): what forms and limit messages need, in either billing mode.

FieldTypeDescription
entitlementsEntitlements
usageBillingUsage

OrgPatch

PATCH /orgs/{org} (merge patch).

FieldTypeDescription
name (optional)string or null1-100 characters.
timezone (optional)string or nullIANA timezone.

Overview

The org dashboard.

FieldTypeDescription
monitorsOverviewMonitors
open_incidentsarray of IncidentNewest first, at most 20.
recent_changesarray of OverviewChangeThe last 20 status periods started.
usageOverviewUsage

OverviewChange

One status change.

FieldTypeDescription
attimestamp
fromunknown | up | down | degraded | no_data | paused or nullnull for a monitor's first status.
incident_idid inc_… or null
monitorIncidentMonitor
tounknown | up | down | degraded | no_data | paused

OverviewMonitors

Monitors per status; paused counts every monitor not running.

FieldTypeDescription
degradedinteger
downinteger
no_datainteger
pausedinteger
totalinteger
unknowninteger
upinteger

OverviewUsage

Plan usage.

FieldTypeDescription
monitors_limitinteger
monitors_usedinteger
sms_credits_limitinteger
sms_credits_usedinteger
sms_period_endtimestampEnd of the current SMS period (next UTC month start).

PathTrace

A path trace.

FieldTypeDescription
completed_attimestamp or null
created_attimestamp
error_detailstring or null
error_kindstring or nullfailed only: no_probe, expired, lost, invalid, or the probe's error kind (dns_failure, blocked_address, ...).
hopsarray of TraceHopBy TTL from 1 (done only). Responders in private, shared and reserved ranges have no ip.
idid trc_…
incident_idid inc_… or nullThe incident it was run for (trigger = incident).
locationTraceLocationWhere it ran from.
modetraceroute | mtrtraceroute: 3 probes per hop; mtr: 10.
monitor_idid mon_…
portinteger or nullThe TCP port, for tcp.
protocolicmp | tcp
reachedboolean or nullWhether the target answered (done only).
requested_byUserRef or nullWho asked for it (trigger = manual; null once the user is gone).
statuspending | done | failed
targetstringThe monitor's target host.
target_ipstring or nullThe address traced to.
triggerincident | manual

PathTraceInput

POST .../traces body.

FieldTypeDescription
locationstringLocation code to trace from (any active location).
mode (optional)traceroute | mtr or nullDefault mtr.
protocol (optional)icmp | tcp or nullDefault: tcp to the target's port when it has one (falling back to icmp when no probe there can trace over TCP), else icmp.

PreviewCheckInput

POST .../preview-check body.

FieldTypeDescription
kindicmp | http | http_adv | tcp | ssl_expiry | domain_expiry | imap | smtp | heartbeat
locationstringLocation code.
specMonitorSpecInputThe spec as in MonitorInput (secrets inline). Fields per kind: Monitor kinds.

RegionView

A region with at least one active location.

FieldTypeDescription
codeeu | na | sa | as | oc | af
namestring

RoleRequest

{role}.

FieldTypeDescription
roleowner | admin | member | viewer

Rollup

One rollup bucket.

FieldTypeDescription
bucket_starttimestamp
checks_degradedinteger
checks_downinteger
checks_totalinteger
checks_upinteger
latency_avg_msnumber or null
latency_max_msinteger or null
latency_min_msinteger or null
latency_p50_msinteger or null
latency_p95_msinteger or null
latency_p99_msinteger or null
locationstring

RollupsResponse

GET .../rollups response.

FieldTypeDescription
dataarray of Rollup
granularityhour | day

Series

The response-time chart.

FieldTypeDescription
bandsarray of SeriesBand
fromtimestamp
rangestring
seriesarray of SeriesLine
step_sinteger
totimestamp

SeriesBand

A non-up status period inside the range.

FieldTypeDescription
fromtimestamp
statusunknown | up | down | degraded | no_data | paused
totimestamp

SeriesLine

One location's latency points.

FieldTypeDescription
locationstring
pointsarray of array of integer or null[unix_s, latency_ms | null] for every step.

SslExpirySpec

ssl_expiry.

FieldTypeDescription
cert_expiry_warn_daysintegerDegraded this many days before expiry, 1-90 (default 14).
hoststringHost name or public IP address.
ip_familyauto | ipv4 | ipv6
portinteger1-65535 (default 443).
timeout_msinteger1000-30000 (default 10000).
verify_tlsbooleanDefault true.

TcpSpec

tcp.

FieldTypeDescription
hoststringHost name or public IP address.
ip_familyauto | ipv4 | ipv6
portinteger1-65535.
timeout_msinteger500-30000 (default 5000).

TestSent

POST .../test response.

FieldTypeDescription
notification_idid ntf_…

TokenInfo

GET /token: the calling token, its org and effective role.

FieldTypeDescription
effective_roleadmin | member | viewermin(token role, creator's current role): what the token may do.
orgTokenOrg
tokenApiToken

TokenOrg

{ "id": "org_…", "name": "…" }.

FieldTypeDescription
idid org_…
namestring

TraceHop

One TTL of a trace.

FieldTypeDescription
addrsarray of TraceHopAddrDistinct responders, most replies first (at most 4); several mean load-balanced paths.
receivedinteger
rtt_avg_usinteger or null
rtt_last_usinteger or null
rtt_max_usinteger or null
rtt_min_usinteger or null
rtt_stdev_usinteger or null
sentinteger
ttlinteger
unreachablenet | host | protocol | port | prohibited | other or null

TraceHopAddr

One responder of a hop.

FieldTypeDescription
ipstring or nullnull when the server withheld it: private, shared and reserved ranges (the probe host's own network) are never shown.
namestring or nullReverse DNS name, when there is one.
repliesintegerReplies from this address.

TraceLocation

{ "code": "lon1", "name": "London" }.

FieldTypeDescription
codestring
idid loc_…
namestring

UpdateMaintenanceRequest

PATCH /orgs/{org}/maintenance/{mnt} body: rename, or move the end of a window that has not ended (to end it now, use …/end). The start can only change before the window starts.

FieldTypeDescription
ends_at (optional)timestamp or null
name (optional)string or null
starts_at (optional)timestamp or null

UserRef

{ "id": "usr_…", "name": "…" }.

FieldTypeDescription
idid usr_…
namestring

VerifyInput

POST .../verify body.

FieldTypeDescription
codestringThe 6-digit code.