KI-Crawler-Regeln abrufen
GET
/sites/{siteId}/geo/ai-crawlers- Berechtigung
ai:read- MCP-Tool
ai_crawler_rules
What robots.txt says to each AI crawler, and the rules MonoRanks wrote robots.txt is fetched on this call, past the website's page cache and CDN.
Die Beschreibungen kommen aus dem OpenAPI-Dokument und sind auf Englisch.
Parameter
| Name | Ort | Details |
|---|---|---|
siteIdPflicht | Pfad | stringWebsite id, from GET /sites. |
Antwort
200 · application/json
| Feld | Details |
|---|---|
robotsTxt | object · required |
robotsTxt.url | string · required; Address of /robots.txt |
robotsTxt.status | integer or null · required; HTTP status; null when unreachable |
robotsTxt.matchesLastWrite | true or false or null · required; robots.txt does what MonoRanks last wrote; null: nothing to compare |
robotsTxt.notVisibleYet | true or false · required; Rules written in the last 24 hours do not show yet (likely a cache) |
robotsTxt.message | string or null · required; A plain note when a cache holds an older file |
robotsTxt.cached | object or null · required; What the plain address answered when it differs from the fresh read (a cache still holds an older answer); null when both agree |
robotsTxt.cached.status | integer or null · required; HTTP status the plain address answered |
robotsTxt.cached.kind | text | html | empty | missing | error | unreachable · required; What the plain address answered |
robotsTxt.cached.found | true or false · required; A text file was there |
robotsTxt.cached.cache | string or null · required; The cache header that answered, for example cf-cache-status: HIT |
robotsTxt.fetchedAt | string · required; When it was read |
crawlers | list of object · required |
crawlers[].bot | string · required; Crawler user agent |
crawlers[].owner | string · required; Company behind it |
crawlers[].purpose | string · required; What it is used for |
crawlers[].kind | training | search | both · required; What the crawler feeds: model training, AI search answers, or both |
crawlers[].allowed | true or false or null · required; robots.txt lets it read the home page; null when robots.txt could not be read |
crawlers[].source | group | default | none · required; group: a robots.txt rule names this crawler; default: the * rules apply; none: no rule applies |
crawlers[].rule | allow | deny | · required; What MonoRanks last wrote for it; null: no rule |
crawlers[].matches | true or false or null · required; robots.txt does that rule; null when there is no rule or no robots.txt |
rules | object · required; The rules MonoRanks last wrote, by crawler |
rules.<name> | allow | deny |
wordpress | object · required |
wordpress.connected | true or false · required; A WordPress connector is connected |
wordpress.writable | true or false · required; MonoRanks may write through it |
canPublish | true or false · required; connected and writable: a POST can write the change |
lastChange | object or null · required; The last approval and its state; null when there was none |
lastChange.batchId | string · required; Change batch id |
lastChange.status | approved | applying | applied | not_live | failed | refused | stale | reverting | reverted | revert_failed · required; approved and applying: waiting for the worker; applied: written; failed or refused: see error; reverted: undone in the app |
lastChange.value | string · required; The approved rules, as JSON |
lastChange.previous | string · required; The value before (empty: none) |
lastChange.approvedBy | string · required; Email of the person who approved it |
lastChange.approvedAt | string · required; When it was approved |
lastChange.appliedAt | string or null · required; When the worker wrote it |
lastChange.error | string or null · required; Why the write failed or was refused |
note | string · required; How to read the fields |
link | address (URL) · required; The AI readiness screen in the app |
Fehler
| Status | Bedeutung |
|---|---|
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. |
503 | Switched off for now. Codes: feature_off. |
Beispielanfrage
curl \
-H "Authorization: Bearer mr_ws_…" \
"https://app.monoranks.com/api/v1/sites/SITE_ID/geo/ai-crawlers"const res = await fetch("https://app.monoranks.com/api/v1/sites/SITE_ID/geo/ai-crawlers", {
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/geo/ai-crawlers",
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/geo/ai-crawlers");
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/geo/ai-crawlers", { headers: { Authorization: "Bearer mr_ws_…" } });Beispielantwort
{
"robotsTxt": {
"url": "https://acmebikes.com/robots.txt",
"status": 200,
"matchesLastWrite": true,
"notVisibleYet": false,
"message": null,
"cached": null,
"fetchedAt": "2026-10-06T09:30:12.000Z"
},
"crawlers": [
{
"bot": "GPTBot",
"owner": "OpenAI",
"purpose": "Training data for OpenAI models",
"kind": "training",
"allowed": false,
"source": "group",
"rule": "deny",
"matches": true
},
{
"bot": "OAI-SearchBot",
"owner": "OpenAI",
"purpose": "ChatGPT search results and citations",
"kind": "search",
"allowed": true,
"source": "group",
"rule": "allow",
"matches": true
},
{
"bot": "ChatGPT-User",
"owner": "OpenAI",
"purpose": "Pages a ChatGPT user asks about, fetched live",
"kind": "search",
"allowed": true,
"source": "default",
"rule": null,
"matches": null
},
{
"bot": "ClaudeBot",
"owner": "Anthropic",
"purpose": "Training data for Claude models",
"kind": "training",
"allowed": true,
"source": "default",
"rule": null,
"matches": null
},
{
"bot": "Claude-SearchBot",
"owner": "Anthropic",
"purpose": "Improves the quality of Claude's search results",
"kind": "search",
"allowed": true,
"source": "default",
"rule": null,
"matches": null
},
{
"bot": "Claude-User",
"owner": "Anthropic",
"purpose": "Pages a Claude user asks about, fetched live",
"kind": "search",
"allowed": true,
"source": "default",
"rule": null,
"matches": null
},
{
"bot": "PerplexityBot",
"owner": "Perplexity",
"purpose": "Perplexity search index and citations",
"kind": "search",
"allowed": true,
"source": "default",
"rule": null,
"matches": null
},
{
"bot": "Google-Extended",
"owner": "Google",
"purpose": "Gemini training and grounding (not Google Search)",
"kind": "training",
"allowed": true,
"source": "default",
"rule": null,
"matches": null
},
{
"bot": "Applebot-Extended",
"owner": "Apple",
"purpose": "Apple Intelligence training",
"kind": "training",
"allowed": true,
"source": "default",
"rule": null,
"matches": null
},
{
"bot": "CCBot",
"owner": "Common Crawl",
"purpose": "Open crawl used to train many models",
"kind": "training",
"allowed": true,
"source": "default",
"rule": null,
"matches": null
},
{
"bot": "Bytespider",
"owner": "ByteDance",
"purpose": "ByteDance models",
"kind": "training",
"allowed": true,
"source": "default",
"rule": null,
"matches": null
},
{
"bot": "meta-externalagent",
"owner": "Meta",
"purpose": "Meta AI training and product indexing",
"kind": "both",
"allowed": true,
"source": "default",
"rule": null,
"matches": null
},
{
"bot": "Amazonbot",
"owner": "Amazon",
"purpose": "Improves Amazon products and may train Amazon AI models",
"kind": "both",
"allowed": true,
"source": "default",
"rule": null,
"matches": null
}
],
"rules": {
"GPTBot": "deny",
"OAI-SearchBot": "allow"
},
"wordpress": {
"connected": true,
"writable": true
},
"canPublish": true,
"lastChange": {
"batchId": "f6b8d0f2-4a6c-4e8a-ac2e-6a8cae2a4c6d",
"status": "applied",
"value": "{\"GPTBot\":\"deny\",\"OAI-SearchBot\":\"allow\"}",
"previous": "",
"approvedBy": "owner@acmebikes.com",
"approvedAt": "2026-10-02T14:05:00.000Z",
"appliedAt": "2026-10-02T14:05:41.000Z",
"error": null
},
"note": "allowed: what robots.txt, fetched now, says to that crawler for the home page.",
"link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/geo"
}{
"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."
}
}{
"error": {
"code": "feature_off",
"message": "AI readiness is switched off for now."
}
}Der MCP-Server macht dasselbe mit dem Tool ai_crawler_rules.