By Sagar Shankaran, Founder of CallSphere
Inside the architecture of grounding Claude answers with citations: retrieval, document blocks, the Citations API, span offsets, and verification.
Key takeaways
Most teams discover the citation problem the hard way. The retrieval-augmented chatbot ships, demos beautifully, and then a customer asks a pointed question and Claude answers with a confident sentence that does not appear anywhere in the source documents. The text is plausible, the tone is authoritative, and it is wrong. Grounding with citations is the architecture that makes this failure visible and, increasingly, preventable. The point is not decoration: a citation is a verifiable pointer back to the exact span of source text a claim rests on, and the entire system has to be built so those pointers are real.
This post is about the internals — how the pieces fit together from the moment a question arrives to the moment a cited, defensible answer leaves the system. We will stay on the Claude side of the world: the Anthropic Citations API, document blocks, the way the model emits character-level spans, and how a verification layer closes the loop.
cited_text spans with document indices and character offsets, so you get machine-checkable provenance rather than a hand-waved footnote.Grounding an answer means tying each factual claim in the model's output to specific evidence in a trusted source, such that a reader (or another program) can trace the claim back and confirm it. A citation is the concrete artifact of grounding: a structured reference identifying the document and the character range the claim was drawn from. The distinction matters because a model can sound grounded — quoting numbers, naming sections — while inventing the underlying evidence. Real grounding produces a span you can dereference.
Claude's Citations capability operationalizes this. When you pass documents to the model as structured content blocks with citations enabled, Claude does not just read them as ambient context; it tracks which spans of which documents support each sentence it writes, and it returns those spans alongside the text. The output is no longer a flat string. It is a sequence of text blocks, some of which carry a list of citation objects pointing at exact source locations.
It helps to see the whole path before zooming into any one part. A grounded answer travels through retrieval, document assembly, generation with citations, and verification before it reaches the user.
Hear it before you finish reading
Talk to a live CallSphere AI voice agent in your browser — 60 seconds, no signup.
flowchart TD
A["User question"] --> B["Retriever: search corpus"]
B --> C["Top-k chunks with doc IDs & offsets"]
C --> D["Assemble document blocks (citations enabled)"]
D --> E["Claude generates answer"]
E --> F{"Each claim has a cited span?"}
F -->|No| G["Flag or re-ask with stricter instruction"]
F -->|Yes| H["Verifier: span actually supports claim?"]
H -->|Fails| G
H -->|Passes| I["Render answer with footnotes"]
The two diamonds are where most engineering effort lands. The first checks that a span exists at all; the second — far harder — checks that the span genuinely supports the sentence attached to it. Skipping the second is the single most common way teams ship citations that look rigorous and are not.
Everything downstream inherits the quality of what retrieval hands over. If your chunker splits a sentence across two chunks, no citation can cleanly capture the full claim. If you strip document IDs before passing text to Claude, you have thrown away the very thing a citation needs to point at. So retrieval is not just "find relevant text" — it is "find relevant text and preserve enough metadata that a span can be dereferenced later."
When you call Claude, each source becomes a document content block. Here is the shape of a request with citations turned on:
{
"role": "user",
"content": [
{
"type": "document",
"source": { "type": "text", "media_type": "text/plain",
"data": "Refunds are issued within 14 business days..." },
"title": "refund-policy-v3",
"citations": { "enabled": true }
},
{ "type": "text",
"text": "How long do refunds take, and cite the policy." }
]
}
With citations.enabled set, Claude's response blocks can include a citations array, each entry carrying the document index, the cited_text, and start/end character indices. That structured return is the backbone of grounding. The title you assign is what surfaces to users as the source label, so name documents like you mean it.
A grounded response is interleaved. Claude emits a text segment, then attaches the citations that justify it, then continues. Your rendering layer walks this structure and turns each citation into a footnote, a hover card, or an inline link. Because the offsets are character-precise, you can highlight the exact sentence in the original document — the experience users find trustworthy because they can check it in one click.
Critically, the model decides which spans to cite based on the generated text, so citations stay aligned with the actual claims rather than being bolted on afterward. This is the structural advantage over a naive approach where you generate prose first and then run a separate search to find something vaguely matching it. That afterthought pattern produces citations that are technically present and frequently irrelevant.
Even with native citations, you should not trust that a cited span supports its claim. Models occasionally cite a nearby sentence that mentions the right topic but states something different — a number off by a digit, a condition inverted. The verification stage re-reads each claim against its cited cited_text and asks a narrow question: does this evidence entail this claim? You can implement it as a second, cheap Claude call (Haiku is well suited) scoped to one claim and one span at a time, returning a simple supported / not-supported / partially verdict.
Still reading? Stop comparing — try CallSphere live.
CallSphere ships complete AI voice agents per industry — 14 tools for healthcare, 10 agents for real estate, 4 specialists for salons. See how it actually handles a call before you book a demo.
Run this as a fan-out: independent claim-span pairs check in parallel, results aggregate, and any "not supported" pair either gets dropped, re-grounded, or flagged for review. The cost is real but bounded, and it converts "we have citations" into "our citations have been checked," which is the claim your compliance and trust teams actually need.
document block with citations.enabled and a human-readable title.| Approach | Provenance | Best for |
|---|---|---|
| Prose then post-hoc search | Weak, often mismatched | Quick prototypes only |
| Native Citations API | Span-level, model-aligned | Most production RAG |
| Citations + verifier | Span-level, checked | Regulated / high-stakes answers |
Grounding with citations is the practice of tying every factual claim in a model's answer to a specific, dereferenceable span of trusted source text, so the claim can be independently verified.
They dramatically reduce unsupported claims because the model attaches answers to real spans, but they do not guarantee the span was read correctly. A verification stage is what closes that remaining gap.
At the boundaries: poor chunking at retrieval and missing verification at the end. The middle — calling Claude with documents — is the most robust part once metadata is preserved.
For high-stakes or regulated answers, yes. A cheap claim-by-claim check using a smaller model like Haiku adds modest latency and cost while converting unchecked provenance into verified provenance.
CallSphere takes these same grounding patterns and applies them to voice and chat — agents that answer every call and message, pull facts from your real documents mid-conversation, and stand behind what they say. See it live at callsphere.ai.
Source & attribution: This is an independent, original explainer inspired by Anthropic's coverage on the Claude blog. Claude, Claude Code, Claude Cowork, Claude Opus, and the Model Context Protocol are products and trademarks of Anthropic. CallSphere is not affiliated with or endorsed by Anthropic.

