Skip to main content
Scores a piece of content for how well it’s set up to be cited in AI answers, and returns an explainable, channel-aware breakdown so you can fix it before shipping. Read-only — never creates or edits a draft. Use this as the JUDGE step of the optimization loop: draft → score_content → revise the specific weak dimensions → re-score → ship via emit_content once the baseline gates pass. Call it as many times as you need; identical content is cached. What you get back (structuredContent):
  • geoScore (0-100), profile (article/linkedin/reddit/x/youtube/social), coverage (% of the rubric actually scored).
  • gates: the NON-NEGOTIABLES (answer-first, evidence present, right-sized, unique insight, answers-target-questions). status = ‘pass’ | ‘fail’ | ‘unverified’. A FAILED gate CAPS the score — do not ship until gates pass. The score is a quality floor, not a vanity number.
  • dimensions: each scored 0-100 with the judge’s ‘why’ + a concrete ‘fix’ for the weak ones. Fix THESE specifically rather than guessing.
  • suggestions: the highest-leverage fixes, biggest gaps first.
Pass content_id (a Citable content id, as returned by create_content_draft, emit_content, or list_content) to additionally score PROMPT FIT — how directly the content answers the brand’s tracked target questions — and to pull the row’s audience. This is the highest-value signal: content that answers the questions the brand is actually losing gets cited. Without content_id, prompt-fit is skipped. Inputs: content (required — the body to score, HTML or markdown), content_type (blog/medium/linkedin/reddit/x/youtube/…; defaults to blog or the row’s type), content_id (optional — grounds prompt-fit + audience).

Inputs