Skip to main content
All paths are prefixed with /api/v1. Unless noted, requests require:
  • Authorization: Bearer {token}
  • Accept: application/json
  • Verified user email
  • Appropriate OAuth scope
Team-scoped routes also require active team subscription.

Me

GET /me

Returns the authenticated user and all teams they belong to. Scope: teams:read Response 200:
{
  "data": {
    "user": { "id": 1, "name": "...", "email": "...", "email_verified_at": "..." },
    "teams": [ /* Team resources with limits */ ]
  }
}

Teams

GET /teams

List teams for the authenticated user. Scope: teams:read
Team permission: viewAny on teams
Response 200: { "data": [ Team, ... ] }

GET /teams/{team}

Show one team by numeric id. Scope: teams:read
Team permission: view on team
Response 200: Team resource

GET /teams/{team}/monitoring

Read team monitoring defaults: enabled tools, cadences, status-check header, issue settings, quiet time, escalation, cadence presets, and UI helper metadata. Scope: teams:read
Team permission: view team
Response 200:
{
  "data": {
    "settings": {
      "tools": {
        "status": {
          "enabled": true,
          "cadence_minutes": 5,
          "settings": {
            "header": { "name": null, "value": null },
            "failures_to_open": 2
          }
        }
      },
      "quiet_time": { "enabled": false, "starts_at": "22:00", "ends_at": "07:00" },
      "escalation": { "enabled": false, "intervals": [] }
    },
    "cadence_presets": [{ "minutes": 5, "label": "5 minutes", "disabled": false }],
    "minimum_check_cadence_minutes": 5,
    "allowed_tools": [{ "value": "status", "label": "Status", "minimum_check_cadence_minutes": 5 }],
    "failure_threshold_presets": [{ "key": "instant", "label": "Instant", "failures_to_open": 1 }],
    "escalation_interval_presets": [{ "key": "15m", "label": "15 minutes", "minutes": 15 }],
    "dns_record_types": ["A", "AAAA", "CNAME", "MX", "NS", "TXT"]
  }
}
See Team monitoring resource for field details.

PATCH /teams/{team}/monitoring

Update team monitoring defaults. Mirrors the dashboard Monitoring page (automatic checks, issue rules, escalation, and quiet time). Scope: teams:write
Team permission: updateMonitoring (admins and owners)
Response 200: Same shape as GET /teams/{team}/monitoring
Body:
FieldRequiredDescription
monitoring_settingsyesFull team monitoring settings object
monitoring_settings.toolsyesMap of tool value → tool settings
monitoring_settings.tools.{tool}.enabledyesWhether the tool runs automatically and can open issues
monitoring_settings.tools.{tool}.cadence_minutesyesCadence preset in minutes
monitoring_settings.tools.{tool}.settingsnoTool-specific issue settings
monitoring_settings.quiet_timeno{ "enabled", "starts_at", "ends_at" } in H:i format
monitoring_settings.escalationno{ "enabled", "intervals" } follow-up notification schedule
Tool-specific fields match the monitoring settings schema.
monitoring_settings.tools must include the tools you want configured. Dashboard updates send the full settings object.
DNS expected records are not writable through this endpoint. Use the dashboard or per-site monitoring_settings.tools.dns.settings.expected_records on PATCH /sites/{site}.
Example:
{
  "monitoring_settings": {
    "tools": {
      "status": {
        "enabled": true,
        "cadence_minutes": 60,
        "settings": {
          "header": { "name": null, "value": null },
          "failures_to_open": 1,
          "successes_to_resolve": 1,
          "confirmation_retry_minutes": 2,
          "incident_follow_up_minutes": 5
        }
      },
      "ssl": {
        "enabled": true,
        "cadence_minutes": 1440,
        "settings": {
          "expiry_days": 14,
          "failures_to_open": 1,
          "confirmation_retry_minutes": 2
        }
      },
      "dns": {
        "enabled": true,
        "cadence_minutes": 1440,
        "settings": {
          "hard_failures_only": true,
          "monitored_record_types": ["A", "TXT"]
        }
      },
      "broken-links": {
        "enabled": true,
        "cadence_minutes": 1440,
        "settings": {
          "min_broken_count": 4,
          "consecutive_breaches_to_open": 1,
          "ignore_paths": ["/wp-admin/*"],
          "ignore_external_links": true,
          "ignore_redirects": true
        }
      },
      "performance": {
        "enabled": true,
        "cadence_minutes": 1440,
        "settings": {
          "min_score": 60,
          "max_response_time_ms": 3000,
          "max_ttfb_ms": 3000,
          "max_load_time_seconds": 5,
          "consecutive_breaches_to_open": 2
        }
      }
    },
    "quiet_time": {
      "enabled": false,
      "starts_at": "22:00",
      "ends_at": "07:00"
    },
    "escalation": {
      "enabled": true,
      "intervals": [60]
    }
  }
}
Updating cadences resyncs automatic schedules for all team sites.

Monitoring settings fields

