web fetchツールを使用すると、Claudeが指定されたWebページやPDFドキュメントから完全なコンテンツを取得できます。

web fetchツールは現在ベータ版です。有効にするには、APIリクエストでベータヘッダーweb-fetch-2025-09-10を使用してください。

モデルレスポンスの品質、API自体、またはドキュメントの品質についてフィードバックを提供するには、このフォームをご利用ください。

Claudeが機密データと一緒に信頼できない入力を処理する環境でweb fetchツールを有効にすると、データ流出のリスクが生じます。このツールは信頼できる環境でのみ、または機密でないデータを扱う際にのみ使用することをお勧めします。

流出リスクを最小限に抑えるため、ClaudeはURLを動的に構築することは許可されていません。Claudeは、ユーザーによって明示的に提供されたURL、または以前のWeb検索やweb fetch結果から取得されたURLのみを取得できます。ただし、このツールを使用する際には慎重に検討すべき残存リスクがあります。

データ流出が懸念される場合は、以下を検討してください:

  • web fetchツールを完全に無効にする
  • max_usesパラメータを使用してリクエスト数を制限する
  • allowed_domainsパラメータを使用して既知の安全なドメインに制限する

サポートされているモデル

Web fetchは以下で利用可能です:

  • Claude Opus 4.1 (claude-opus-4-1-20250805)
  • Claude Opus 4 (claude-opus-4-20250514)
  • 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 3.5 (claude-3-5-haiku-latest)

web fetchの仕組み

APIリクエストにweb fetchツールを追加すると:

  1. Claudeはプロンプトと利用可能なURLに基づいて、いつコンテンツを取得するかを決定します。
  2. APIは指定されたURLから完全なテキストコンテンツを取得します。
  3. PDFの場合、自動テキスト抽出が実行されます。
  4. Claudeは取得したコンテンツを分析し、オプションの引用付きでレスポンスを提供します。

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-opus-4-1-20250805",
        "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ツールは以下のパラメータをサポートしています:

JSON
{
  "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_resultmax_uses_exceededエラーコードでエラーになります。現在、デフォルトの制限はありません。

ドメインフィルタリング

ドメインフィルターを使用する場合:

  • ドメインにはHTTP/HTTPSスキームを含めないでください(https://example.comではなくexample.comを使用)
  • サブドメインは自動的に含まれます(example.comdocs.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検索では引用が常に有効になっているのとは異なり、web fetchでは引用はオプションです。Claudeが取得したドキュメントから特定の箇所を引用できるようにするには、"citations": {"enabled": true}を設定してください。

Web結果やWeb結果に含まれる情報をエンドユーザーに表示する際、インライン引用はユーザーインターフェースで明確に見えるようにし、クリック可能にする必要があります。

レスポンス

レスポンス構造の例は以下の通りです:

{
  "role": "assistant",
  "content": [
    // 1. Claudeの取得決定
    {
      "type": "text",
      "text": "記事のコンテンツを取得して分析します。"
    },
    // 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": "記事の完全なテキストコンテンツ..."
          },
          "title": "記事タイトル",
          "citations": {"enabled": true}
        },
        "retrieved_at": "2025-08-25T10:30:00Z"
      }
    },
    // 4. 引用付きのClaudeの分析(有効な場合)
    {
      "text": "記事に基づくと、",
      "type": "text"
    },
    {
      "text": "提示されている主な論点は、人工知能がヘルスケアを変革するということです",
      "type": "text",
      "citations": [
        {
          "type": "char_location",
          "document_index": 0,
          "document_title": "記事タイトル",
          "start_char_index": 1234,
          "end_char_index": 1456,
          "cited_text": "人工知能はヘルスケア提供を革命化する準備ができています..."
        }
      ]
    }
  ],
  "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ツールがエラーに遭遇した場合、Anthropic 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検索やweb fetch結果からのURL

このツールは、Claudeが生成した任意のURLやコンテナベースのサーバーツール(Code Execution、Bashなど)からのURLを取得することはできません。

検索と取得の組み合わせ

Web fetchは包括的な情報収集のためにWeb検索とシームレスに連携します:

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-1-20250805",
    max_tokens=4096,
    messages=[
        {
            "role": "user",
            "content": "量子コンピューティングに関する最近の記事を見つけて、最も関連性の高いものを詳細に分析してください"
        }
    ],
    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は以下を行います:

  1. Web検索を使用して関連記事を見つける
  2. 最も有望な結果を選択する
  3. web fetchを使用して完全なコンテンツを取得する
  4. 引用付きで詳細な分析を提供する

プロンプトキャッシング

Web fetchはプロンプトキャッシングと連携します。プロンプトキャッシングを有効にするには、リクエストにcache_controlブレークポイントを追加してください。キャッシュされた取得結果は会話ターン間で再利用できます。

import anthropic

client = anthropic.Anthropic()

# web fetchを使用した最初のリクエスト
messages = [
    {
        "role": "user",
        "content": "この研究論文を分析してください:https://arxiv.org/abs/2024.12345"
    }
]

response1 = client.messages.create(
    model="claude-opus-4-1-20250805",
    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": "この論文はどのような方法論を使用していますか?",
    "cache_control": {"type": "ephemeral"}
})

response2 = client.messages.create(
    model="claude-opus-4-1-20250805",
    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"キャッシュ読み取りトークン: {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": "記事コンテンツ..."}}}}}

// 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 Anthropic 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