Written by
Sagar Shankaran· Founder, CallSphere
LinkedInSagar Shankaran is the founder of CallSphere, where he builds production AI voice and chat agents deployed across healthcare, hospitality, real estate, and home services. He writes about agentic AI, LLM engineering, and shipping voice agents that handle real calls in production.
See how AI voice agents work for your industry. Live demo available -- no signup required.
Anthropic's Claude Fable 5 and Mythos 5 explained: pricing, availability, frontier benchmarks, the dual-model safeguard architecture, and what they mean for AI agents.
Where Claude Code, MCP, and multi-agent systems are taking GTM engineering next, and how to prepare your team now for standing and multi-agent workflows.
Where Claude Cowork and the Claude agent ecosystem are heading next — standing agents, MCP, skills as a moat — and the concrete moves to prepare your team now.
The metrics, leading signals, and anti-metrics that prove Claude Cowork is working — acceptance rate, time-to-outcome, and why usage counts mislead.
Shipping an agentic GTM workflow is easy; proving it works is hard. The metrics, signals, and eval loops that show a Claude Code rebuild is paying off.
A realistic end-to-end Claude Cowork use case: a quarterly vendor-spend review from vague ask to shipped deliverable, with every agentic step shown.
© 2026 CallSphere Inc. All rights reserved.
Made within San Francisco
Watch how CallSphere handles real customer calls, schedules appointments, and processes payments — live.
Try Live DemoBook a DemoCalculate Your ROI