Get a website summary
GET
/sites/{siteId}- Scope
sites:read- MCP tool
site_summary
Website summary Scores (with the inputs that stopped updating), the last audit, open issues, waiting actions, WordPress access, and how fresh each connected data source is.
Parameters
| Name | In | Details |
|---|---|---|
siteIdRequired | path | stringWebsite id, from GET /sites. |
Response
200 · application/json
| Field | Details |
|---|---|
id | string · required; Website id |
name | string · required; Website name |
url | address (URL) · required; Home page address |
platform | wordpress | astro | shopify | webflow | other | unknown · required; What the website runs on |
score | object or null · required; Latest score; null before the first audit |
score.site | integer or null · required; Site score, 0 to 100; null until enough is measured |
score.health | integer or null · required; Health score, 0 to 100; null until enough is measured |
score.aeo | integer or null · required; AEO readiness, 0 to 100; null until enough is measured |
score.coverage | number · required; Share of the website that could be measured, 0 to 1 |
score.confidence | high | medium | low · required; How sure the score is |
score.staleInputs | list of object · required; Connected sources whose data stopped updating |
score.version | string · required; Score formula version |
score.computedAt | string · required; When it was computed |
score.categories | object · required |
score.categories.Technical | object |
score.categories.Technical.score | number |
score.categories.Technical.coverage | number |
score.categories.Technical.insufficient | true or false |
score.categories.On-page | object |
score.categories.On-page.score | number |
score.categories.On-page.coverage | number |
score.categories.On-page.insufficient | true or false |
score.categories.Internal linking | object |
score.categories.Internal linking.score | number |
score.categories.Internal linking.coverage | number |
score.categories.Internal linking.insufficient | true or false |
score.categories.Performance | object |
score.categories.Performance.score | number |
score.categories.Performance.coverage | number |
score.categories.Performance.insufficient | true or false |
lastAudit | object or null · required; Last finished audit |
lastAudit.id | string · required; Audit id |
lastAudit.finishedAt | string or null · required |
lastAudit.pagesCrawled | integer · required; Pages read |
lastAudit.partial | string or null · required; Why it stopped early; null when complete |
openIssues | integer · required; Open issues and actions |
criticalIssues | integer · required; Of those, critical |
waitingActions | integer · required; Actions open 14 days or more |
connections | list of object · required; Each connected data source |
connections[].source | gsc | ga4 | ads | wordpress · required; gsc = Search Console, ga4 = Google Analytics, ads = Google Ads |
connections[].cadence | daily | weekly · required; How often it imports |
connections[].lastImportAt | string or null · required; When an import last wrote data |
connections[].rowsLastImport | integer or null · required; Rows the latest import wrote (0: it ran and wrote nothing); null before the first |
connections[].staleDays | integer · required; Whole days since data last moved |
connections[].stale | true or false · required; True after 3 days without data (daily sources) |
wordpress | object or null · required; WordPress connector; null when none |
wordpress.status | pending | connected | failed | revoked | disconnected · required; Connector state |
wordpress.canWrite | true or false · required; MonoRanks can write fixes through it |
link | address (URL) · required; The website in the app |
Errors
| Status | Meaning |
|---|---|
401 | Missing, unknown or revoked key. Codes: missing_key, invalid_key. |
403 | The key lacks the scope, covers another website, or its owner lost access. Codes: missing_scope, other_site, owner_left, no_owner, forbidden. |
404 | Not found. Codes: not_found. |
429 | Too 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"const res = await fetch("https://app.monoranks.com/api/v1/sites/SITE_ID", {
headers: { Authorization: "Bearer mr_ws_…" },
});
if (!res.ok) throw new Error((await res.json()).error.message);
const data = await res.json();import requests
res = requests.get(
"https://app.monoranks.com/api/v1/sites/SITE_ID",
headers={"Authorization": "Bearer mr_ws_…"},
)
res.raise_for_status()
data = res.json()<?php
$ch = curl_init("https://app.monoranks.com/api/v1/sites/SITE_ID");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: Bearer mr_ws_…"],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);import axios from "axios";
const { data } = await axios.get("https://app.monoranks.com/api/v1/sites/SITE_ID", { headers: { Authorization: "Bearer mr_ws_…" } });Example response
{
"id": "3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13",
"name": "Acme Bikes",
"url": "https://acmebikes.com/",
"platform": "wordpress",
"score": {
"site": 78,
"health": 81,
"aeo": 69,
"coverage": 0.92,
"confidence": "high",
"staleInputs": [],
"version": "1.1.0",
"computedAt": "2026-10-04T02:41:12.000Z",
"categories": {
"Technical": {
"score": 84,
"coverage": 1,
"insufficient": false
},
"On-page": {
"score": 76,
"coverage": 1,
"insufficient": false
},
"Internal linking": {
"score": 88,
"coverage": 1,
"insufficient": false
},
"Performance": {
"score": 71,
"coverage": 0.6,
"insufficient": false
}
}
},
"lastAudit": {
"id": "d4f6a8c0-2e4a-4c6e-8a0c-4e6a8c0e2a4b",
"finishedAt": "2026-10-04T02:40:55.000Z",
"pagesCrawled": 186,
"partial": null
},
"openIssues": 17,
"criticalIssues": 1,
"waitingActions": 5,
"connections": [
{
"source": "gsc",
"cadence": "daily",
"lastImportAt": "2026-10-06T04:12:09.000Z",
"rowsLastImport": 5120,
"staleDays": 0,
"stale": false
},
{
"source": "wordpress",
"cadence": "daily",
"lastImportAt": "2026-10-06T01:00:31.000Z",
"rowsLastImport": 214,
"staleDays": 0,
"stale": false
}
],
"wordpress": {
"status": "connected",
"canWrite": true
},
"link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/overview"
}{
"error": {
"code": "missing_key",
"message": "Send the key as Authorization: Bearer mr_site_…"
}
}{
"error": {
"code": "missing_scope",
"message": "This key does not have the scope this call needs."
}
}{
"error": {
"code": "not_found",
"message": "Website not found."
}
}{
"error": {
"code": "rate_limited",
"message": "More than 1200 requests this hour for this key."
}
}The MCP server does the same with the tool site_summary.