Skip to content
CheckMySites

API reference

Run audits and pull reports programmatically. Available on the Growth plan and above.

Base URL: /apiJSON only120 requests / minute

Response envelope

Every endpoint returns one of two shapes.

// Success
{ "ok": true, "data": { ... } }

// Failure
{ "ok": false, "error": { "code": "QUOTA_EXCEEDED", "message": "..." } }

Validation failures add a fields object mapping each invalid path to its messages. Branch on ok, then on error.code — the codes are stable, the messages are written for humans and may be reworded.

Authentication

Send your key as a bearer token. Keys are created in Settings, are stored hashed, and the plaintext is shown exactly once.

curl https://checkmysites.com/api/analyze \
  -H "Authorization: Bearer cms_live_..."

Status codes

CodeMeaning
200Success
400Malformed request, or a URL that cannot be audited
401Missing or invalid key
402No active plan, or monthly quota exhausted
404Not found — also returned for a resource you do not own
422Validation failed, or the target site could not be audited
429Rate limited — see the Retry-After header
500Server error, logged with a reference

A target site that cannot be reached returns 422, not 500. The request was well-formed; the failure is a fact about the audited site rather than about us.

POST /api/analyze

Runs an audit synchronously. Most complete in 15–45 seconds, so set a client timeout of at least 120 seconds.

curl -X POST https://checkmysites.com/api/analyze \
  -H "Authorization: Bearer $CMS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'
{
  "ok": true,
  "data": {
    "auditId": "clx...",
    "status": "COMPLETED",
    "domain": "example.com",
    "overallScore": 74,
    "grade": "B",
    "durationMs": 8421,
    "reportUrl": "/reports/clx..."
  }
}

Error codes

CodeMeaning
NO_SUBSCRIPTIONNo plan chosen
SUBSCRIPTION_INACTIVEPlan exists but is not active
QUOTA_EXCEEDEDMonthly allowance used
PRIVATE_ADDRESSResolves to a private address
BAD_PROTOCOLNot http or https
DNS_NOT_FOUNDDomain does not resolve
NOT_HTMLThe URL does not return a web page
TIMEOUTThe site did not respond in time

GET /api/analyze

Quota preflight — cheap, and does not consume an audit.

{
  "ok": true,
  "data": {
    "authenticated": true,
    "canAudit": true,
    "tier": "GROWTH",
    "used": 47, "limit": 200, "remaining": 153,
    "periodEnd": "2026-09-03T00:00:00.000Z"
  }
}

GET /api/report/:id

The complete report: category scores, every finding with its evidence and remediation, measured metrics, and the AI-written summary with grouped recommendations.

curl "https://checkmysites.com/api/report/$AUDIT_ID" \
  -H "Authorization: Bearer $CMS_API_KEY" \
  | jq '.data.findings[] | select(.status == "FAIL") | {checkId, title, severity}'

GET /api/history

Cursor-paginated. Cursors rather than offsets, because an offset shifts when a new audit is inserted mid-scroll and you end up skipping or duplicating rows.

ParameterDefaultNotes
limit201–100
cursorPrevious response's nextCursor
domainSubstring match
statusCOMPLETED, FAILED, …

POST /api/export/:format

:format is pdf, csv or json. Returns the file directly, not a JSON envelope.

curl -X POST https://checkmysites.com/api/export/pdf \
  -H "Authorization: Bearer $CMS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"auditId": "clx..."}' \
  -o report.pdf

Nothing is stored server-side — exports are generated on demand and streamed. Rate limited to 30 per hour.

Check IDs

Every finding carries a stable, dot-namespaced checkId. These are safe to key dashboards and trend analysis on; the titles and descriptions are not.

PrefixCategoryExample
seo.*SEOseo.title.missing
a11y.*Accessibilitya11y.img.alt-missing
perf.*Performanceperf.compression.missing
cwv.*Core Web Vitalscwv.lcp.poor
security.*Securitysecurity.header.csp-missing
content.*Content qualitycontent.depth.thin
mobile.*Mobilemobile.viewport.missing
ai.*AI readinessai.render.client-side
tech.*Technicaltech.redirect.long-chain
cro.*Conversioncro.cta.none

API access is included on Growth and above.