GET
/
site
/
{siteId}
Retrieve details of a specific site for the authenticated user
curl --request GET \
  --url https://api.watchmantower.com/public/v1/site/{siteId} \
  --header 'Authorization: Bearer <token>'
{
  "success": true,
  "message": "Site fetched successfully",
  "code": 200,
  "data": {
    "_id": "<string>",
    "url": "<string>",
    "protocol": "<string>",
    "headers": [
      "<unknown>"
    ],
    "name": "<string>",
    "checkInterval": 123,
    "parentGroup": "<string>",
    "pause": true,
    "notes": "<string>",
    "timeout": 123,
    "method": "<string>",
    "successCodes": [
      123
    ],
    "errorCodes": [
      123
    ],
    "hasCertificateError": true,
    "isFrozen": true,
    "createdAt": "<string>",
    "updatedAt": "<string>",
    "__v": 123,
    "id": "<string>",
    "uptimeSummary": {
      "uptimePercentage": 123,
      "downtimePercentage": 123,
      "totalDowntimeMinutes": 123,
      "daysCount": 123
    },
    "stat": [
      {
        "_id": "<string>",
        "site": "<string>",
        "date": "<string>",
        "__v": 123,
        "createdAt": "<string>",
        "downRate": 123,
        "upRate": 123,
        "updatedAt": "<string>"
      }
    ],
    "lastCheckTime": "<string>",
    "domainExpiration": "<unknown>",
    "role": {
      "name": "<string>",
      "permissions": [
        "<string>"
      ]
    },
    "legacyStatus": "<string>",
    "enabled": true,
    "regions": [
      "<string>"
    ],
    "checkIntervalMs": 123,
    "healthSummary": "<string>",
    "conditions": [
      {
        "key": "ssl_expiry",
        "scope": "<string>",
        "summary": "<string>",
        "since": "2023-11-07T05:31:56Z",
        "evaluatedAt": "2023-11-07T05:31:56Z"
      }
    ],
    "sslInfo": {
      "expiresAt": "2023-11-07T05:31:56Z",
      "issuer": "<string>",
      "daysRemaining": 123
    },
    "domain": {
      "domain": "<string>",
      "expiresAt": "2023-11-07T05:31:56Z",
      "registrar": "<string>"
    },
    "wordpress": {
      "value": true,
      "manualOverride": true
    }
  }
}
Retrieve the full monitoring picture of a single site: current health state, uptime summary, standing conditions (SSL expiry, domain expiry, chronic instability), monitored regions, and — when detected — WordPress metadata.
Two fields describe “how the site is doing” and they are not the same thing:
  • state — the monitoring engine’s health verdict (healthy / degraded / unhealthy / unknown). Prefer this for programmatic checks.
  • status — the visitor-facing label derived from state and the pause flag (up / down / paused / unknown).
legacyStatus exists only for backwards compatibility and is not updated by the current pipeline — do not build on it.

Uptime statistics window (statDays)

The response embeds daily uptime statistics in the stat array (one entry per day, with upRate / downRate as fractions between 0 and 1) and an uptimeSummary aggregated over those days. By default the last 30 days are returned. Pass the optional statDays query parameter to widen or narrow that window:
# Last 90 days of uptime statistics
GET /site/{siteId}?statDays=90
  • Default: 30 — omitting the parameter (or sending an invalid value) keeps the previous behaviour.
  • Maximum: 90 — larger values are not rejected; the API silently caps them, so statDays=365 returns the last 90 days.
  • uptimeSummary always reflects the requested window, and its daysCount field tells you how many days actually had data (a recently added site may have fewer days than requested).

Standing conditions

The conditions array is the same source the Watchman Tower dashboard reads: each entry carries a key (e.g. ssl_expiry, domain_expiry, chronic_performance), a level (ok / warning / critical), and a human-readable summary produced by the monitoring engine. Thresholds live in the engine, so the API, the dashboard, and e-mail reminders always agree.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

siteId
string
required

ID of the site to retrieve

Response

200 - application/json

Site fetched successfully.

success
boolean
Example:

true

message
string
Example:

"Site fetched successfully"

code
number
Example:

200

data
SiteDetail · object