Data

Website health summary

GET /api/v1/projects/{id}/health

Uptime, SSL, domain expiry, DNS, sitemap, files, HTTP, ports, crawl stats, security headers and open findings by severity — from stored results, so it is safe to poll. Security details are hidden if you lack the view-security permission.

API key access
Read only or read and write
Project permission
View health
Success
200 — OK

Parameters

Path

ParameterTypeNotes
id required string Project id

Example request

Replace tk_live_YOUR_KEY with your API key and the ids with your own.

curl 'https://trackerv2.marketingplanet.global/api/v1/projects/6650a4c2e1b3d5f7a9c1e301/health' \
  -H 'Authorization: Bearer tk_live_YOUR_KEY'

Example response

200 OK
{
  "data": {
    "uptime": {
      "pct": 50,
      "avgMs": 1076,
      "avgTtfbMs": 1043,
      "sampleSize": 2,
      "lastStatus": "success",
      "lastCheckedAt": "2026-10-06T09:25:12.000Z",
      "phaseOn": true
    },
    "ssl": {
      "status": "ok",
      "expiresAt": "2026-12-09T23:59:59.000Z",
      "daysLeft": 64,
      "issuer": "Let's Encrypt",
      "subjectCn": "acmeretail.com",
      "lastCheckedAt": "2026-10-06T09:25:12.000Z",
      "lastError": null,
      "phaseOn": true
    },
    "domainExpiry": {
      "status": "ok",
      "expiresAt": null,
      "daysLeft": 212,
      "queriedName": "acmeretail.com",
      "registrar": "Namecheap, Inc.",
      "lastCheckedAt": "2026-10-05T03:00:00.000Z",
      "lastError": null,
      "phaseOn": true
    },
    "dns": {
      "status": "ok",
      "monitorCount": 0,
      "changedCount": 0,
      "lastCheckedAt": "2026-10-06T09:00:02.000Z",
      "lastError": null,
      "phaseOn": true
    },
    "sitemap": {
      "status": "ok",
      "lastCheckedAt": "2026-10-06T03:00:41.000Z",
      "pagesFound": 128,
      "lastError": null,
      "structureOk": null,
      "structureIssueCount": null
    },
    "files": {
      "robots": {
        "status": "ok",
        "lastCheckedAt": "2026-10-06T03:00:39.000Z",
        "lastError": null,
        "phaseOn": true,
        "sitemapDirectiveOk": null,
        "sitemapUrlCount": 1
      },
      "llm": {
        "status": "pending",
        "lastCheckedAt": null,
        "lastError": null,
        "phaseOn": false
      }
    },
    "technical": {
      "lastCheckedAt": "2026-10-06T03:00:45.000Z",
      "intervalMinutes": 1440,
      "phaseOn": true
    },
    "httpVersion": {
      "http2": true,
      "httpVersion": "h2",
      "http3": "not-measured",
      "checkedAt": "2026-10-06T03:00:44.000Z",
      "errorClass": null
    },
    "hostVersion": {
      "ok": true,
      "preferredHost": "acmeretail.com",
      "alternateHost": "www.acmeretail.com",
      "checkedAt": "2026-10-06T03:00:44.000Z",
      "issueMessage": null
    },
    "compression": {
      "status": "ok",
      "encoding": "br",
      "active": true,
      "lastCheckedAt": "2026-10-06T09:25:12.000Z",
      "phaseOn": true
    },
    "cacheControl": {
      "status": "ok",
      "raw": "public, max-age=300",
      "cdnHint": null,
      "lastCheckedAt": "2026-10-06T09:25:12.000Z",
      "phaseOn": true
    },
    "ports": {
      "count": 1,
      "activeCount": 1,
      "up": 1,
      "down": 0,
      "monitors": [
        {
          "id": "6657b1d9f8c0e2a4b6d8fa01",
          "label": "SMTP",
          "port": 587,
          "lastStatus": "success",
          "lastCheckedAt": "2026-10-06T09:15:00.000Z",
          "isActive": true
        }
      ]
    },
    "udp": {
      "status": "pending",
      "port": null,
      "packetLoss": null,
      "lastCheckedAt": null,
      "lastError": null,
      "phaseOn": false
    },
    "crawl": {
      "pageCount": 128,
      "crawledCount": 126,
      "pendingCount": 2,
      "orphanCount": 3,
      "crawledPct": 98.4,
      "statsComputedAt": "2026-10-06T03:01:10.000Z"
    },
    "security": {
      "canView": true,
      "headers": {
        "items": [
          {
            "key": "strict-transport-security",
            "label": "HSTS",
            "present": true,
            "value": "max-age=31536000"
          },
          {
            "key": "content-security-policy",
            "label": "CSP",
            "present": false,
            "value": null
          },
          {
            "key": "x-frame-options",
            "label": "X-Frame-Options",
            "present": false,
            "value": null
          },
          {
            "key": "x-content-type-options",
            "label": "X-Content-Type-Options",
            "present": true,
            "value": "nosniff"
          },
          {
            "key": "referrer-policy",
            "label": "Referrer-Policy",
            "present": false,
            "value": null
          }
        ],
        "presentCount": 2,
        "total": 5
      },
      "lastProbeAt": "2026-10-06T09:25:12.000Z",
      "crossHostRedirect": false,
      "downgradedToHttp": false
    },
    "findings": {
      "open": 12,
      "bySeverity": {
        "critical": 0,
        "high": 1,
        "medium": 4,
        "low": 7
      },
      "includesSecurity": true
    }
  }
}

Response fields

FieldTypeNotes
data object Each section carries its own status, lastCheckedAt and phaseOn where relevant.
data.uptime object
data.uptime.pct number or null
data.uptime.avgMs number or null
data.uptime.avgTtfbMs number or null
data.uptime.sampleSize integer
data.uptime.lastStatus string or null
data.uptime.lastCheckedAt string (date-time) or null
data.uptime.phaseOn boolean
data.ssl object
data.domainExpiry object
data.dns object
data.sitemap object
data.files object
data.files.robots object
data.files.llm object
data.technical object
data.httpVersion object
data.hostVersion object
data.compression object
data.cacheControl object
data.ports object
data.udp object
data.crawl object
data.crawl.pageCount integer
data.crawl.crawledCount integer
data.crawl.pendingCount integer
data.crawl.orphanCount integer
data.crawl.crawledPct number or null
data.crawl.statsComputedAt string (date-time) or null
data.security object
data.findings object
data.findings.open integer
data.findings.bySeverity object
data.findings.includesSecurity boolean

Errors

Besides the errors any request can return (bad or missing key, plan, scope, rate limit), this endpoint can return:

Statuserror.codeMeaning
404not-foundThe resource does not exist or you cannot open it. Tracker does not reveal which.
403flag-viewHealthYour project membership does not include viewing health.

Errors always look like { "error": { "code": "…", "message": "…" } }. See Errors & limits.