Developer docs

Get one audit

GET/sites/{siteId}/audits/{auditId}
Scope
sites:read
MCP tool
audit_status

Get one audit's status Also answers for the recheck an already_running error named. pagesCrawled moves while it runs.

Parameters

NameInDetails
siteIdRequiredpathstringWebsite id, from GET /sites.
auditIdRequiredpathstringAudit id, from POST /sites/{siteId}/audits or GET /sites/{siteId}/audits.

Response

200 · application/json

FieldDetails
idstring · required; Audit id
kindaudit | recheck | hook · required; audit: full audit; recheck: rechecks issues; hook: started by a deploy hook
statusqueued | running | done | failed | cancelled · required; Where the audit stands
stagerobots | crawl | analyze | done · required; Step it is at
pagesCrawledinteger · required; Pages crawled so far
pagesDiscoveredinteger · required; Pages found so far
pageBudgetinteger · required; Most pages this audit crawls
timeLimitMinutesinteger · required; Time limit, in minutes
cappedByPlantrue or false · required; True when the website's own budget was above the plan's pages per audit, so the audit got the plan's limit
coverageobject or null · required; Sitemap coverage; null when no sitemap is known
coverage.sitemapUrlsinteger · required; Addresses in the sitemap
coverage.sitemapCrawledinteger · required; Of those, crawled
coverage.percentinteger · required; Share crawled, 0–100
partialReasonstring or null · required; Why it stopped early: page budget reached, page budget of your plan reached, time budget reached or cancelled; null when it covered everything it found
issuesFoundinteger or null · required; Issues found; null until it is done
startedByperson | schedule · required; Started by a person (app, API or MCP) or the weekly schedule
queuedAtstring or null · required; When it was queued
startedAtstring or null · required; When it started
finishedAtstring or null · required; When it finished
errorstring or null · required; Why it failed
linkstring · required; The Audit screen in the app

Errors

StatusMeaning
401Missing, unknown or revoked key. Codes: missing_key, invalid_key.
403The key lacks the scope, covers another website, or its owner lost access. Codes: missing_scope, other_site, owner_left, no_owner, forbidden.
404Not found. Codes: not_found.
429Too many requests this hour for this key. Codes: rate_limited.

Example request

curl \
  -H "Authorization: Bearer mr_ws_…" \
  "https://app.monoranks.com/api/v1/sites/SITE_ID/audits/AUDIT_ID"

Example response

{
  "id": "d4f6a8c0-2e4a-4c6e-8a0c-4e6a8c0e2a4b",
  "kind": "audit",
  "status": "done",
  "stage": "done",
  "pagesCrawled": 412,
  "pagesDiscovered": 418,
  "pageBudget": 500,
  "timeLimitMinutes": 30,
  "cappedByPlan": false,
  "coverage": {
    "sitemapUrls": 398,
    "sitemapCrawled": 391,
    "percent": 98
  },
  "partialReason": null,
  "issuesFound": 23,
  "startedBy": "schedule",
  "queuedAt": "2026-10-04T02:00:01.000Z",
  "startedAt": "2026-10-04T02:00:04.000Z",
  "finishedAt": "2026-10-04T02:41:12.000Z",
  "error": null,
  "link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/audit"
}

The MCP server does the same with the tool audit_status.