Docs menu

Analysis & auditGET$0.01

/v1/onpage-audit

Classic on-page SEO plus AI citability, scored 0–100 with a fix for every non-passing check.

Fetches the page and its robots.txt and llms.txt (10 s timeout, 2 MiB cap, up to 5 redirects; private hosts refused) and runs 20 weighted checks. Alongside title, meta, canonical, headings, links, images and JSON-LD it checks what AI engines need: whether GPTBot, ClaudeBot, PerplexityBot, Google-Extended and CCBot may read this path, whether llms.txt exists, whether the content is JS-only, whether headings are phrased as questions, and whether the page carries a date and an author.

Every warn or fail carries an imperative fix, and topFixes[] orders them by impact. The loop an agent runs is: audit, apply topFixes, re-audit until clean.

Parameters#

NameDescription
urlrequiredabsolute http(s) URL of the page to audit

Request#

Plain GET. Without a payment header the response is a 402 carrying the price; an x402 client pays and retries on its own — see the quickstart.

request
GET https://citable.run/v1/onpage-audit?url=https://citable.run

Response#

200 with the JSON below (trimmed) and the settlement signature in the PAYMENT-RESPONSE header. Every paid response also carries price and cluster.

200 · application/json
{
  "url": "https://citable.run/",
  "finalUrl": "https://citable.run/",
  "fetchedAt": "2026-08-24T20:43:12.086Z",
  "http": { "status": 200, "redirects": 0, "contentType": "text/html; charset=UTF-8", "responseMs": 2011, "bytes": 68900, "truncated": false, "https": true },
  "page": {
    "title": { "text": "Citable — SEO and AI-visibility checks for agents", "length": 49 },
    "metaDescription": { "text": "Pay-per-call SEO and AI-visibility data for AI agents. …", "length": 178 },
    "canonical": "https://citable.run/",
    "lang": "en",
    "headings": { "counts": { "h1": 1, "h2": 8, "h3": 5, "h4": 0, "h5": 0, "h6": 0 }, "h1": ["SEO and AI-visibility checks for agents."] },
    "wordCount": 1279,
    "links": { "total": 8, "internal": 5, "external": 3, "nofollow": 0 },
    "images": { "total": 0, "missingAlt": 0, "emptyAlt": 0 },
    "structuredData": { "count": 1, "invalid": 0, "types": ["FAQPage"] }
  },
  "aiAccess": { "robotsTxt": "missing", "llmsTxt": false, "bots": { "gptbot": "allowed", "claudebot": "allowed", "perplexitybot": "allowed", "google-extended": "allowed", "ccbot": "allowed" } },
  "answerability": { "questionHeadings": 0, "hasDate": false, "hasAuthor": false },
  "score": 92,
  "summary": { "pass": 15, "warn": 5, "fail": 0 },
  "checks": [
    { "id": "http-status", "status": "pass", "weight": 8, "message": "Returns 200 OK", "current": "200", "fix": null },
    { "id": "meta-description", "status": "warn", "weight": 5, "message": "Meta description is 178 characters", "current": "Pay-per-call SEO …", "fix": "Rewrite the meta description to 70–160 characters" }
  ],
  "topFixes": [
    { "id": "meta-description", "severity": "warn", "fix": "Rewrite the meta description to 70–160 characters" },
    { "id": "answer-headings", "severity": "warn", "fix": "Add headings phrased as the questions buyers ask — engines lift answers from beneath them" },
    { "id": "article-signals", "severity": "warn", "fix": "Add datePublished and author (visible, meta, or JSON-LD) so engines can date and attribute the content" }
  ],
  "price": "$0.01",
  "cluster": "mainnet"
}

Errors#

Any non-200 cancels the payment — errors are free.

StatusCodeWhen
400invalid_urlnot an absolute http(s) URL
400blocked_hostprivate, loopback or link-local address
400unresolvable_hostDNS lookup failed
415unsupported_content_typethe URL is not an HTML page
422too_many_redirectsmore than 5 redirects
502fetch_failedthe page did not respond in 10 s — nothing is charged

MCP tool#

The same call from Claude, Codex or Cursor once citable-mcp is installed. Arguments mirror the parameters above.

mcp
citable_onpage_audit(url)   $0.01

Source & latency#

Data sourceTypical latency
Fetched and parsed in-housepage response time + ~0.5 s

Note

Check ids: http-status, https, indexable, title, meta-description, h1, canonical, viewport, lang, image-alt, word-count, internal-links, structured-data, open-graph, response-time, js-content, answer-headings, article-signals, ai-crawler-access, llms-txt.

Pairs with#