Get scores and history
GET
/sites/{siteId}/scores- Scope
sites:read
Current score and 13 weeks of history One point per week (the last score of that week). A new website with less than two weeks of scores gets one point per day. versions lists the weeks the score formula changed.
Parameters
| Name | In | Details |
|---|---|---|
siteIdRequired | path | stringWebsite id, from GET /sites. |
Response
200 · application/json
| Field | Details |
|---|---|
current | object or null · required; Latest score; null before the first audit |
current.site | integer or null · required; Site score, 0 to 100; null until enough is measured |
current.health | integer or null · required; Health score, 0 to 100; null until enough is measured |
current.aeo | integer or null · required; AEO readiness, 0 to 100; null until enough is measured |
current.coverage | number · required; Share measured, 0 to 1 |
current.version | string · required; Score formula version |
current.computedAt | string · required |
weekly | list of object · required; Oldest first |
weekly[].week | date (YYYY-MM-DD) · required; Monday of the week (or the day, for a new website) |
weekly[].label | string · required; Short date label |
weekly[].site | integer or null · required; Site score, 0 to 100; null until enough is measured |
weekly[].health | integer or null · required; Health score, 0 to 100; null until enough is measured |
weekly[].aeo | integer or null · required; AEO readiness, 0 to 100; null until enough is measured |
weekly[].openIssues | integer · required; Open issues then |
weekly[].fixesVerified | integer · required; Issues a check verified fixed that week |
weekly[].version | string · required; Score formula version |
weekly[].recalculated | integer or null · required; The site score recomputed under the newest formula, where it was |
versions | list of object · required; When the score formula changed |
versions[].week | date (YYYY-MM-DD) · required; First week with the new version |
versions[].version | string · required; Score formula version |
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/scores"const res = await fetch("https://app.monoranks.com/api/v1/sites/SITE_ID/scores", {
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/scores",
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/scores");
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/scores", { headers: { Authorization: "Bearer mr_ws_…" } });Example response
{
"current": {
"site": 78,
"health": 81,
"aeo": 69,
"coverage": 0.92,
"version": "1.1.0",
"computedAt": "2026-10-04T02:41:12.000Z"
},
"weekly": [
{
"week": "2026-09-21",
"label": "Sep 21",
"site": 74,
"health": 77,
"aeo": 66,
"openIssues": 21,
"fixesVerified": 3,
"version": "1.1.0",
"recalculated": null
},
{
"week": "2026-09-28",
"label": "Sep 28",
"site": 78,
"health": 81,
"aeo": 69,
"openIssues": 17,
"fixesVerified": 4,
"version": "1.1.0",
"recalculated": null
}
],
"versions": []
}{
"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."
}
}