web fetch ツールは、Claude が指定されたウェブページやPDFドキュメントから完全なコンテンツを取得することを可能にします。
web fetch ツールは現在ベータ版です。有効にするには、APIリクエストでベータヘッダー web-fetch-2025-09-10 を使用してください。モデルレスポンスの品質、API自体、またはドキュメントの品質についてフィードバックを提供するには、このフォームをご利用ください。
Claude が信頼できない入力と機密データを同時に処理する環境で web fetch ツールを有効にすると、データ流出のリスクが生じます。このツールは信頼できる環境でのみ、または機密でないデータを扱う際にのみ使用することをお勧めします。流出リスクを最小限に抑えるため、Claude は動的にURLを構築することは許可されていません。Claude は、ユーザーによって明示的に提供されたURL、または以前のウェブ検索やweb fetchの結果から得られたURLのみを取得できます。ただし、このツールを使用する際には慎重に考慮すべき残存リスクがあります。データ流出が懸念される場合は、以下を検討してください:
- web fetch ツールを完全に無効にする
max_uses パラメータを使用してリクエスト数を制限する
allowed_domains パラメータを使用して既知の安全なドメインに制限する
サポートされているモデル
Web fetch は以下で利用可能です:
- 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 (非推奨) (
claude-3-5-sonnet-latest)
- Claude Haiku 4.5 (
claude-haiku-4-5-20251001)
- Claude Haiku 3.5 (
claude-3-5-haiku-latest)
- Claude Opus 4.1 (
claude-opus-4-1-20250805)
- Claude Opus 4 (
claude-opus-4-20250514)
web fetch の仕組み
APIリクエストに web fetch ツールを追加すると:
- Claude はプロンプトと利用可能なURLに基づいて、いつコンテンツを取得するかを決定します。
- API は指定されたURLから完全なテキストコンテンツを取得します。
- PDFの場合、自動テキスト抽出が実行されます。
- Claude は取得したコンテンツを分析し、オプションの引用付きでレスポンスを提供します。
web fetch ツールは現在、Javascript で動的にレンダリングされるウェブサイトをサポートしていません。
web fetch の使用方法
APIリクエストで web fetch ツールを提供します:
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
}]
}'
ツール定義
web fetch ツールは以下のパラメータをサポートします:
{
"type": "web_fetch_20250910",
"name": "web_fetch",
// オプション:リクエストあたりの取得数を制限
"max_uses": 10,
// オプション:これらのドメインからのみ取得
"allowed_domains": ["example.com", "docs.example.com"],
// オプション:これらのドメインからは取得しない
"blocked_domains": ["private.example.com"],
// オプション:取得したコンテンツの引用を有効にする
"citations": {
"enabled": true
},
// オプション:トークン単位での最大コンテンツ長
"max_content_tokens": 100000
}
Max uses
max_uses パラメータは実行されるweb fetchの数を制限します。Claude が許可された数以上の取得を試行した場合、web_fetch_tool_result は max_uses_exceeded エラーコードでエラーになります。現在、デフォルトの制限はありません。
ドメインフィルタリング
ドメインフィルターを使用する場合:
- ドメインにはHTTP/HTTPSスキームを含めないでください(
https://example.com ではなく example.com を使用)
- サブドメインは自動的に含まれます(
example.com は docs.example.com をカバーします)
- サブパスがサポートされています(
example.com/blog)
- 同じリクエストで
allowed_domains または blocked_domains のいずれかを使用できますが、両方は使用できません。
ドメイン名のUnicode文字は、異なるスクリプトの視覚的に類似した文字がドメインフィルターをバイパスできるホモグラフ攻撃を通じてセキュリティ脆弱性を作成する可能性があることに注意してください。例えば、аmazon.com(キリル文字の’а’を使用)は amazon.com と同一に見えるかもしれませんが、異なるドメインを表します。ドメインの許可/ブロックリストを設定する際:
- 可能な場合はASCIIのみのドメイン名を使用する
- URLパーサーがUnicode正規化を異なって処理する可能性があることを考慮する
- 潜在的なホモグラフバリエーションでドメインフィルターをテストする
- 疑わしいUnicode文字についてドメイン設定を定期的に監査する
コンテンツ制限
max_content_tokens パラメータは、コンテキストに含まれるコンテンツの量を制限します。取得したコンテンツがこの制限を超える場合、切り詰められます。これは大きなドキュメントを取得する際のトークン使用量を制御するのに役立ちます。
max_content_tokens パラメータの制限は概算です。実際に使用される入力トークン数は少し変動する可能性があります。
引用が常に有効なウェブ検索とは異なり、web fetch では引用はオプションです。Claude が取得したドキュメントから特定の箇所を引用できるようにするには、"citations": {"enabled": true} を設定してください。
API出力をエンドユーザーに直接表示する場合、元のソースへの引用を含める必要があります。API出力を修正している場合、エンドユーザーに表示する前に再処理や独自の資料との組み合わせを含む場合は、法務チームとの相談に基づいて適切に引用を表示してください。
レスポンス
レスポンス構造の例は以下の通りです:
{
"role": "assistant",
"content": [
// 1. Claude の取得決定
{
"type": "text",
"text": "I'll fetch the content from the article to analyze it."
},
// 2. 取得リクエスト
{
"type": "server_tool_use",
"id": "srvtoolu_01234567890abcdef",
"name": "web_fetch",
"input": {
"url": "https://example.com/article"
}
},
// 3. 取得結果
{
"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 の分析(有効な場合)
{
"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"
}
取得結果
取得結果には以下が含まれます:
url: 取得されたURL
content: 取得したコンテンツを含むドキュメントブロック
retrieved_at: コンテンツが取得されたタイムスタンプ
web fetch ツールは、パフォーマンスを向上させ冗長なリクエストを削減するために結果をキャッシュします。これは、返されるコンテンツが常にURLで利用可能な最新バージョンではない可能性があることを意味します。キャッシュ動作は自動的に管理され、異なるコンテンツタイプや使用パターンに最適化するために時間とともに変更される可能性があります。
PDFドキュメントの場合、コンテンツはbase64エンコードされたデータとして返されます:
{
"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"
}
}
エラー
web fetch ツールがエラーに遭遇した場合、Claude API はレスポンスボディでエラーが表現された200(成功)レスポンスを返します:
{
"type": "web_fetch_tool_result",
"tool_use_id": "srvtoolu_a93jad",
"content": {
"type": "web_fetch_tool_error",
"error_code": "url_not_accessible"
}
}
可能なエラーコードは以下の通りです:
invalid_input: 無効なURL形式
url_too_long: URLが最大長(250文字)を超えている
url_not_allowed: ドメインフィルタリングルールとモデル制限によってブロックされたURL
url_not_accessible: コンテンツの取得に失敗(HTTPエラー)
too_many_requests: レート制限を超過
unsupported_content_type: サポートされていないコンテンツタイプ(テキストとPDFのみ)
max_uses_exceeded: web fetch ツールの最大使用回数を超過
unavailable: 内部エラーが発生
URL検証
セキュリティ上の理由から、web fetch ツールは会話コンテキストに以前に現れたURLのみを取得できます。これには以下が含まれます:
- ユーザーメッセージ内のURL
- クライアント側ツール結果内のURL
- 以前のウェブ検索やweb fetchの結果からのURL
このツールは、Claude が生成した任意のURLや、コンテナベースのサーバーツール(Code Execution、Bashなど)からのURLを取得することはできません。
検索と取得の組み合わせ
Web fetch は、包括的な情報収集のためにウェブ検索とシームレスに連携します:
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"
}
)
このワークフローでは、Claude は以下を行います:
- ウェブ検索を使用して関連記事を見つける
- 最も有望な結果を選択する
- web fetch を使用して完全なコンテンツを取得する
- 引用付きで詳細な分析を提供する
プロンプトキャッシュ
Web fetch はプロンプトキャッシュと連携します。プロンプトキャッシュを有効にするには、リクエストに cache_control ブレークポイントを追加します。キャッシュされた取得結果は会話ターン間で再利用できます。
import anthropic
client = anthropic.Anthropic()
# 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"
}
)
# Claude のレスポンスを会話に追加
messages.append({
"role": "assistant",
"content": response1.content
})
# キャッシュブレークポイント付きの2番目のリクエスト
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"
}
)
# 2番目のレスポンスはキャッシュされた取得結果の恩恵を受ける
print(f"Cache read tokens: {response2.usage.get('cache_read_input_tokens', 0)}")
ストリーミング
ストリーミングが有効な場合、取得イベントはコンテンツ取得中の一時停止を伴うストリームの一部です:
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 の取得決定
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "web_fetch"}}
// 取得URLがストリーミングされる
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"url\":\"https://example.com/article\"}"}}
// 取得実行中の一時停止
// 取得結果がストリーミングされる
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 のレスポンスが続く...
バッチリクエスト
Messages Batches APIに web fetch ツールを含めることができます。Messages Batches API を通じた web fetch ツール呼び出しは、通常の Messages API リクエストと同じ価格設定です。
使用量と価格設定
Web fetch usage has no additional charges beyond standard token costs:
"usage": {
"input_tokens": 25039,
"output_tokens": 931,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0,
"server_tool_use": {
"web_fetch_requests": 1
}
}
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 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