---
title: Инструмент веб-загрузки
url: https://platform.claude.com/docs/ru/agents-and-tools/tool-use/web-fetch-tool
description: Загружайте и читайте содержимое с определённых URL-адресов, чтобы дополнить контекст Claude актуальным веб-содержимым.
---

<Note>
  Чтобы узнать, как «zero data retention» (нулевое хранение данных), или ZDR, применяется к этой функции, см. раздел [API и хранение данных](https://platform.claude.com/docs/ru/manage-claude/api-and-data-retention).
</Note>

Инструмент «web fetch» (веб-загрузка) позволяет Claude получать полное содержимое указанных веб-страниц и PDF-документов.

Последняя версия инструмента веб-загрузки (`web_fetch_20260318`) поддерживает **«dynamic filtering»** (динамическую фильтрацию): Claude может писать и выполнять код, чтобы отфильтровать загруженное содержимое до того, как оно попадёт в «context window» (контекстное окно). В контексте остаётся только релевантная информация, а всё остальное отбрасывается. Это снижает расход токенов без потери качества ответов. Динамическая фильтрация доступна в Claude 4.6 и более поздних моделях, а также в [Claude Mythos Preview](https://anthropic.com/glasswing). Кроме того, `web_fetch_20260318` добавляет управление [включением в ответ](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/web-fetch-tool#response-inclusion) для агентных рабочих процессов. Предыдущие версии остаются доступными: `web_fetch_20260309` (динамическая фильтрация и [обход кэша](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/web-fetch-tool#cache-bypass)), `web_fetch_20260209` (только динамическая фильтрация) и `web_fetch_20250910` (базовая загрузка).

Веб-загрузка (с динамической фильтрацией и без неё) доступна в Claude API, [Claude Platform on AWS](https://platform.claude.com/docs/ru/build-with-claude/claude-platform-on-aws) и [Microsoft Foundry](https://platform.claude.com/docs/ru/build-with-claude/claude-in-microsoft-foundry). В Microsoft Foundry развёртывания, [размещённые в Azure](https://platform.claude.com/docs/ru/build-with-claude/claude-in-microsoft-foundry#additional-features-not-supported-when-hosted-on-azure), поддерживают только базовый инструмент веб-загрузки (`web_fetch_20250910`, без динамической фильтрации). Развёртывания, размещённые в Anthropic, поддерживают все версии. В настоящее время веб-загрузка недоступна в Amazon Bedrock и Google Cloud.

<Note>
  Для [Claude Mythos Preview](https://anthropic.com/glasswing) веб-загрузка доступна в Claude API и Microsoft Foundry. Для Mythos Preview в Amazon Bedrock и Google Cloud она в настоящее время недоступна.
</Note>

<Note>
  Используйте [форму обратной связи](https://forms.gle/NhWcgmkcvPCMmPE86), чтобы оставить отзыв о качестве ответов модели, о самом API или о качестве документации.
</Note>

Сведения о соответствии требованиям Zero Data Retention и об обходном решении с `allowed_callers` см. в разделе [Серверные инструменты](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/server-tools#zdr-and-allowed-callers).

<Warning>
  Включение инструмента веб-загрузки в средах, где Claude обрабатывает недоверенные входные данные вместе с конфиденциальными данными, создаёт риски «data exfiltration» (утечки данных). Используйте этот инструмент только в доверенных средах или при работе с неконфиденциальными данными.

  Чтобы снизить риски утечки, Claude не может загружать URL-адреса, которые встречаются только в его собственных выходных данных. Claude может загружать только те URL-адреса, которые ранее уже появлялись в диалоге: URL-адреса в сообщениях пользователя, URL-адреса в результатах клиентских инструментов (даже если результат повторяет текст, сгенерированный Claude), а также URL-адреса из предыдущих результатов веб-поиска или веб-загрузки (см. [Проверка URL-адресов](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/web-fetch-tool#url-validation)). Кроме того, Claude не может загрузить URL-адрес, который, по всей видимости, содержит учётные данные, например ключ API или пароль, если только эти учётные данные не указаны в системной подсказке или в тексте сообщения пользователя.

  Тем не менее остаточный риск сохраняется, и его следует тщательно учитывать при использовании этого инструмента.

  Если утечка данных вызывает опасения, рассмотрите следующие варианты:

  * Полностью отключить инструмент веб-загрузки
  * Использовать параметр `max_uses`, чтобы ограничить количество запросов
  * Использовать параметр `allowed_domains`, чтобы ограничиться заведомо безопасными доменами
</Warning>

Сведения о поддержке моделей см. в [Справочнике по инструментам](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/tool-reference).

## Как работает веб-загрузка

Веб-загрузка — это «[server tool](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/server-tools)» (серверный инструмент): API загружает содержимое во время обработки запроса и вставляет результаты в диалог. Вам не нужно ничего запускать или возвращать `tool_result`. Исключение составляет случай, когда Claude вызывает веб-загрузку и один из ваших клиентских инструментов в одной группе параллельных вызовов инструментов. В этом случае API возвращает ответ с `stop_reason: "tool_use"` ещё до выполнения загрузки, а затем выполняет загрузку, когда вы отправляете обратно блоки `tool_result` клиентских инструментов. См. [Сочетание серверных и клиентских инструментов в одном ходе](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/server-tools#mixing-server-tools-and-client-tools-in-one-turn).

Когда вы добавляете инструмент веб-загрузки в запрос к API:

1. Claude определяет, когда загружать содержимое, исходя из подсказки и доступных URL-адресов.
2. API получает полное текстовое содержимое по указанному URL-адресу.
3. Для PDF-файлов API возвращает содержимое в виде данных в кодировке base64 и обрабатывает его так же, как напрямую прикреплённый PDF-документ.
4. Claude анализирует загруженное содержимое и формирует ответ, при необходимости с цитатами.

<Note>
  В настоящее время инструмент веб-загрузки не поддерживает веб-сайты, которые динамически отрисовываются с помощью JavaScript. Для страниц, которым нужен настоящий браузер (отрисовка JavaScript, нажатия или заполнение форм), рассмотрите [инструмент использования браузера](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/browser-use-tool). Это клиентский инструмент: ваше приложение управляет браузером и возвращает Claude текст страницы или снимки экрана в качестве результатов инструмента.
</Note>

### Когда Claude выполняет загрузку

Claude выполняет загрузку, когда запрос указывает на конкретную страницу или документ:

* В диалоге (или в предыдущем результате инструмента) указан URL-адрес
* Пользователь называет конкретный ресурс (определённую статью, README, страницу с ценами или раздел документации) без URL-адреса, и при этом также включён [инструмент веб-поиска](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/web-search-tool), чтобы Claude мог сначала найти этот ресурс (см. [Совместное использование поиска и загрузки](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/web-fetch-tool#combined-search-and-fetch))

Claude **не** выполняет загрузку для вопросов общего характера или открытых вопросов, которые не ссылаются на конкретную страницу. Запрос «Кратко изложи эту статью: `<url>`» запускает загрузку. На вопрос «Каковы лучшие практики проектирования REST API?» Claude отвечает напрямую.

### Динамическая фильтрация

Загрузка полных веб-страниц и PDF-файлов может быстро расходовать токены, особенно когда из больших документов нужна лишь определённая информация. С `web_fetch_20260209` или более поздней версией Claude может писать и выполнять код, чтобы отфильтровать загруженное содержимое перед его загрузкой в контекст.

Динамическая фильтрация особенно полезна для:

* Извлечения определённых разделов из длинных документов
* Обработки структурированных данных с веб-страниц
* Отбора релевантной информации из PDF-файлов
* Снижения затрат на токены при работе с большими документами

<Note>
  Динамическая фильтрация работает на основе [инструмента выполнения кода](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/code-execution-tool), который API автоматически включает для запроса. Добавлять инструмент выполнения кода в массив `tools` не нужно.
</Note>

Чтобы включить динамическую фильтрацию, используйте `web_fetch_20260209` или любую более позднюю версию. В следующих примерах используется `web_fetch_20260318`:

<CodeGroup>
  ```bash cURL
  curl https://api.anthropic.com/v1/messages \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "content-type: application/json" \
    -d '{
      "model": "claude-opus-5-5",
      "max_tokens": 4096,
      "messages": [
        {
          "role": "user",
          "content": "Fetch the content at https://example.com/research-paper and extract the key findings."
        }
      ],
      "tools": [{
        "type": "web_fetch_20260318",
        "name": "web_fetch"
      }]
    }'
  ```

  ```bash CLI
  ant messages create <<'YAML'
  model: claude-opus-5-5
  max_tokens: 4096
  messages:
    - role: user
      content: >-
        Fetch the content at https://example.com/research-paper
        and extract the key findings.
  tools:
    - type: web_fetch_20260318
      name: web_fetch
  YAML
  ```

  ```python Python
  client = anthropic.Anthropic()

  response = client.messages.create(
      model="claude-opus-5-5",
      max_tokens=4096,
      messages=[
          {
              "role": "user",
              "content": "Fetch the content at https://example.com/research-paper and extract the key findings.",
          }
      ],
      tools=[{"type": "web_fetch_20260318", "name": "web_fetch"}],
  )
  print(response)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const response = await client.messages.create({
    model: "claude-opus-5-5",
    max_tokens: 4096,
    messages: [
      {
        role: "user",
        content:
          "Fetch the content at https://example.com/research-paper and extract the key findings."
      }
    ],
    tools: [{ type: "web_fetch_20260318", name: "web_fetch" }]
  });

  console.log(response);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var parameters = new MessageCreateParams
  {
      Model = Model.ClaudeOpus5_5,
      MaxTokens = 4096,
      Messages = [new() { Role = Role.User, Content = "Fetch the content at https://example.com/research-paper and extract the key findings." }],
      Tools = [new ToolUnion(new WebFetchTool20260318())]
  };

  var message = await client.Messages.Create(parameters);
  Console.WriteLine(message);
  ```

  ```go Go
  client := anthropic.NewClient()

  response, err := client.Messages.New(context.TODO(), anthropic.MessageNewParams{
  	Model:     anthropic.ModelClaudeOpus5_5,
  	MaxTokens: 4096,
  	Messages: []anthropic.MessageParam{
  		anthropic.NewUserMessage(anthropic.NewTextBlock("Fetch the content at https://example.com/research-paper and extract the key findings.")),
  	},
  	Tools: []anthropic.ToolUnionParam{
  		{OfWebFetchTool20260318: &anthropic.WebFetchTool20260318Param{}},
  	},
  })
  if err != nil {
  	log.Fatal(err)
  }
  fmt.Println(response.RawJSON())
  ```

  ```java Java
  import com.anthropic.models.messages.WebFetchTool20260318;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      MessageCreateParams params = MessageCreateParams.builder()
          .model(Model.CLAUDE_OPUS_5_5)
          .maxTokens(4096L)
          .addUserMessage("Fetch the content at https://example.com/research-paper and extract the key findings.")
          .addTool(WebFetchTool20260318.builder().build())
          .build();

      Message response = client.messages().create(params);
      IO.println(response);
  }
  ```

  ```php PHP
  $client = new Client();

  $message = $client->messages->create(
      maxTokens: 4096,
      messages: [
          ['role' => 'user', 'content' => 'Fetch the content at https://example.com/research-paper and extract the key findings.']
      ],
      model: 'claude-opus-5-5',
      tools: [[
          'type' => 'web_fetch_20260318',
          'name' => 'web_fetch',
      ]],
  );
  echo $message;
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  message = client.messages.create(
    model: "claude-opus-5-5",
    max_tokens: 4096,
    messages: [
      { role: "user", content: "Fetch the content at https://example.com/research-paper and extract the key findings." }
    ],
    tools: [{
      type: "web_fetch_20260318",
      name: "web_fetch"
    }]
  )
  puts message
  ```
</CodeGroup>

## Как использовать веб-загрузку

Добавьте инструмент веб-загрузки в запрос к API:

<CodeGroup>
  ```bash cURL
  curl https://api.anthropic.com/v1/messages \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "content-type: application/json" \
    -d '{
      "model": "claude-opus-5-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
      }]
    }'
  ```

  ```bash CLI
  ant messages create \
    --model claude-opus-5-5 \
    --max-tokens 1024 \
    --message '{role: user, content: "Please analyze the content at https://example.com/article"}' \
    --tool '{type: web_fetch_20250910, name: web_fetch, max_uses: 5}'
  ```

  ```python Python
  client = anthropic.Anthropic()

  response = client.messages.create(
      model="claude-opus-5-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}],
  )
  print(response)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const response = await client.messages.create({
    model: "claude-opus-5-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
      }
    ]
  });

  console.log(response);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var parameters = new MessageCreateParams
  {
      Model = Model.ClaudeOpus5_5,
      MaxTokens = 1024,
      Messages = [new() { Role = Role.User, Content = "Please analyze the content at https://example.com/article" }],
      Tools = [new ToolUnion(new WebFetchTool20250910() { MaxUses = 5 })]
  };

  var message = await client.Messages.Create(parameters);
  Console.WriteLine(message);
  ```

  ```go Go
  client := anthropic.NewClient()

  response, err := client.Messages.New(context.TODO(), anthropic.MessageNewParams{
  	Model:     anthropic.ModelClaudeOpus5_5,
  	MaxTokens: 1024,
  	Messages: []anthropic.MessageParam{
  		anthropic.NewUserMessage(anthropic.NewTextBlock("Please analyze the content at https://example.com/article")),
  	},
  	Tools: []anthropic.ToolUnionParam{
  		{OfWebFetchTool20250910: &anthropic.WebFetchTool20250910Param{
  			MaxUses: anthropic.Int(5),
  		}},
  	},
  })
  if err != nil {
  	log.Fatal(err)
  }
  fmt.Println(response.RawJSON())
  ```

  ```java Java
  import com.anthropic.models.messages.WebFetchTool20250910;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      MessageCreateParams params = MessageCreateParams.builder()
          .model(Model.CLAUDE_OPUS_5_5)
          .maxTokens(1024L)
          .addUserMessage("Please analyze the content at https://example.com/article")
          .addTool(WebFetchTool20250910.builder()
              .maxUses(5L)
              .build())
          .build();

      Message response = client.messages().create(params);
      IO.println(response);
  }
  ```

  ```php PHP
  $client = new Client();

  $message = $client->messages->create(
      maxTokens: 1024,
      messages: [
          ['role' => 'user', 'content' => 'Please analyze the content at https://example.com/article']
      ],
      model: 'claude-opus-5-5',
      tools: [[
          'type' => 'web_fetch_20250910',
          'name' => 'web_fetch',
          'max_uses' => 5,
      ]],
  );
  echo $message;
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  message = client.messages.create(
    model: "claude-opus-5-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
    }]
  )
  puts message
  ```
</CodeGroup>

## Определение инструмента

Инструмент веб-загрузки поддерживает следующие параметры:

```json JSON
{
  "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 (cannot be combined with allowed_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
}
```

В более поздних версиях инструмента добавлены ещё два необязательных параметра: для `use_cache` требуется `web_fetch_20260309` или более поздняя версия (см. [Обход кэша](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/web-fetch-tool#cache-bypass)), а для `response_inclusion` — `web_fetch_20260318` или более поздняя версия (см. [Включение в ответ](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/web-fetch-tool#response-inclusion)).

### Максимальное количество использований

Параметр `max_uses` ограничивает количество выполняемых веб-загрузок. Неудачные загрузки также учитываются в этом лимите. Если Claude пытается выполнить больше загрузок, чем разрешено, `web_fetch_tool_result` содержит ошибку с кодом `max_uses_exceeded`. В настоящее время лимит по умолчанию не установлен.

### Фильтрация доменов

Сведения о фильтрации доменов с помощью `allowed_domains` и `blocked_domains` см. в разделе [Серверные инструменты](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/server-tools#domain-filtering).

В [Claude Managed Agents](https://platform.claude.com/docs/ru/managed-agents/overview) задайте эти поля в записи `web_fetch` набора инструментов агента, где каждый указанный домен должен быть простым именем хоста без пути; см. [Ограничение доменов для веб-поиска и веб-загрузки](https://platform.claude.com/docs/ru/managed-agents/tools-web-restrictions).

### Ограничения содержимого

Параметр `max_content_tokens` ограничивает объём содержимого, включаемого в контекст. Если загруженное содержимое превышает этот лимит, инструмент обрезает его. Это помогает контролировать расход токенов при загрузке больших документов. Лимит применяется к текстовому содержимому, но не к двоичному содержимому, например PDF-файлам.

<Note>
  Лимит параметра `max_content_tokens` является приблизительным. Фактическое количество использованных входных токенов может незначительно отличаться.
</Note>

В Claude Managed Agents запись `web_fetch` набора инструментов агента также принимает `max_content_tokens`; см. [настройки веб-инструментов](https://platform.claude.com/docs/ru/managed-agents/tools-web-restrictions#settings).

### Обход кэша

<Note>
  Требуется `web_fetch_20260309` или более поздняя версия (включая `web_fetch_20260318`).
</Note>

Параметр `use_cache` определяет, может ли возвращаться кэшированное содержимое. Установите `"use_cache": false`, чтобы обойти кэш и загрузить свежее содержимое. Значение по умолчанию — `true`. Отключайте кэширование, только если пользователь явно запрашивает свежее содержимое или если вы загружаете быстро меняющиеся источники, поскольку обход кэша увеличивает «latency» (задержку).

```json
{
  "tools": [
    {
      "type": "web_fetch_20260309",
      "name": "web_fetch",
      "use_cache": false
    }
  ]
}
```

### Включение в ответ

<Note>
  Требуется `web_fetch_20260318` или более поздняя версия.
</Note>

Параметр `response_inclusion` определяет, как блоки результатов загрузки отображаются в ответе API, если результат был использован завершённым вызовом [выполнения кода](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/code-execution-tool) в том же ходе. Установите `"response_inclusion": "excluded"`, чтобы полностью исключить из ответа такие вложенные пары блоков `server_tool_use` и результатов. Это снижает затраты на выходные токены в агентных рабочих процессах, которым не нужно возвращать клиенту необработанное содержимое страниц. Значение по умолчанию — `"full"`. Результаты прямых вызовов, а также вызовов выполнения кода, которые были приостановлены до завершения, всегда возвращаются полностью, чтобы их можно было отправить обратно в следующем ходе.

```json
{
  "tools": [
    {
      "type": "web_fetch_20260318",
      "name": "web_fetch",
      "response_inclusion": "excluded"
    }
  ]
}
```

### Цитаты

В отличие от веб-поиска, где цитаты включены всегда, для веб-загрузки цитаты необязательны и по умолчанию отключены. Установите `"citations": {"enabled": true}`, чтобы Claude мог цитировать определённые фрагменты загруженных документов.

<Note>
  При показе выходных данных API непосредственно конечным пользователям указывайте цитаты со ссылками на первоисточник. Если вы вносите изменения в выходные данные API, в том числе повторно обрабатываете их или объединяете с собственными материалами перед показом конечным пользователям, отображайте цитаты надлежащим образом, проконсультировавшись со своей юридической командой.
</Note>

## Ответ

Вот пример структуры ответа:

```json Output
{
  "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"
}
```

### Результаты загрузки

Результаты загрузки включают:

* `url`: загруженный URL-адрес
* `content`: блок документа с загруженным содержимым
* `retrieved_at`: временная метка получения содержимого

<Note>
  Инструмент веб-загрузки кэширует результаты, чтобы повысить производительность и сократить количество избыточных запросов. Возвращаемое содержимое не всегда может отражать последнюю версию, доступную по URL-адресу. Поведение кэша управляется автоматически и со временем может меняться для оптимизации под разные типы содержимого и сценарии использования. Чтобы загрузить свежее содержимое, установите `"use_cache": false` (см. [Обход кэша](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/web-fetch-tool#cache-bypass)).
</Note>

Для PDF-документов содержимое возвращается в виде данных в кодировке base64:

```json Output
{
  "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"
  }
}
```

### Ошибки

Когда инструмент веб-загрузки сталкивается с ошибкой, Claude API возвращает ответ 200 (успех), а ошибка представлена в теле ответа. Claude видит результат с ошибкой и продолжает ход. Например:

```json Output
{
  "type": "web_fetch_tool_result",
  "tool_use_id": "srvtoolu_a93jad",
  "content": {
    "type": "web_fetch_tool_result_error",
    "error_code": "url_not_accessible"
  }
}
```

Возможные коды ошибок:

* `invalid_tool_input`: недопустимые входные данные инструмента, например некорректный URL-адрес или схема, отличная от HTTP(S)
* `url_too_long`: URL-адрес превышает максимальную длину (250 символов)
* `url_not_allowed`: URL-адрес заблокирован правилами фильтрации доменов (включая настройки вашей организации) или ограничениями на стороне Anthropic, например для частных адресов, `robots.txt` и URL-адресов, которые, по всей видимости, содержат не предоставленные вами учётные данные
* `url_not_in_prior_context`: URL-адрес ранее не встречался в диалоге (см. [Проверка URL-адресов](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/web-fetch-tool#url-validation))
* `url_not_accessible`: не удалось загрузить содержимое (ошибка HTTP)
* `too_many_requests`: превышено ограничение скорости
* `unsupported_content_type`: тип содержимого не поддерживается (поддерживаются только текст, HTML и PDF)
* `max_uses_exceeded`: превышено максимальное количество использований инструмента веб-загрузки
* `unavailable`: произошла внутренняя ошибка

## Проверка URL-адресов

По соображениям безопасности инструмент веб-загрузки может загружать только те URL-адреса, которые ранее уже появлялись в контексте диалога. К ним относятся:

* URL-адреса в сообщениях пользователя
* URL-адреса в результатах клиентских инструментов
* URL-адреса из предыдущих результатов веб-поиска или веб-загрузки

Инструмент не может загружать URL-адреса, которые встречаются только в собственных выходных данных Claude или только в системной подсказке. Чтобы URL-адрес из системной подсказки можно было загрузить, укажите его также в сообщении пользователя. Результаты других серверных инструментов, таких как [выполнение кода](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/code-execution-tool), [коннектор MCP](https://platform.claude.com/docs/ru/agents-and-tools/mcp-connector) или [поиск инструментов](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/tool-search-tool), также не являются допустимым источником. Результаты клиентских инструментов являются допустимым источником, даже если они повторяют текст, созданный Claude (например, команда, которая выводит свои входные данные, или сообщение об ошибке, которое их цитирует).

Инструмент также отклоняет URL-адрес, который, по всей видимости, содержит учётные данные, например ключ API или пароль, если только эти учётные данные не указаны в системной подсказке или в тексте сообщения пользователя. Учётные данные, которые встречаются только в результате инструмента, не учитываются. В результате возвращается ошибка `url_not_allowed`. Чтобы загрузить такой URL-адрес, укажите его в сообщении пользователя.

## Совместное использование поиска и загрузки

Когда включены и инструмент веб-поиска, и инструмент веб-загрузки, а пользователь называет конкретную страницу или документ, не указывая URL-адрес (например, «прочитай README из репозитория anthropics/anthropic-sdk-python»), Claude сначала находит ресурс с помощью веб-поиска, а затем загружает результат. В следующем примере поиск и анализ запрашиваются в одном запросе:

<CodeGroup>
  ```bash cURL
  curl https://api.anthropic.com/v1/messages \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "content-type: application/json" \
    -d '{
      "model": "claude-opus-5-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}
        }
      ]
    }'
  ```

  ```bash CLI
  ant messages create <<'YAML'
  model: claude-opus-5-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
  YAML
  ```

  ```python Python
  client = anthropic.Anthropic()

  response = client.messages.create(
      model="claude-opus-5-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},
          },
      ],
  )
  print(response)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const response = await client.messages.create({
    model: "claude-opus-5-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 }
      }
    ]
  });

  console.log(response);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var parameters = new MessageCreateParams
  {
      Model = Model.ClaudeOpus5_5,
      MaxTokens = 4096,
      Messages = [new() { Role = Role.User, Content = "Find recent articles about quantum computing and analyze the most relevant one in detail" }],
      Tools = [
          new ToolUnion(new WebSearchTool20250305() { MaxUses = 3 }),
          new ToolUnion(new WebFetchTool20250910() { MaxUses = 5, Citations = new() { Enabled = true } })
      ]
  };

  var message = await client.Messages.Create(parameters);
  Console.WriteLine(message);
  ```

  ```go Go
  client := anthropic.NewClient()

  response, err := client.Messages.New(context.TODO(), anthropic.MessageNewParams{
  	Model:     anthropic.ModelClaudeOpus5_5,
  	MaxTokens: 4096,
  	Messages: []anthropic.MessageParam{
  		anthropic.NewUserMessage(anthropic.NewTextBlock("Find recent articles about quantum computing and analyze the most relevant one in detail")),
  	},
  	Tools: []anthropic.ToolUnionParam{
  		{OfWebSearchTool20250305: &anthropic.WebSearchTool20250305Param{
  			MaxUses: anthropic.Int(3),
  		}},
  		{OfWebFetchTool20250910: &anthropic.WebFetchTool20250910Param{
  			MaxUses:   anthropic.Int(5),
  			Citations: anthropic.CitationsConfigParam{Enabled: anthropic.Bool(true)},
  		}},
  	},
  })
  if err != nil {
  	log.Fatal(err)
  }
  fmt.Println(response.RawJSON())
  ```

  ```java Java
  import com.anthropic.models.messages.CitationsConfigParam;
  // ...
  import com.anthropic.models.messages.WebFetchTool20250910;
  import com.anthropic.models.messages.WebSearchTool20250305;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      MessageCreateParams params = MessageCreateParams.builder()
          .model(Model.CLAUDE_OPUS_5_5)
          .maxTokens(4096L)
          .addUserMessage("Find recent articles about quantum computing and analyze the most relevant one in detail")
          .addTool(WebSearchTool20250305.builder()
              .maxUses(3L)
              .build())
          .addTool(WebFetchTool20250910.builder()
              .maxUses(5L)
              .citations(CitationsConfigParam.builder().enabled(true).build())
              .build())
          .build();

      Message response = client.messages().create(params);
      IO.println(response);
  }
  ```

  ```php PHP
  $client = new Client();

  $message = $client->messages->create(
      maxTokens: 4096,
      messages: [
          ['role' => 'user', 'content' => 'Find recent articles about quantum computing and analyze the most relevant one in detail']
      ],
      model: 'claude-opus-5-5',
      tools: [
          [
              'type' => 'web_search_20250305',
              'name' => 'web_search',
              'max_uses' => 3,
          ],
          [
              'type' => 'web_fetch_20250910',
              'name' => 'web_fetch',
              'max_uses' => 5,
              'citations' => ['enabled' => true],
          ],
      ],
  );
  echo $message;
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  message = client.messages.create(
    model: "claude-opus-5-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 }
      }
    ]
  )
  puts message
  ```
</CodeGroup>

В этом рабочем процессе Claude:

1. Использует веб-поиск для поиска релевантных статей.
2. Выбирает наиболее перспективные результаты.
3. Использует веб-загрузку для получения полного содержимого.
4. Предоставляет подробный анализ с цитатами.

## Кэширование подсказок

О кэшировании определений инструментов между ходами см. в разделе [Использование инструментов с кэшированием подсказок](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/tool-use-with-prompt-caching).

## Потоковая передача

При включённой потоковой передаче события загрузки входят в поток, а на время получения содержимого возникает пауза:

```sse Output
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...
```

## Пакетные запросы

Инструмент веб-загрузки можно использовать в [Messages Batches API](https://platform.claude.com/docs/ru/build-with-claude/batch-processing). Вызовы инструмента веб-загрузки через Messages Batches API тарифицируются так же, как и в обычных запросах к Messages API.

## Использование и цены

Использование web fetch (веб-загрузки) **не влечёт дополнительных расходов** помимо стандартной стоимости токенов:

```json
{
  "usage": {
    "input_tokens": 25039,
    "output_tokens": 931,
    "cache_read_input_tokens": 0,
    "cache_creation_input_tokens": 0,
    "server_tool_use": {
      "web_fetch_requests": 1
    }
  }
}
```

Инструмент web fetch доступен в Claude API **без дополнительной платы**. Вы оплачиваете только стандартную стоимость токенов за загруженный контент, который становится частью контекста вашего разговора.

Чтобы защититься от непреднамеренной загрузки большого объёма контента, который потребил бы чрезмерное количество токенов, используйте параметр `max_content_tokens` для установки подходящих ограничений в зависимости от вашего сценария использования и бюджетных соображений.

Пример использования токенов для типичного контента:

* Средняя веб-страница (10 кБ): \~2 500 токенов
* Большая страница документации (100 кБ): \~25 000 токенов
* Научная статья в формате PDF (500 кБ): \~125 000 токенов

## Следующие шаги

<CardGroup>
  <Card href="https://platform.claude.com/docs/ru/agents-and-tools/tool-use/code-execution-tool" title="Инструмент выполнения кода" icon="code">
    Выполняйте код на Python и bash в изолированном контейнере, чтобы анализировать данные, создавать файлы и итеративно улучшать решения.
  </Card>

  <Card href="https://platform.claude.com/docs/ru/agents-and-tools/tool-use/server-tools" title="Серверные инструменты" icon="cloud">
    Работайте с инструментами, выполняемыми Anthropic: блоки server\_tool\_use, продолжение после pause\_turn и фильтрация доменов.
  </Card>

  <Card href="https://platform.claude.com/docs/ru/agents-and-tools/tool-use/tool-reference" title="Справочник по инструментам" icon="book">
    Каталог инструментов, предоставляемых Anthropic, и справочник по необязательным свойствам определения инструментов.
  </Card>
</CardGroup>
