File: citations.md | Updated: 11/15/2025
Agent Skills are now available! Learn more about extending Claude's capabilities with Agent Skills .
English
Search...
Ctrl K
Search...
Navigation
Capabilities
Citations
Home Developer Guide API Reference Model Context Protocol (MCP) Resources Release Notes
On this page
Claude is capable of providing detailed citations when answering questions about documents, helping you track and verify information sources in responses. All active models support citations, with the exception of Haiku 3.
_Citations with Claude Sonnet 3.7_Claude Sonnet 3.7 may be less likely to make citations compared to other Claude models without more explicit instructions from the user. When using citations with Claude Sonnet 3.7, we recommend including additional instructions in the user turn, like "Use citations to back up your answer." for example.We’ve also observed that when the model is asked to structure its response, it is unlikely to use citations unless explicitly told to use citations within that format. For example, if the model is asked to use <result> tags in its response, you should add something like "Always use citations in your answer, even within <result> tags."
Please share your feedback and suggestions about the citations feature using this form .
Here’s an example of how to use citations with the Messages API:
Shell
Python
Java
Copy
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"messages": [\
{\
"role": "user",\
"content": [\
{\
"type": "document",\
"source": {\
"type": "text",\
"media_type": "text/plain",\
"data": "The grass is green. The sky is blue."\
},\
"title": "My Document",\
"context": "This is a trustworthy document.",\
"citations": {"enabled": true}\
},\
{\
"type": "text",\
"text": "What color is the grass and sky?"\
}\
]\
}\
]
}'
Comparison with prompt-based approachesIn comparison with prompt-based citations solutions, the citations feature has the following advantages:
cited_text does not count towards your output tokens.cited_text, citations are guaranteed to contain valid pointers to the provided documents.Integrate citations with Claude in these steps:
1
Provide document(s) and enable citations
citations.enabled=true on each of your documents. Currently, citations must be enabled on all or none of the documents within a request.2
Documents get processed
3
Claude provides cited response
Automatic chunking vs custom contentBy default, plain text and PDF documents are automatically chunked into sentences. If you need more control over citation granularity (e.g., for bullet points or transcripts), use custom content documents instead. See Document Types for more details.For example, if you want Claude to be able to cite specific sentences from your RAG chunks, you should put each RAG chunk into a plain text document. Otherwise, if you do not want any further chunking to be done, or if you want to customize any additional chunking, you can put RAG chunks into custom content document(s).
Citable vs non-citable content
source content can be cited from.title and context are optional fields that will be passed to the model but not used towards cited content.title is limited in length so you may find the context field to be useful in storing any document metadata as text or stringified json.Citation indices
content list provided in the custom content document.Token costs
cited_text field is provided for convenience and does not count towards output tokens.cited_text is also not counted towards input tokens.Feature compatibility
Citations works in conjunction with other API features including prompt caching , token counting and batch processing .
Citations and Structured Outputs are incompatibleCitations cannot be used together with Structured Outputs
. If you enable citations on any user-provided document (Document blocks or RequestSearchResultBlock) and also include the output_format parameter, the API will return a 400 error.This is because citations require interleaving citation blocks with text output, which is incompatible with the strict JSON schema constraints of structured outputs.
Using Prompt Caching with Citations
Citations and prompt caching can be used together effectively. The citation blocks generated in responses cannot be cached directly, but the source documents they reference can be cached. To optimize performance, apply cache_control to your top-level document content blocks.
Python
TypeScript
Shell
Copy
import anthropic
client = anthropic.Anthropic()
# Long document content (e.g., technical documentation)
long_document = "This is a very long document with thousands of words..." + " ... " * 1000 # Minimum cacheable length
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=[\
{\
"role": "user",\
"content": [\
{\
"type": "document",\
"source": {\
"type": "text",\
"media_type": "text/plain",\
"data": long_document\
},\
"citations": {"enabled": True},\
"cache_control": {"type": "ephemeral"} # Cache the document content\
},\
{\
"type": "text",\
"text": "What does this document say about API features?"\
}\
]\
}\
]
)
In this example:
cache_control on the document blockChoosing a document type
We support three document types for citations. Documents can be provided directly in the message (base64, text, or URL) or uploaded via the Files API
and referenced by file_id:
| Type | Best for | Chunking | Citation format | | --- | --- | --- | --- | | Plain text | Simple text documents, prose | Sentence | Character indices (0-indexed) | | PDF | PDF files with text content | Sentence | Page numbers (1-indexed) | | Custom content | Lists, transcripts, special formatting, more granular citations | No additional chunking | Block indices (0-indexed) |
.csv, .xlsx, .docx, .md, and .txt files are not supported as document blocks. Convert these to plain text and include directly in message content. See Working with other file formats .
Plain text documents
Plain text documents are automatically chunked into sentences. You can provide them inline or by reference with their file_id:
Copy
{
"type": "document",
"source": {
"type": "text",
"media_type": "text/plain",
"data": "Plain text content..."
},
"title": "Document Title", # optional
"context": "Context about the document that will not be cited from", # optional
"citations": {"enabled": True}
}
Example plain text citation
Copy
{
"type": "char_location",
"cited_text": "The exact text being cited", # not counted towards output tokens
"document_index": 0,
"document_title": "Document Title",
"start_char_index": 0, # 0-indexed
"end_char_index": 50 # exclusive
}
PDF documents
PDF documents can be provided as base64-encoded data or by file_id. PDF text is extracted and chunked into sentences. As image citations are not yet supported, PDFs that are scans of documents and do not contain extractable text will not be citable.
Copy
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": base64_encoded_pdf_data
},
"title": "Document Title", # optional
"context": "Context about the document that will not be cited from", # optional
"citations": {"enabled": True}
}
Example PDF citation
Copy
{
"type": "page_location",
"cited_text": "The exact text being cited", # not counted towards output tokens
"document_index": 0,
"document_title": "Document Title",
"start_page_number": 1, # 1-indexed
"end_page_number": 2 # exclusive
}
Custom content documents
Custom content documents give you control over citation granularity. No additional chunking is done and chunks are provided to the model according to the content blocks provided.
Copy
{
"type": "document",
"source": {
"type": "content",
"content": [\
{"type": "text", "text": "First chunk"},\
{"type": "text", "text": "Second chunk"}\
]
},
"title": "Document Title", # optional
"context": "Context about the document that will not be cited from", # optional
"citations": {"enabled": True}
}
Example citation
Copy
{
"type": "content_block_location",
"cited_text": "The exact text being cited", # not counted towards output tokens
"document_index": 0,
"document_title": "Document Title",
"start_block_index": 0, # 0-indexed
"end_block_index": 1 # exclusive
}
When citations are enabled, responses include multiple text blocks with citations:
Copy
{
"content": [\
{\
"type": "text",\
"text": "According to the document, "\
},\
{\
"type": "text",\
"text": "the grass is green",\
"citations": [{\
"type": "char_location",\
"cited_text": "The grass is green.",\
"document_index": 0,\
"document_title": "Example Document",\
"start_char_index": 0,\
"end_char_index": 20\
}]\
},\
{\
"type": "text",\
"text": " and "\
},\
{\
"type": "text",\
"text": "the sky is blue",\
"citations": [{\
"type": "char_location",\
"cited_text": "The sky is blue.",\
"document_index": 0,\
"document_title": "Example Document",\
"start_char_index": 20,\
"end_char_index": 36\
}]\
},\
{\
"type": "text",\
"text": ". Information from page 5 states that ",\
},\
{\
"type": "text",\
"text": "water is essential",\
"citations": [{\
"type": "page_location",\
"cited_text": "Water is essential for life.",\
"document_index": 1,\
"document_title": "PDF Document",\
"start_page_number": 5,\
"end_page_number": 6\
}]\
},\
{\
"type": "text",\
"text": ". The custom document mentions ",\
},\
{\
"type": "text",\
"text": "important findings",\
"citations": [{\
"type": "content_block_location",\
"cited_text": "These are important findings.",\
"document_index": 2,\
"document_title": "Custom Content Document",\
"start_block_index": 0,\
"end_block_index": 1\
}]\
}\
]
}
Streaming Support
For streaming responses, we’ve added a citations_delta type that contains a single citation to be added to the citations list on the current text content block.
Example streaming events
Copy
event: message_start
data: {"type": "message_start", ...}
event: content_block_start
data: {"type": "content_block_start", "index": 0, ...}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0,
"delta": {"type": "text_delta", "text": "According to..."}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0,
"delta": {"type": "citations_delta",
"citation": {
"type": "char_location",
"cited_text": "...",
"document_index": 0,
...
}}}
event: content_block_stop
data: {"type": "content_block_stop", "index": 0}
event: message_stop
data: {"type": "message_stop"}
Was this page helpful?
YesNo
Batch processing Multilingual support
Assistant
Responses are generated using AI and may contain mistakes.