Get one page
GET
/sites/{siteId}/pages/{pageId}- Scope
pages:read- MCP tool
page_findings
Get a page with its findings Page facts, scores and every finding on the page. Personal email addresses in stored page text are masked.
Parameters
| Name | In | Details |
|---|---|---|
siteIdRequired | path | stringWebsite id, from GET /sites. |
pageIdRequired | path | stringPage id, from GET /sites/{siteId}/pages. |
Response
200 · application/json
| Field | Details |
|---|---|
page | object · required |
page.id | string · required; Page id |
page.url | string · required; Page address |
page.status | integer or null · required; HTTP status the address answered (its own 3xx for a redirect); null when unknown |
page.redirect | object or null · required; Set when the address redirects; null otherwise |
page.title | string or null · required; Page title |
page.description | string or null · required; Meta description |
page.h1 | list of string · required; H1 headings |
page.pageScore | integer or null · required; Page score 0–100 |
page.aeoScore | integer or null · required; AEO score 0–100 |
page.categories | object or null · required; Score per category (Technical, On-page, Internal linking, Performance), 0–100 |
page.categories.Technical | number |
page.categories.On-page | number |
page.categories.Internal linking | number |
page.categories.Performance | number |
page.link | string · required; The page in the app |
findings | list of object · required; Issues that list this page |
findings[].issueId | string · required; Issue id |
findings[].ruleId | string · required; Rule id |
findings[].title | string · required; Issue title |
findings[].severity | critical | serious | warning | low · required |
findings[].status | open | in_progress | recheck_queued | resolved | ignored | reopened · required |
findings[].onThisPage | present | fixed · required; Whether the problem is still on this page |
findings[].evidence | object · required; What the rule saw on this page; fields depend on the rule |
findings[].evidence.title | string |
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/pages/PAGE_ID"const res = await fetch("https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_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/pages/PAGE_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/pages/PAGE_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/pages/PAGE_ID", { headers: { Authorization: "Bearer mr_ws_…" } });Example response
{
"page": {
"id": "c7a9e1b3-5d7f-4b9c-8e1a-3c5e7a9b1d2f",
"url": "https://acmebikes.com/products/trail-pro-29",
"status": 200,
"redirect": null,
"title": "Trail Pro 29 Mountain Bike | Acme Bikes",
"description": null,
"h1": [
"Trail Pro 29"
],
"pageScore": 86,
"aeoScore": 71,
"categories": {
"Technical": 94,
"On-page": 78,
"Internal linking": 88,
"Performance": 82
},
"link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/pages/c7a9e1b3-5d7f-4b9c-8e1a-3c5e7a9b1d2f"
},
"findings": [
{
"issueId": "b2e4c6a8-1d3f-4a5b-9c7d-0e2f4a6b8c1d",
"ruleId": "SEO-ONP-011",
"title": "Meta description missing on 3 pages (/products/*)",
"severity": "warning",
"status": "open",
"onThisPage": "present",
"evidence": {
"title": "Trail Pro 29 Mountain Bike | Acme Bikes"
}
}
]
}{
"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": "Page 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 page_findings.