Try the RankNibbler SEO API

AI citability Beta

GET /api/v1/citability
POST /api/v1/citability

Scores how likely an AI answer engine — ChatGPT, Perplexity, Google AI Overviews — is to quote a piece of content, across seven weighted dimensions. Use GET to score a live URL, or POST to score an unpublished draft you have not shipped anywhere yet, so you can fix it before it goes live.

Beta. This endpoint is new: it is live and safe to call on every plan, but its response shape may still change while we take feedback. Nothing here is scheduled for removal — if you depend on a particular field, tell us and we will keep it stable for you.
This endpoint runs no AI. The API serves the deterministic scorer only — it never calls a model provider, so results are fully reproducible and no call can incur third-party cost. engine.aiUsed is always false and every dimensions[].aiScore is null. The AI-blended judgement (quotable-claim extraction, FAQ suggestions, missing entities) is an in-app feature, so quotableClaims, faqSuggestions, missingEntities and directAnswer come back empty here.

The seven dimensions are answerability, quotability, structure, structuredData, authority, semanticCoverage and freshness. Each is weighted, scored and given a pass/warn/fail status; together they produce an overall 0–100 score, an A–F grade, a measured snapshot of the content, and a severity-ranked list of fixes.

Authentication

Send your API key as an X-API-Key header, or as a key query parameter. Available on every plan, including Free — plans differ only in requests per day. This call costs one request against your daily quota, which is shared across every key on the account. See Authentication.

Score a live URL

NameTypeDescription
url requiredstringThe page to score.
topic optionalstringThe question or topic to judge the content against. Truncated at 255 characters.
key optionalstringYour API key, if not sent as the X-API-Key header.

Response

200 · application/json
  1. {
  2. "score": 51, "grade": "D",
  3. "summary": "This content scores 51/100 (D) for AI citability. …",
  4. "topic": "how to brew coffee", "title": "Coffee Brewing Guide",
  5. "url": "https://example.com/guide", "inputType": "url",
  6. "dimensions": [{ "key": "answerability", "label": "Answerability", "weight": 3,
  7. "score": 55, "status": "warn", "rationale": "",
  8. "detScore": 55, "aiScore": null }],
  9. "snapshot": { "wordCount": 1240, "paragraphs": 18, "avgParaWords": 62,
  10. "headings": 9, "questionHeadings": 3, "hasH1": true,
  11. "lists": 2, "listItems": 11, "tables": 0, "images": 4,
  12. "statDensity": 1.8, "avgSentenceLen": 19, "hasTldr": false,
  13. "schemaTypes": ["Article"], "schemaBlocks": [],
  14. "hasAuthor": true, "hasDate": true, "maxYear": 2026,
  15. "outboundCitations": 2, "internalLinks": 14,
  16. "metaTitle": "…", "metaDescription": "…" },
  17. "directAnswer": null, "quotableClaims": [], "missingEntities": [],
  18. "fixes": [{ "severity": "high", "dimension": "structuredData",
  19. "title": "Add FAQPage schema", "why": "…", "fix": "…",
  20. "example": "", "source": "rule" }],
  21. "faqSuggestions": [], "schemaSuggestions": ["FAQPage"],
  22. "engine": { "aiUsed": false, "fetchedVia": "direct", "statusCode": 200 }
  23. }

Score an unpublished draft

Send the draft as JSON. No URL is involved, so there is no fetch and no SSRF check. Raw text, light Markdown (headings, lists, paragraphs) and HTML are all accepted.

Body fieldTypeDescription
text requiredstringThe draft. Minimum 30 words.
topic optionalstringTarget topic or question. Truncated at 255 characters.

The response has the same shape as the GET form, with inputType: "text" and url: null.

200 · application/json
  1. { "score": 36, "grade": "F", "inputType": "text", "url": null,
  2. "dimensions": [ /* 7 entries */ ],
  3. "fixes": [{ "severity": "high", "title": "Add a TL;DR summary", "…": "…" }],
  4. "engine": { "aiUsed": false, "fetchedVia": null, "statusCode": null } }

Response fields

FieldTypeDescription
score / gradeinteger / stringOverall citability score (0–100) and A–F grade.
dimensions[]arrayThe seven dimensions, each with a weight, score, status and the deterministic detScore. aiScore is always null from the API.
snapshotobjectWhat was measured — word and paragraph counts, headings and question headings, lists, tables, images, statistic density, schema types, author/date signals, citations and links.
fixes[]arraySeverity-ranked fixes: severity, the dimension it improves, a title, the why and the fix.
engineobjectaiUsed (always false), how the content was fetched and the upstream status code.

Errors

StatusWhen
400POST only — the draft is under 30 words: { "error": "Draft is too short to analyse — send at least 30 words." }
401Missing or invalid API key.
403The URL is a private, loopback or cloud-metadata address and was blocked by SSRF protection.
422GET only — the page was fetched but has fewer than 30 readable words to analyse.
429Burst rate limit (60 req/10s per IP, 30 req/10s per key) or your daily quota. See Rate limits.
502GET only — the URL could not be fetched.
503The citability engine is unavailable on this server. This check runs before authentication.

Errors return { "error": "…" }; see Errors.