The same nested shape is used for team monitoring updates and per-site overrides.
FieldTypeLimitsDescription
tools.status.enabledbooleanRun Status automatically and allow status issues
tools.status.cadence_minutesintegercadence presetAutomatic Status cadence
tools.status.settings.header.namestring | nullvalid HTTP header nameHeader name sent with status checks
tools.status.settings.header.valuestring | nullmax 2,000 chars, no newlinesHeader value sent with status checks
tools.status.settings.failures_to_openintegermin 1Failed status checks before opening an issue
tools.status.settings.successes_to_resolveintegermin 1Successful checks before resolving
tools.status.settings.confirmation_retry_minutesinteger1-5Confirmation retry delay
tools.status.settings.incident_follow_up_minutesinteger1-60Active incident follow-up interval
tools.ssl.enabledbooleanRun SSL automatically and allow SSL issues
tools.ssl.cadence_minutesintegercadence presetAutomatic SSL cadence
tools.ssl.settings.expiry_daysintegermin 1Days before expiry to alert
tools.ssl.settings.failures_to_openintegermin 1Failed SSL checks before opening an issue
tools.ssl.settings.confirmation_retry_minutesinteger1-5Confirmation retry delay
tools.broken-links.enabledbooleanRun Broken Links automatically and allow broken-link issues
tools.broken-links.cadence_minutesintegercadence preset, 12-hour floorAutomatic Broken Links cadence
tools.broken-links.settings.min_broken_countintegermin 1Broken URLs to breach
tools.broken-links.settings.consecutive_breaches_to_openintegermin 1Consecutive breaches before opening
tools.broken-links.settings.ignore_pathsstring[]max 255 chars eachCrawl exclusion path patterns
tools.broken-links.settings.ignore_external_linksbooleanExclude links outside the site host
tools.broken-links.settings.ignore_redirectsbooleanExclude redirect responses
tools.performance.enabledbooleanRun Performance automatically and allow performance issues
tools.performance.cadence_minutesintegercadence preset, 12-hour floorAutomatic Performance cadence
tools.performance.settings.urlstring | nullsame site domainPage URL to audit instead of the site root
tools.performance.settings.min_scoreinteger1-100Minimum performance score
tools.performance.settings.max_response_time_msinteger | nullmin 1Legacy max response time, normalized with max_ttfb_ms
tools.performance.settings.max_ttfb_msinteger | nullmin 1Max time to first byte
tools.performance.settings.max_load_time_secondsinteger | nullmin 1Max Time to Interactive
tools.performance.settings.consecutive_breaches_to_openintegermin 1Consecutive breaches before opening
tools.dns.enabledbooleanRun DNS automatically and allow DNS issues
tools.dns.cadence_minutesintegercadence presetAutomatic DNS cadence
tools.dns.settings.hard_failures_onlybooleanOpen only on lookup failures when true
tools.dns.settings.monitored_record_typesstring[]A, AAAA, CNAME, MX, NS, TXTRecord types to monitor for changes
tools.dns.settings.expected_recordsobjectper-site onlyExpected DNS records by type
quiet_time.enabledbooleanteam onlySuppress outbound issue alerts during a daily window
quiet_time.starts_atstringH:iQuiet time start
quiet_time.ends_atstringH:i, different from startQuiet time end
escalation.enabledbooleanteam onlySend reminders for active issues
escalation.intervalsinteger[]15, 30, 60, 360, 1440Reminder schedule in minutes
snoozed_untilstring | nullper-site onlyPause issue opening for one site until this datetime

Sites

Team-scoped site management uses numeric {team} id. Individual site routes use {site} uuid.

GET /teams/{team}/sites

Paginated site list for a team. Includes latest check per tool. Scope: sites:read
Team permission: viewAny sites
Query parameters:
ParameterTypeDescription
searchstringFilter by name or URL (partial match)
pinnedbooleantrue = pinned only; false = unpinned only
toolstringSites with this tool enabled
statusstringSites with a check in this status (pending, completed, …)
sortstringcreated_at, -created_at, name, -name, pinned
pageintegerPage number
per_pageintegerPage size (max 100)
Response 200: Paginated Site collection

POST /teams/{team}/sites

Create a site. Scope: sites:write
Team permission: create site
Response: 201 with Site resource
Body:
FieldRequiredDescription
urlyesValid HTTP(S) URL (normalized)
namenoDisplay name; generated from domain if omitted
notesnoTeam notes
js_renderednoBoolean; broken-link JS rendering
monitoring_settingsnoPer-site monitoring overrides using the monitoring settings schema
The API accepts omitted name. The dashboard add-site form requires a display name and exposes detailed overrides on the site edit page after creation.
Plan limits apply to site count and automatic monitoring cadence.
Example:
{
  "url": "https://example.com",
  "name": "Example",
  "monitoring_settings": {
    "tools": {
      "status": {
        "enabled": true,
        "cadence_minutes": 60,
        "settings": {
          "header": { "name": null, "value": null }
        }
      },
      "ssl": {
        "enabled": true,
        "cadence_minutes": 1440,
        "settings": { "expiry_days": 14 }
      }
    }
  }
}

POST /teams/{team}/sites/bulk

