CARVIEW |
Select Language
HTTP/2 301
date: Sat, 11 Oct 2025 00:53:31 GMT
content-type: text/html
content-length: 167
location: https://docs.claude.com/en/docs/agents-and-tools/tool-use/web-fetch-tool
cache-control: max-age=3600
expires: Sat, 11 Oct 2025 01:53:31 GMT
vary: Accept-Encoding
server: cloudflare
cf-ray: 98ca6188bbbfe8e0-BLR
alt-svc: h3=":443"; ma=86400
HTTP/2 200
date: Sat, 11 Oct 2025 00:53:31 GMT
content-type: text/html; charset=utf-8
content-encoding: gzip
x-frame-options: DENY
content-security-policy: worker-src * blob: data: 'unsafe-eval' 'unsafe-inline'; object-src data: ; base-uri 'self'; upgrade-insecure-requests; frame-ancestors 'none'; form-action 'self' https://codesandbox.io;
x-middleware-rewrite: /_sites/docs.claude.com/en/docs/agents-and-tools/tool-use/web-fetch-tool
vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch, Accept-Encoding
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 60
x-powered-by: Next.js
cache-control: s-maxage=31536000
via: 1.1 google
alt-svc: h3=":443"; ma=86400
age: 61129
cf-cache-status: HIT
set-cookie: __cf_bm=OMlzIkK2sHrA7nnZeYwJEj1iNc5DEgmImWpEba_DZ1w-1760144011-1.0.1.1-ycD08GsKYqDca69IzPn7phU7r_EOLl6130CPl0Sn0g97.yAxoLtC3OBRyLPBvG4zDXnCkNOVYO_DpRy3oyVosYXOU7lBaKkZtuqKNWQdWco; path=/; expires=Sat, 11-Oct-25 01:23:31 GMT; domain=.claude.com; HttpOnly; Secure; SameSite=None
strict-transport-security: max-age=31536000; includeSubDomains; preload
x-content-type-options: nosniff
server: cloudflare
cf-ray: 98ca6188eff9a8b0-BLR
Web fetch tool - Claude Docs Developer Guide API Guide
First steps
Models & pricing
Learn about Claude
Capabilities
Tools
Model Context Protocol (MCP)
Prompt engineering
Tools
Web fetch tool
The web fetch tool allows Claude to retrieve full content from specified web pages and PDF documents.
For PDF documents, the content will be returned as base64-encoded data:
These are the possible error codes:
In this workflow, Claude will:
The web fetch tool is available on the Claude API at no additional cost. You only pay standard token costs for the fetched content that becomes part of your conversation context.
To protect against inadvertently fetching large content that would consume excessive tokens, use the
The web fetch tool is currently in beta. To enable it, use the beta header
web-fetch-2025-09-10
in your API requests.Please use this form to provide feedback on the quality of the model responses, the API itself, or the quality of the documentation.Enabling the web fetch tool in environments where Claude processes untrusted input alongside sensitive data poses data exfiltration risks. We recommend only using this tool in trusted environments or when handling non-sensitive data.To minimize exfiltration risks, Claude is not allowed to dynamically construct URLs. Claude can only fetch URLs that have been explicitly provided by the user or that come from previous web search or web fetch results. However, there is still residual risk that should be carefully considered when using this tool.If data exfiltration is a concern, consider:
- Disabling the web fetch tool entirely
- Using the
max_uses
parameter to limit the number of requests - Using the
allowed_domains
parameter to restrict to known safe domains
Supported models
Web fetch is available on:- Claude Opus 4.1 (
claude-opus-4-1-20250805
) - Claude Opus 4 (
claude-opus-4-20250514
) - Claude Sonnet 4.5 (
claude-sonnet-4-5-20250929
) - Claude Sonnet 4 (
claude-sonnet-4-20250514
) - Claude Sonnet 3.7 (
claude-3-7-sonnet-20250219
) - Claude Sonnet 3.5 v2 (deprecated) (
claude-3-5-sonnet-latest
) - Claude Haiku 3.5 (
claude-3-5-haiku-latest
)
How web fetch works
When you add the web fetch tool to your API request:- Claude decides when to fetch content based on the prompt and available URLs.
- The API retrieves the full text content from the specified URL.
- For PDFs, automatic text extraction is performed.
- Claude analyzes the fetched content and provides a response with optional citations.
The web fetch tool currently does not support web sites dynamically rendered via Javascript.
How to use web fetch
Provide the web fetch tool in your API request:Copy
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "anthropic-beta: web-fetch-2025-09-10" \
--header "content-type: application/json" \
--data '{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": "Please analyze the content at https://example.com/article"
}
],
"tools": [{
"type": "web_fetch_20250910",
"name": "web_fetch",
"max_uses": 5
}]
}'
Tool definition
The web fetch tool supports the following parameters:JSON
Copy
{
"type": "web_fetch_20250910",
"name": "web_fetch",
// Optional: Limit the number of fetches per request
"max_uses": 10,
// Optional: Only fetch from these domains
"allowed_domains": ["example.com", "docs.example.com"],
// Optional: Never fetch from these domains
"blocked_domains": ["private.example.com"],
// Optional: Enable citations for fetched content
"citations": {
"enabled": true
},
// Optional: Maximum content length in tokens
"max_content_tokens": 100000
}
Max uses
Themax_uses
parameter limits the number of web fetches performed. If Claude attempts more fetches than allowed, the web_fetch_tool_result
will be an error with the max_uses_exceeded
error code. There is currently no default limit.
Domain filtering
When using domain filters:- Domains should not include the HTTP/HTTPS scheme (use
example.com
instead ofhttps://example.com
) - Subdomains are automatically included (
example.com
coversdocs.example.com
) - Subpaths are supported (
example.com/blog
) - You can use either
allowed_domains
orblocked_domains
, but not both in the same request.
Be aware that Unicode characters in domain names can create security vulnerabilities through homograph attacks, where visually similar characters from different scripts can bypass domain filters. For example,
аmazon.com
(using Cyrillic ‘а’) may appear identical to amazon.com
but represents a different domain.When configuring domain allow/block lists:- Use ASCII-only domain names when possible
- Consider that URL parsers may handle Unicode normalization differently
- Test your domain filters with potential homograph variations
- Regularly audit your domain configurations for suspicious Unicode characters
Content limits
Themax_content_tokens
parameter limits the amount of content that will be included in the context. If the fetched content exceeds this limit, it will be truncated. This helps control token usage when fetching large documents.
The
max_content_tokens
parameter limit is approximate. The actual number of input tokens used can vary by a small amount.Citations
Unlike web search where citations are always enabled, citations are optional for web fetch. Set"citations": {"enabled": true}
to enable Claude to cite specific passages from fetched documents.
When displaying API outputs directly to end users, citations must be included to the original source. If you are making modifications to API outputs, including by reprocessing and/or combining them with your own material before displaying them to end users, display citations as appropriate based on consultation with your legal team.
Response
Here’s an example response structure:Copy
{
"role": "assistant",
"content": [
// 1. Claude's decision to fetch
{
"type": "text",
"text": "I'll fetch the content from the article to analyze it."
},
// 2. The fetch request
{
"type": "server_tool_use",
"id": "srvtoolu_01234567890abcdef",
"name": "web_fetch",
"input": {
"url": "https://example.com/article"
}
},
// 3. Fetch results
{
"type": "web_fetch_tool_result",
"tool_use_id": "srvtoolu_01234567890abcdef",
"content": {
"type": "web_fetch_result",
"url": "https://example.com/article",
"content": {
"type": "document",
"source": {
"type": "text",
"media_type": "text/plain",
"data": "Full text content of the article..."
},
"title": "Article Title",
"citations": {"enabled": true}
},
"retrieved_at": "2025-08-25T10:30:00Z"
}
},
// 4. Claude's analysis with citations (if enabled)
{
"text": "Based on the article, ",
"type": "text"
},
{
"text": "the main argument presented is that artificial intelligence will transform healthcare",
"type": "text",
"citations": [
{
"type": "char_location",
"document_index": 0,
"document_title": "Article Title",
"start_char_index": 1234,
"end_char_index": 1456,
"cited_text": "Artificial intelligence is poised to revolutionize healthcare delivery..."
}
]
}
],
"id": "msg_a930390d3a",
"usage": {
"input_tokens": 25039,
"output_tokens": 931,
"server_tool_use": {
"web_fetch_requests": 1
}
},
"stop_reason": "end_turn"
}
Fetch results
Fetch results include:url
: The URL that was fetchedcontent
: A document block containing the fetched contentretrieved_at
: Timestamp when the content was retrieved
The web fetch tool caches results to improve performance and reduce redundant requests. This means the content returned may not always be the latest version available at the URL. The cache behavior is managed automatically and may change over time to optimize for different content types and usage patterns.
Copy
{
"type": "web_fetch_tool_result",
"tool_use_id": "srvtoolu_02",
"content": {
"type": "web_fetch_result",
"url": "https://example.com/paper.pdf",
"content": {
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": "JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmo..."
},
"citations": {"enabled": true}
},
"retrieved_at": "2025-08-25T10:30:02Z"
}
}
Errors
When the web fetch tool encounters an error, the Claude API returns a 200 (success) response with the error represented in the response body:Copy
{
"type": "web_fetch_tool_result",
"tool_use_id": "srvtoolu_a93jad",
"content": {
"type": "web_fetch_tool_error",
"error_code": "url_not_accessible"
}
}
invalid_input
: Invalid URL formaturl_too_long
: URL exceeds maximum length (250 characters)url_not_allowed
: URL blocked by domain filtering rules and model restrictionsurl_not_accessible
: Failed to fetch content (HTTP error)too_many_requests
: Rate limit exceededunsupported_content_type
: Content type not supported (only text and PDF)max_uses_exceeded
: Maximum web fetch tool uses exceededunavailable
: An internal error occurred
URL validation
For security reasons, the web fetch tool can only fetch URLs that have previously appeared in the conversation context. This includes:- URLs in user messages
- URLs in client-side tool results
- URLs from previous web search or web fetch results
Combined search and fetch
Web fetch works seamlessly with web search for comprehensive information gathering:Copy
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Find recent articles about quantum computing and analyze the most relevant one in detail"
}
],
tools=[
{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 3
},
{
"type": "web_fetch_20250910",
"name": "web_fetch",
"max_uses": 5,
"citations": {"enabled": True}
}
],
extra_headers={
"anthropic-beta": "web-fetch-2025-09-10"
}
)
- Use web search to find relevant articles
- Select the most promising results
- Use web fetch to retrieve full content
- Provide detailed analysis with citations
Prompt caching
Web fetch works with prompt caching. To enable prompt caching, addcache_control
breakpoints in your request. Cached fetch results can be reused across conversation turns.
Copy
import anthropic
client = anthropic.Anthropic()
# First request with web fetch
messages = [
{
"role": "user",
"content": "Analyze this research paper: https://arxiv.org/abs/2024.12345"
}
]
response1 = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=messages,
tools=[{
"type": "web_fetch_20250910",
"name": "web_fetch"
}],
extra_headers={
"anthropic-beta": "web-fetch-2025-09-10"
}
)
# Add Claude's response to conversation
messages.append({
"role": "assistant",
"content": response1.content
})
# Second request with cache breakpoint
messages.append({
"role": "user",
"content": "What methodology does the paper use?",
"cache_control": {"type": "ephemeral"}
})
response2 = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=messages,
tools=[{
"type": "web_fetch_20250910",
"name": "web_fetch"
}],
extra_headers={
"anthropic-beta": "web-fetch-2025-09-10"
}
)
# The second response benefits from cached fetch results
print(f"Cache read tokens: {response2.usage.get('cache_read_input_tokens', 0)}")
Streaming
With streaming enabled, fetch events are part of the stream with a pause during content retrieval:Copy
event: message_start
data: {"type": "message_start", "message": {"id": "msg_abc123", "type": "message"}}
event: content_block_start
data: {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}}
// Claude's decision to fetch
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "web_fetch"}}
// Fetch URL streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"url\":\"https://example.com/article\"}"}}
// Pause while fetch executes
// Fetch results streamed
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "web_fetch_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": {"type": "web_fetch_result", "url": "https://example.com/article", "content": {"type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "Article content..."}}}}}
// Claude's response continues...
Batch requests
You can include the web fetch tool in the Messages Batches API. Web fetch tool calls through the Messages Batches API are priced the same as those in regular Messages API requests.Usage and pricing
Web fetch usage has no additional charges beyond standard token costs:Copy
"usage": {
"input_tokens": 25039,
"output_tokens": 931,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0,
"server_tool_use": {
"web_fetch_requests": 1
}
}
max_content_tokens
parameter to set appropriate limits based on your use case and budget considerations.
Example token usage for typical content:
- Average web page (10KB): ~2,500 tokens
- Large documentation page (100KB): ~25,000 tokens
- Research paper PDF (500KB): ~125,000 tokens
Was this page helpful?
Assistant
Responses are generated using AI and may contain mistakes.