Documentación para desarrolladores

Ver reglas para rastreadores de IA

GET/sites/{siteId}/geo/ai-crawlers
Permiso
ai:read
Herramienta MCP
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.

Las descripciones vienen del documento OpenAPI y están en inglés.

Parámetros

NombreDóndeDetalles
siteIdObligatoriorutastringWebsite id, from GET /sites.

Respuesta

200 · application/json

CampoDetalles
robotsTxtobject · required
robotsTxt.urlstring · required; Address of /robots.txt
robotsTxt.statusinteger or null · required; HTTP status; null when unreachable
robotsTxt.matchesLastWritetrue or false or null · required; robots.txt does what MonoRanks last wrote; null: nothing to compare
robotsTxt.notVisibleYettrue or false · required; Rules written in the last 24 hours do not show yet (likely a cache)
robotsTxt.messagestring or null · required; A plain note when a cache holds an older file
robotsTxt.cachedobject 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.statusinteger or null · required; HTTP status the plain address answered
robotsTxt.cached.kindtext | html | empty | missing | error | unreachable · required; What the plain address answered
robotsTxt.cached.foundtrue or false · required; A text file was there
robotsTxt.cached.cachestring or null · required; The cache header that answered, for example cf-cache-status: HIT
robotsTxt.fetchedAtstring · required; When it was read
crawlerslist of object · required
crawlers[].botstring · required; Crawler user agent
crawlers[].ownerstring · required; Company behind it
crawlers[].purposestring · required; What it is used for
crawlers[].kindtraining | search | both · required; What the crawler feeds: model training, AI search answers, or both
crawlers[].allowedtrue or false or null · required; robots.txt lets it read the home page; null when robots.txt could not be read
crawlers[].sourcegroup | default | none · required; group: a robots.txt rule names this crawler; default: the * rules apply; none: no rule applies
crawlers[].ruleallow | deny | · required; What MonoRanks last wrote for it; null: no rule
crawlers[].matchestrue or false or null · required; robots.txt does that rule; null when there is no rule or no robots.txt
rulesobject · required; The rules MonoRanks last wrote, by crawler
rules.<name>allow | deny
wordpressobject · required
wordpress.connectedtrue or false · required; A WordPress connector is connected
wordpress.writabletrue or false · required; MonoRanks may write through it
canPublishtrue or false · required; connected and writable: a POST can write the change
lastChangeobject or null · required; The last approval and its state; null when there was none
lastChange.batchIdstring · required; Change batch id
lastChange.statusapproved | 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.valuestring · required; The approved rules, as JSON
lastChange.previousstring · required; The value before (empty: none)
lastChange.approvedBystring · required; Email of the person who approved it
lastChange.approvedAtstring · required; When it was approved
lastChange.appliedAtstring or null · required; When the worker wrote it
lastChange.errorstring or null · required; Why the write failed or was refused
notestring · required; How to read the fields
linkaddress (URL) · required; The AI readiness screen in the app

Errores

EstadoSignificado
401Missing, unknown or revoked key. Codes: missing_key, invalid_key.
403The key lacks the scope, covers another website, or its owner lost access. Codes: missing_scope, other_site, owner_left, no_owner, forbidden.
404Not found. Codes: not_found.
429Too many requests this hour for this key. Codes: rate_limited.
503Switched off for now. Codes: feature_off.

Petición de ejemplo

curl \
  -H "Authorization: Bearer mr_ws_…" \
  "https://app.monoranks.com/api/v1/sites/SITE_ID/geo/ai-crawlers"

Respuesta de ejemplo

{
  "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"
}

El servidor MCP hace lo mismo con la herramienta ai_crawler_rules.