Create up to 100 sites in one request. Scope: sites:write
Team permission: create site
Response 200: Bulk response
Body:
{
  "sites": [
    { "url": "https://a.example.com", "name": "A" },
    { "url": "https://b.example.com" }
  ]
}

GET /sites/{site}

Show one site by uuid. Scope: sites:read
Team permission: view site
Response 200: Site resource with latest_checks

PATCH /sites/{site}

Update a site. Sends the full site shape expected by the dashboard update form (including url). Scope: sites:write
Team permission: update site
Response 200: Updated Site resource
Body (all optional except url is required when sent):
FieldDescription
urlCanonical URL. Required by the current validator.
nameDisplay name
notesNotes
pinnedBoolean pin state
js_renderedBroken-link JS mode
monitoring_settingsPer-site monitoring overrides using the monitoring settings schema
Example:
{
  "url": "https://example.com",
  "monitoring_settings": {
    "tools": {
      "status": {
        "enabled": true,
        "cadence_minutes": 60,
        "settings": {
          "failures_to_open": 1,
          "successes_to_resolve": 1
        }
      },
      "broken-links": {
        "enabled": true,
        "cadence_minutes": 1440,
        "settings": {
          "ignore_paths": ["/admin", "/preview"]
        }
      },
      "dns": {
        "enabled": true,
        "cadence_minutes": 1440,
        "settings": {
          "hard_failures_only": false,
          "expected_records": {
            "A": ["203.0.113.1"]
          }
        }
      }
    },
    "snoozed_until": null
  }
}
Updating enabled checks or cadences resyncs automatic schedules.

DELETE /sites/{site}

Delete a site and its schedules, checks, and issues. Scope: sites:delete
Team permission: delete site
Response: 204 No Content

Checks

GET /sites/{site}/checks

Paginated check history for a site. Scope: checks:read
Team permission: viewChecks
Query parameters:
ParameterTypeDescription
typestringTool filter
statusstringCheck status
automaticbooleanAutomatic vs manual
run_reasonstringscheduled, confirmation_retry, incident_follow_up
fromdatecreated_at ≥ date
todatecreated_at ≤ date (must be ≥ from)
page, per_pageintegerPagination
Response 200: Paginated Check collection

POST /sites/{site}/checks

Queue one or more manual checks. Scope: checks:run
Team permission: createCheck
Rate limit: 10 requests / minute
Response: 202 Accepted with array of Check resources (usually pending)
Body:
FieldRequiredDescription
toolsnoTool values to run; defaults to all enabled site tools
automaticnoBoolean; default false for API runs
Rules:
  • Each tool must be enabled on the site
Example:
{
  "tools": ["status", "ssl"],
  "automatic": false
}
Poll GET /checks/{check} until status is terminal. See Check results.

GET /checks/{check}

Show one check by uuid, including full result and nested site summary. Scope: checks:read
Team permission: view check (via site team membership)
Response 200: Check resource

DELETE /checks/{check}

Delete a manual check (automatic: false). Scope: checks:delete
Team permission: deleteCheck
Response: 204 on success; 403 for automatic checks

Reports

Read-only aggregates. Require sites:read and view on the site.

GET /sites/{site}/reports/uptime

Daily uptime percentages from automatic status checks. Query: days (integer, default 90, max 365) Response 200: Uptime report

GET /sites/{site}/reports/performance

Daily performance aggregates from automatic performance checks. Query: days (integer, default 30, max 365) Response 200: Performance report

Issues

Read-only access to issue records. The dashboard Issues page supports acknowledge, resolve, and bulk actions; those operations are not available through the API.

GET /issues

Paginated list of issues across teams the user can view. Scope: issues:read
Team permission: viewIssues per team
Query parameters:
ParameterTypeDefaultDescription
teamintegerLimit to one team id
statusstringactiveactive (open + acknowledged), open, acknowledged, or resolved
sitestringSite uuid
toolstringCheck tool (status, ssl, dns, broken-links, performance)
severitystringcritical, warning, info
page, per_pageintegerPagination (max 100 per page)
Response 200: Paginated collection of Issue resources.

GET /issues/{issue}

Retrieve a single issue with related site, check, timeline, and acknowledgement/resolution metadata. Scope: issues:read
Team permission: view the issue’s team
Response 200: Issue resource

Endpoint summary

Quick reference table:
MethodPathScope
GET/meteams:read
GET/teamsteams:read
GET/teams/{team}teams:read
GET/teams/{team}/monitoringteams:read
PATCH/teams/{team}/monitoringteams:write
GET/teams/{team}/sitessites:read
POST/teams/{team}/sitessites:write
POST/teams/{team}/sites/bulksites:write
GET/sites/{site}sites:read
PATCH/sites/{site}sites:write
DELETE/sites/{site}sites:delete
GET/sites/{site}/checkschecks:read
POST/sites/{site}/checkschecks:run
GET/sites/{site}/reports/uptimesites:read
GET/sites/{site}/reports/performancesites:read
GET/checks/{check}checks:read
DELETE/checks/{check}checks:delete
GET/issuesissues:read
GET/issues/{issue}issues:read

See also