Historial por dirección
GET
/sites/{siteId}/pages/history- Permiso
pages:read- Herramienta MCP
page_history
What changed on a page, by URL.
Las descripciones vienen del documento OpenAPI y están en inglés.
Parámetros
| Nombre | Dónde | Detalles |
|---|---|---|
siteIdObligatorio | ruta | stringWebsite id, from GET /sites. |
urlObligatorio | query | stringThe page address, exactly as crawled. |
limit | query | integerdefault 30, min 1, max 100Entries to return, 1 to 100. |
Respuesta
200 · application/json
| Campo | Detalles |
|---|---|
page | object · required |
page.id | string · required; Page id |
page.url | string · required; Page address |
entries | list of values · required; Newest first |
entries[].crawlId | string |
entries[].at | string |
entries[].kind | string |
entries[].status | number |
entries[].redirectHops | number |
entries[].pageScore | number |
entries[].aeoScore | number |
entries[].wordCount | number |
entries[].title | string |
entries[].first | true or false |
entries[].noSnapshot | true or false |
entries[].changes | list of objects |
entries[].changes[].field | string |
entries[].changes[].before | string |
entries[].changes[].after | string |
more | true or false · required; Older entries exist |
note | string · required; How the entries are compared |
link | string · required; The page history in the app |
Notas
GET /sites/{siteId}/pages/{pageId}/history (o GET /sites/{siteId}/pages/history?url=) dice qué cambió en una página de una auditoría o revisión a la siguiente, de la más nueva a la más antigua. Usa lo que MonoRanks guardó al leer la página; no se rastrea nada para esto. La app muestra la misma línea de tiempo en la pantalla de detalle de la página.
{
"page": { "id": "…", "url": "https://example.com/pricing/" },
"entries": [
{ "crawlId": "…", "at": "2026-10-01T09:12:00Z", "kind": "recheck", "status": 200, "redirectHops": 0, "pageScore": 86, "aeoScore": 71,
"wordCount": 912, "title": "Pricing – Example", "first": false, "noSnapshot": false,
"changes": [ { "field": "title", "before": "Pricing", "after": "Pricing – Example" }, { "field": "pageScore", "before": 78, "after": 86 } ] }
],
"more": true, "note": "…", "link": "https://app.monoranks.com/sites/SITE_ID/pages/PAGE_ID#history"
}
| Qué | Detalles |
|---|---|
| Qué se compara | field es uno de status, redirect, title, description, h1, headings (número de encabezados H2), canonical, noindex, robots, wordCount, schemaTypes, internalLinks, pageScore y aeoScore. Una lista changes vacía significa que no cambió nada. |
| Los cambios pequeños no cuentan | El número de palabras tiene que moverse al menos 10 palabras y un 5 %. Los espacios en los títulos y el orden de los tipos de schema se ignoran. |
| Caídas | noSnapshot es true cuando la lectura no tenía HTML legible. Esa entrada solo muestra el cambio de estado, y la siguiente lectura se compara con la última que tenía HTML legible. |
| Hasta cuándo | Las lecturas se guardan 12 meses; first marca la más antigua guardada. Las revisiones y las puntuaciones de página se guardan desde la versión 1.0.92, así que las entradas anteriores tienen pageScore y aeoScore en null. |
Errores
| Estado | Significado |
|---|---|
400 | Bad request. Codes: bad_limit, missing_page. |
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. |
Petición de ejemplo
curl \
-H "Authorization: Bearer mr_ws_…" \
"https://app.monoranks.com/api/v1/sites/SITE_ID/pages/history?url=https%3A%2F%2Fexample.com%2Fpricing%2F"const res = await fetch("https://app.monoranks.com/api/v1/sites/SITE_ID/pages/history?url=https%3A%2F%2Fexample.com%2Fpricing%2F", {
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/history?url=https%3A%2F%2Fexample.com%2Fpricing%2F",
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/history?url=https%3A%2F%2Fexample.com%2Fpricing%2F");
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/history?url=https%3A%2F%2Fexample.com%2Fpricing%2F", { headers: { Authorization: "Bearer mr_ws_…" } });Respuesta de ejemplo
{
"page": {
"id": "c7a9e1b3-5d7f-4b9c-8e1a-3c5e7a9b1d2f",
"url": "https://acmebikes.com/products/trail-pro-29"
},
"entries": [
{
"crawlId": "d4f6a8c0-2e4a-4c6e-8a0c-4e6a8c0e2a4b",
"at": "2026-10-04T02:41:12.000Z",
"kind": "audit",
"status": 200,
"redirectHops": 0,
"pageScore": 86,
"aeoScore": 71,
"wordCount": 842,
"title": "Trail Pro 29 Mountain Bike | Acme Bikes",
"first": false,
"noSnapshot": false,
"changes": [
{
"field": "title",
"before": "Trail Pro 29 | Acme Bikes",
"after": "Trail Pro 29 Mountain Bike | Acme Bikes"
},
{
"field": "pageScore",
"before": 79,
"after": 86
}
]
},
{
"crawlId": "e5a7c9e1-3f5b-4d7f-9b1d-5f7b9d1f3b5c",
"at": "2026-09-27T02:38:51.000Z",
"kind": "audit",
"status": 200,
"redirectHops": 0,
"pageScore": 79,
"aeoScore": 71,
"wordCount": 836,
"title": "Trail Pro 29 | Acme Bikes",
"first": true,
"noSnapshot": false,
"changes": []
}
],
"more": false,
"note": "One entry per audit or recheck that read this page, newest first.",
"link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/pages/c7a9e1b3-5d7f-4b9c-8e1a-3c5e7a9b1d2f#history"
}{
"error": {
"code": "bad_limit",
"message": "limit must be a whole number from 1 to 100."
}
}{
"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."
}
}El servidor MCP hace lo mismo con la herramienta page_history.