Developer docs

Start an audit

POST/sites/{siteId}/audits
Scope
audits:run
MCP tool
start_audit

Start a full audit The same as the Run audit button: one crawl per website at a time, and at most 3 audits per website in 24 hours through the API and MCP. Answers at once; poll GET /sites/{siteId}/audits/{auditId}.

Parameters

NameInDetails
siteIdRequiredpathstringWebsite id, from GET /sites.

Request body

FieldDetails
pageBudgetinteger · min 1; Most pages to crawl: at least 50 (or the plan limit when lower), at most the plan's pages per audit. Default: the website's audit budget, capped at that limit. A bigger budget than the website's own gets a longer time limit (at most 120 minutes).
{
  "pageBudget": 500
}

Response

202 · application/json

FieldDetails
queuedtrue or false · required; Always true
auditIdstring · required; Id to poll
statusqueued | running | done | failed | cancelled · required; queued
pageBudgetinteger · required; Most pages it crawls
timeLimitMinutesinteger · required; Time limit, in minutes
cappedByPlantrue or false · required; True when the plan's limit lowered the budget
planLimitinteger · required; The plan's pages per audit
startsLeftTodayinteger · required; API and MCP starts left in the 24 hours
pollstring · required; Where to poll its status
linkstring · required; The Audit screen in the app
notestring · required; What happens next

Notes

The call answers 202 at once with an auditId and a poll address; follow it with GET /sites/{siteId}/audits/{auditId} about once a minute. pageBudget is optional and can be at most your plan’s pages per audit: Free 200, Starter 500, Agency 1,000, Enterprise 10,000. Only one crawl runs per website at a time, and at most 3 audits per website a day can be started through the API and MCP. The weekly audit runs as usual.

Errors

StatusMeaning
400Bad request. Codes: bad_page_budget, over_plan_limit.
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.
409Conflict with the current state. Codes: already_running.
429A limit is reached. rate_limited: too many requests this hour for this key. Codes: rate_limited, too_many_audits.

Example request

curl -X POST \
  -H "Authorization: Bearer mr_ws_…" \
  -H "Content-Type: application/json" \
  -d '{"pageBudget":500}' \
  "https://app.monoranks.com/api/v1/sites/SITE_ID/audits"

Example response

{
  "queued": true,
  "auditId": "d4f6a8c0-2e4a-4c6e-8a0c-4e6a8c0e2a4b",
  "status": "queued",
  "pageBudget": 500,
  "timeLimitMinutes": 30,
  "cappedByPlan": false,
  "planLimit": 500,
  "startsLeftToday": 2,
  "poll": "https://app.monoranks.com/api/v1/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/audits/d4f6a8c0-2e4a-4c6e-8a0c-4e6a8c0e2a4b",
  "link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/audit",
  "note": "Queued: a full audit crawls the website, then rebuilds issues, scores and the llms.txt draft."
}

The MCP server does the same with the tool start_audit.