Check a page's facts against official sources
/sites/{siteId}/pages/{pageId}/claim-check- Scope
actions:apply- ابزار MCP
run_claim_check
Check a page's facts against official sources Runs the claim check and stores it, like "Check facts against official sources" in the app: up to 6 checkable claims (names, numbers, dates, what a product supports, legal statements; never opinions), each with its official source (a link the page gives, else the official page on the vendor's, regulator's or standard's own domain). The sources are read for free; each claim is judged only against the source's own sentences, and anything unsure is unverified. The two AI steps count as two AI uses; the same page and sources reuse the earlier answer unless rerun is true. Nothing is written to the website.
توضیح ها از سند OpenAPI می آیند و انگلیسی اند.
پارامترها
| نام | محل | توضیح |
|---|---|---|
siteIdاجباری | path | stringWebsite id, from GET /sites. |
pageIdاجباری | path | stringPage id, from GET /pages or GET /pages/findings. |
بدنه درخواست
| فیلد | توضیح |
|---|---|
rerun | true or false · Ask the AI again even when the page and its sources did not change |
language | en | de | es | fa · Language of the notes; default en |
{
"language": "en"
}پاسخ
200 · application/json
| فیلد | توضیح |
|---|---|
page | object · required |
page.id | string · required |
page.url | address (URL) · required |
check | object · required |
check.checkedAt | string |
check.pageText | string |
check.linksFound | number |
check.summary | object |
check.summary.claims | number |
check.summary.matches | number |
check.summary.differs | number |
check.summary.unverified | number |
check.claims | list of objects |
check.claims[].claim | string |
check.claims[].onPage | string |
check.claims[].about | string |
check.claims[].source | object |
check.claims[].source.url | string |
check.claims[].source.domain | string |
check.claims[].source.from | string |
check.claims[].source.read | true or false |
check.claims[].verdict | string |
check.claims[].reason | |
check.claims[].sourceSays | string |
check.claims[].note | string |
check.notesLanguage | string |
check.model | string |
cost | object · required |
cost.sourcesTried | integer · required; Official pages tried (read for free) |
cost.sourcesRead | integer · required; Official pages that could be read |
cost.aiReused | true or false · required; The AI answers were reused for the same page and sources (no AI use counted) |
link | address (URL) · required |
خطاها
| کد | معنی |
|---|---|
400 | Bad request. Codes: missing_argument. |
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. |
422 | The request cannot be carried out. Codes: no_text. |
429 | A limit is reached. rate_limited: too many requests this hour for this key. Codes: rate_limited, limit. |
502 | An outside service did not answer. Codes: failed. |
نمونه درخواست
curl -X POST \
-H "Authorization: Bearer mr_ws_…" \
-H "Content-Type: application/json" \
-d '{"language":"en"}' \
"https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/claim-check"const res = await fetch("https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/claim-check", {
method: "POST",
headers: { Authorization: "Bearer mr_ws_…", "Content-Type": "application/json" },
body: JSON.stringify({
"language": "en"
}),
});
if (!res.ok) throw new Error((await res.json()).error.message);
const data = await res.json();import requests
res = requests.post(
"https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/claim-check",
headers={"Authorization": "Bearer mr_ws_…"},
json={
"language": "en",
},
)
res.raise_for_status()
data = res.json()<?php
$ch = curl_init("https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/claim-check");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => ["Authorization: Bearer mr_ws_…", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => '{"language":"en"}',
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);import axios from "axios";
const { data } = await axios.post(
"https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/claim-check",
{
"language": "en"
},
{ headers: { Authorization: "Bearer mr_ws_…" } },
);نمونه پاسخ
{
"page": {
"id": "c7a9e1b3-5d7f-4b9c-8e1a-3c5e7a9b1d2f",
"url": "https://acmebikes.com/guides/ga4-privacy/"
},
"check": {
"checkedAt": "2026-10-10T09:14:02.000Z",
"pageText": "live",
"linksFound": 3,
"summary": {
"claims": 3,
"matches": 1,
"differs": 1,
"unverified": 1
},
"claims": [
{
"claim": "GA4 offers an option for IP anonymization",
"onPage": "GA4 offers an option for IP anonymization, so switch it on first.",
"about": "Google Analytics 4",
"source": {
"url": "https://support.google.com/analytics/answer/2763052",
"domain": "support.google.com",
"from": "suggested",
"read": true
},
"verdict": "differs",
"reason": null,
"sourceSays": "In Google Analytics 4, IP masking is not necessary since IP addresses are not logged or stored.",
"note": "Google says GA4 does not log or store IP addresses, so IP masking is not needed."
},
{
"claim": "Consent Mode lets Google model conversions when visitors decline cookies",
"onPage": "Consent Mode lets Google model conversions when visitors decline cookies.",
"about": "Google Consent Mode",
"source": {
"url": "https://developers.google.com/tag-platform/security/concepts/consent-mode",
"domain": "developers.google.com",
"from": "page_link",
"read": false
},
"verdict": "unverified",
"reason": "not_read",
"sourceSays": null,
"note": null
},
{
"claim": "GA4 keeps user-level data for at most 14 months",
"onPage": "GA4 keeps user-level data for at most 14 months.",
"about": "Google Analytics 4",
"source": {
"url": "https://support.google.com/analytics/answer/7667196",
"domain": "support.google.com",
"from": "page_link",
"read": true
},
"verdict": "matches",
"reason": null,
"sourceSays": "For GA4 properties, user-level data can be retained for 2 months or 14 months.",
"note": "Google lists 14 months as the longest retention for user-level data."
}
],
"notesLanguage": "en",
"model": "claude-sonnet-4-6"
},
"cost": {
"sourcesTried": 3,
"sourcesRead": 2,
"aiReused": false
},
"link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/pages/c7a9e1b3-5d7f-4b9c-8e1a-3c5e7a9b1d2f#claim-check"
}{
"error": {
"code": "missing_argument",
"message": "page_id or url is required."
}
}{
"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. Use a page_id from page_findings or list_pages, or the exact crawled url."
}
}{
"error": {
"code": "no_text",
"message": "MonoRanks could not read the text of this page, so it cannot find its claims."
}
}{
"error": {
"code": "rate_limited",
"message": "More than 1200 requests this hour for this key."
}
}{
"error": {
"code": "failed",
"message": "The facts could not be checked right now. Try again in a few minutes."
}
}سرور MCP همین کار را با ابزار run_claim_check انجام می دهد.