---
title: Ferramenta de busca na web (web fetch)
url: https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/web-fetch-tool
description: Busque e leia conteúdo de URLs específicas para ampliar o contexto do Claude com conteúdo da web em tempo real.
---

<Note>
  Para saber como a "zero data retention" (retenção zero de dados), ou ZDR, se aplica a este recurso, consulte [API e retenção de dados](https://platform.claude.com/docs/pt-BR/manage-claude/api-and-data-retention).
</Note>

A ferramenta "web fetch" (busca de conteúdo na web) permite que o Claude recupere o conteúdo completo de páginas da web e documentos PDF especificados.

A versão mais recente da ferramenta de web fetch (`web_fetch_20260318`) oferece suporte a **"dynamic filtering" (filtragem dinâmica)**: Claude pode escrever e executar código para filtrar o conteúdo obtido antes que ele chegue à "context window" (janela de contexto), mantendo apenas as informações relevantes e descartando o restante. Isso reduz o consumo de tokens e mantém a qualidade das respostas. A filtragem dinâmica está disponível com Claude 4.6 e modelos posteriores e com o [Claude Mythos Preview](https://anthropic.com/glasswing). A `web_fetch_20260318` também adiciona o controle de ["response inclusion" (inclusão de resposta)](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/web-fetch-tool#response-inclusion) para fluxos de trabalho agênticos. As versões anteriores (`web_fetch_20260309` para filtragem dinâmica e ["cache bypass" (ignorar o cache)](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/web-fetch-tool#cache-bypass), `web_fetch_20260209` apenas para filtragem dinâmica, `web_fetch_20250910` para busca básica) continuam disponíveis.

A web fetch (com e sem filtragem dinâmica) está disponível na Claude API, na [Claude Platform on AWS](https://platform.claude.com/docs/pt-BR/build-with-claude/claude-platform-on-aws) e no [Microsoft Foundry](https://platform.claude.com/docs/pt-BR/build-with-claude/claude-in-microsoft-foundry). No Microsoft Foundry, as implantações [hospedadas no Azure](https://platform.claude.com/docs/pt-BR/build-with-claude/claude-in-microsoft-foundry#additional-features-not-supported-when-hosted-on-azure) oferecem suporte apenas à ferramenta web fetch básica (`web_fetch_20250910`, sem filtragem dinâmica). As implantações hospedadas na Anthropic oferecem suporte a todas as versões. A web fetch não está disponível atualmente no Amazon Bedrock nem no Google Cloud.

<Note>
  Para o [Claude Mythos Preview](https://anthropic.com/glasswing), a web fetch está disponível na Claude API e no Microsoft Foundry. Ela não está disponível atualmente para o Mythos Preview no Amazon Bedrock nem no Google Cloud.
</Note>

<Note>
  Use o [formulário de feedback](https://forms.gle/NhWcgmkcvPCMmPE86) para enviar feedback sobre a qualidade das respostas do modelo, sobre a própria API ou sobre a qualidade da documentação.
</Note>

Para a elegibilidade de Zero Data Retention e a solução alternativa com `allowed_callers`, consulte [Ferramentas de servidor](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/server-tools#zdr-and-allowed-callers).

<Warning>
  Habilitar a ferramenta web fetch em ambientes onde o Claude processa entradas não confiáveis junto com dados sensíveis apresenta riscos de exfiltração de dados. Use esta ferramenta apenas em ambientes confiáveis ou ao lidar com dados não sensíveis.

  Para minimizar os riscos de exfiltração, o Claude não pode buscar URLs que aparecem apenas em sua própria saída. O Claude só pode buscar URLs que já apareceram anteriormente na conversa: URLs em mensagens do usuário, URLs em resultados de ferramentas do lado do cliente (mesmo quando um resultado repete texto gerado pelo Claude) e URLs de resultados anteriores de web search ou web fetch (consulte [Validação de URL](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/web-fetch-tool#url-validation)). O Claude também não pode buscar uma URL que pareça conter uma credencial, como uma chave de API ou uma senha, a menos que essa credencial apareça no prompt do sistema ou no texto de uma mensagem do usuário.

  No entanto, ainda existe um risco residual que você deve considerar cuidadosamente ao usar esta ferramenta.

  Se a exfiltração de dados for uma preocupação, considere:

  * Desabilitar completamente a ferramenta web fetch
  * Usar o parâmetro `max_uses` para limitar o número de requisições
  * Usar o parâmetro `allowed_domains` para restringir a domínios conhecidamente seguros
</Warning>

Para o suporte de modelos, consulte a [Referência de ferramentas](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/tool-reference).

## Como a web fetch funciona

A web fetch é uma ["server tool" (ferramenta de servidor)](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/server-tools): a API busca o conteúdo durante a requisição e insere os resultados na conversa. Você não executa nada nem retorna um `tool_result`. A exceção é quando o Claude chama a web fetch e uma das suas ferramentas de cliente no mesmo grupo de chamadas de ferramentas paralelas: a API retorna a resposta com `stop_reason: "tool_use"` antes que essa busca tenha sido executada e, em seguida, executa a busca quando você envia de volta os blocos `tool_result` do cliente. Consulte [Misturando ferramentas de servidor e ferramentas de cliente em um turno](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/server-tools#mixing-server-tools-and-client-tools-in-one-turn).

Quando você adiciona a ferramenta web fetch à sua requisição de API:

1. O Claude determina quando buscar conteúdo com base no prompt e nas URLs disponíveis.
2. A API recupera o conteúdo de texto completo da URL especificada.
3. Para PDFs, a API retorna o conteúdo como dados codificados em base64 e o processa como um documento PDF anexado diretamente.
4. O Claude analisa o conteúdo buscado e fornece uma resposta com citações opcionais.

<Note>
  A ferramenta web fetch atualmente não oferece suporte a sites renderizados dinamicamente com JavaScript. Para páginas que precisam de um navegador real (renderização de JavaScript, cliques ou preenchimento de formulários), considere a [ferramenta de uso de navegador](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/browser-use-tool), uma ferramenta de cliente na qual sua aplicação controla o navegador e retorna o texto da página ou capturas de tela ao Claude como resultados de ferramenta.
</Note>

### Quando o Claude busca

O Claude busca quando a requisição aponta para uma página ou documento específico:

* Uma URL é fornecida na conversa (ou em um resultado de ferramenta anterior)
* O usuário nomeia um recurso específico (um artigo, README, página de preços ou seção de documentação em particular) sem uma URL, e a [ferramenta web search](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/web-search-tool) também está habilitada para que o Claude possa localizá-lo primeiro (consulte [Busca e fetch combinados](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/web-fetch-tool#combined-search-and-fetch))

O Claude **não** busca para perguntas de conhecimento geral ou abertas que não fazem referência a uma página específica. "Resuma este artigo: `<url>`" aciona uma busca. "Quais são as melhores práticas para design de APIs REST?" é respondida diretamente.

### Filtragem dinâmica

Buscar páginas da web e PDFs completos pode consumir tokens rapidamente, especialmente quando apenas informações específicas são necessárias de documentos grandes. Com `web_fetch_20260209` ou posterior, o Claude pode escrever e executar código para filtrar o conteúdo buscado antes de carregá-lo no contexto.

Essa filtragem dinâmica é particularmente útil para:

* Extrair seções específicas de documentos longos
* Processar dados estruturados de páginas da web
* Filtrar informações relevantes de PDFs
* Reduzir custos de tokens ao trabalhar com documentos grandes

<Note>
  A filtragem dinâmica é executada na [ferramenta de execução de código](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/code-execution-tool), que a API habilita automaticamente para a requisição. Você não precisa adicionar a ferramenta de execução de código ao array `tools`.
</Note>

Para habilitar a filtragem dinâmica, use `web_fetch_20260209` ou qualquer versão posterior. Os exemplos a seguir usam `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>

## Como usar a web fetch

Forneça a ferramenta web fetch na sua requisição de 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>

## Definição da ferramenta

A ferramenta web fetch oferece suporte aos seguintes parâmetros:

```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
}
```

Versões posteriores da ferramenta adicionam mais dois parâmetros opcionais: `use_cache` requer `web_fetch_20260309` ou posterior (consulte [Bypass de cache](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/web-fetch-tool#cache-bypass)), e `response_inclusion` requer `web_fetch_20260318` ou posterior (consulte [Inclusão de resposta](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/web-fetch-tool#response-inclusion)).

### Máximo de usos

O parâmetro `max_uses` limita o número de buscas na web realizadas. Buscas com falha contam para o limite. Se o Claude tentar mais buscas do que o permitido, o `web_fetch_tool_result` será um erro com o código de erro `max_uses_exceeded`. Atualmente não há limite padrão.

### Filtragem de domínios

Para filtragem de domínios com `allowed_domains` e `blocked_domains`, consulte [Ferramentas de servidor](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/server-tools#domain-filtering).

No [Claude Managed Agents](https://platform.claude.com/docs/pt-BR/managed-agents/overview), defina esses campos na entrada `web_fetch` do conjunto de ferramentas do agente, onde cada domínio listado deve ser um nome de host simples sem caminho; consulte [Restringir domínios de pesquisa na web e busca na web](https://platform.claude.com/docs/pt-BR/managed-agents/tools-web-restrictions).

### Limites de conteúdo

O parâmetro `max_content_tokens` limita a quantidade de conteúdo incluída no contexto. Se o conteúdo buscado exceder esse limite, a ferramenta o trunca. Isso ajuda a controlar o uso de tokens ao buscar documentos grandes. O limite se aplica ao conteúdo de texto, não a conteúdo binário como PDFs.

<Note>
  O limite do parâmetro `max_content_tokens` é aproximado. O número real de tokens de entrada usados pode variar ligeiramente.
</Note>

No Claude Managed Agents, a entrada `web_fetch` do conjunto de ferramentas do agente também aceita `max_content_tokens`; consulte as [configurações de ferramentas web](https://platform.claude.com/docs/pt-BR/managed-agents/tools-web-restrictions#settings).

### Bypass de cache

<Note>
  Requer `web_fetch_20260309` ou posterior (incluindo `web_fetch_20260318`).
</Note>

O parâmetro `use_cache` controla se conteúdo em cache pode ser retornado. Defina `"use_cache": false` para ignorar o cache e buscar conteúdo atualizado. O padrão é `true`. Desabilite o cache apenas quando o usuário solicitar explicitamente conteúdo atualizado ou ao buscar fontes que mudam rapidamente, pois ignorar o cache aumenta a "latency" (latência).

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

### Inclusão de resposta

<Note>
  Requer `web_fetch_20260318` ou posterior.
</Note>

O parâmetro `response_inclusion` controla como os blocos de resultado de fetch aparecem na resposta da API quando o resultado foi consumido por uma chamada de [execução de código](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/code-execution-tool) concluída no mesmo turno. Defina `"response_inclusion": "excluded"` para remover completamente da resposta esses pares aninhados de `server_tool_use` e blocos de resultado, reduzindo os custos de tokens de saída para fluxos de trabalho agênticos que não precisam ecoar o conteúdo bruto da página de volta ao cliente. O padrão é `"full"`. Resultados de chamadas diretas, ou de chamadas de execução de código que pausaram antes de concluir, são sempre retornados integralmente para que possam ser enviados de volta no próximo turno.

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

### Citações

Diferentemente da web search, onde as citações estão sempre habilitadas, as citações são opcionais para a web fetch e desabilitadas por padrão. Defina `"citations": {"enabled": true}` para permitir que o Claude cite passagens específicas dos documentos buscados.

<Note>
  Ao exibir as saídas da API diretamente para os usuários finais, inclua citações da fonte original. Se você estiver fazendo modificações nas saídas da API, inclusive reprocessando-as ou combinando-as com seu próprio material antes de exibi-las aos usuários finais, exiba as citações conforme apropriado, com base em consulta à sua equipe jurídica.
</Note>

## Resposta

Aqui está um exemplo de estrutura de resposta:

```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"
}
```

### Resultados de fetch

Os resultados de fetch incluem:

* `url`: A URL que foi buscada
* `content`: Um bloco de documento contendo o conteúdo buscado
* `retrieved_at`: Timestamp de quando o conteúdo foi recuperado

<Note>
  A ferramenta web fetch armazena resultados em cache para melhorar o desempenho e reduzir requisições redundantes. O conteúdo retornado pode não refletir sempre a versão mais recente disponível na URL. O comportamento do cache é gerenciado automaticamente e pode mudar ao longo do tempo para otimizar diferentes tipos de conteúdo e padrões de uso. Para buscar conteúdo atualizado, defina `"use_cache": false` (consulte [Bypass de cache](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/web-fetch-tool#cache-bypass)).
</Note>

Para documentos PDF, o conteúdo é retornado como dados codificados em 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"
  }
}
```

### Erros

Quando a ferramenta web fetch encontra um erro, a Claude API retorna uma resposta 200 (sucesso) com o erro representado no corpo da resposta. O Claude vê o resultado de erro e continua o turno. Por exemplo:

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

Estes são os códigos de erro possíveis:

* `invalid_tool_input`: Entrada de ferramenta inválida, como uma URL malformada ou um esquema que não seja HTTP(S)
* `url_too_long`: A URL excede o comprimento máximo (250 caracteres)
* `url_not_allowed`: URL bloqueada por regras de filtragem de domínios (incluindo as configurações da sua organização) ou por restrições do lado da Anthropic, como endereços privados, `robots.txt` e URLs que parecem conter uma credencial que você não forneceu
* `url_not_in_prior_context`: A URL não apareceu anteriormente na conversa (consulte [Validação de URL](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/web-fetch-tool#url-validation))
* `url_not_accessible`: Falha ao buscar o conteúdo (erro HTTP)
* `too_many_requests`: Limite de taxa excedido
* `unsupported_content_type`: Tipo de conteúdo não suportado (apenas texto, HTML e PDF)
* `max_uses_exceeded`: Máximo de usos da ferramenta web fetch excedido
* `unavailable`: Ocorreu um erro interno

## Validação de URL

Por motivos de segurança, a ferramenta web fetch só pode buscar URLs que tenham aparecido anteriormente no contexto da conversa. Isso inclui:

* URLs em mensagens do usuário
* URLs em resultados de ferramentas do lado do cliente
* URLs de resultados anteriores de web search ou web fetch

A ferramenta não pode buscar URLs que aparecem apenas na própria saída de Claude ou apenas no "system prompt" (prompt do sistema). Para tornar uma URL do prompt do sistema buscável, inclua-a também em uma mensagem do usuário. Resultados de outras ferramentas do lado do servidor, como [execução de código](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/code-execution-tool), o [conector MCP](https://platform.claude.com/docs/pt-BR/agents-and-tools/mcp-connector) ou a [pesquisa de ferramentas](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/tool-search-tool), também não são uma fonte permitida. Resultados de ferramentas do lado do cliente são uma fonte permitida mesmo quando repetem texto produzido por Claude (por exemplo, um comando que imprime sua entrada ou uma mensagem de erro que a cita).

A ferramenta também recusa uma URL que pareça conter uma credencial, como uma chave de API ou uma senha, a menos que essa credencial apareça no prompt do sistema ou no texto de uma mensagem do usuário. Uma credencial que aparece apenas em um resultado de ferramenta não conta. O resultado é um erro `url_not_allowed`. Para buscar uma URL desse tipo, inclua-a em uma mensagem do usuário.

## Busca e fetch combinados

Quando as ferramentas web search e web fetch estão ambas habilitadas, e o usuário nomeia uma página ou documento específico sem fornecer uma URL (por exemplo, "leia o README do repositório anthropics/anthropic-sdk-python"), o Claude usa a web search para localizá-lo e, em seguida, busca o resultado. O exemplo a seguir solicita uma pesquisa e uma análise em uma única requisição:

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

Neste fluxo de trabalho, o Claude:

1. Usa a web search para encontrar artigos relevantes.
2. Seleciona os resultados mais promissores.
3. Usa a web fetch para recuperar o conteúdo completo.
4. Fornece uma análise detalhada com citações.

## Cache de prompt

Para armazenar em cache definições de ferramentas entre turnos, consulte [Uso de ferramentas com cache de prompt](https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/tool-use-with-prompt-caching).

## Streaming

Com o streaming habilitado, os eventos de fetch fazem parte do stream, com uma pausa durante a recuperação do conteúdo:

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

## Requisições em lote

Você pode incluir a ferramenta web fetch na [Messages Batches API](https://platform.claude.com/docs/pt-BR/build-with-claude/batch-processing). As chamadas da ferramenta web fetch por meio da Messages Batches API têm o mesmo preço que as das requisições regulares da Messages API.

## Uso e preços

O uso do web fetch **não tem cobranças adicionais** além dos custos padrão de tokens:

```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
    }
  }
}
```

A ferramenta web fetch está disponível na Claude API **sem custo adicional**. Você paga apenas os custos padrão de tokens pelo conteúdo buscado que se torna parte do contexto da sua conversa.

Para se proteger contra a busca inadvertida de conteúdo grande que consumiria tokens em excesso, use o parâmetro `max_content_tokens` para definir limites apropriados com base no seu caso de uso e em considerações de orçamento.

Exemplo de uso de tokens para conteúdo típico:

* Página web média (10 kB): \~2.500 tokens
* Página de documentação grande (100 kB): \~25.000 tokens
* PDF de artigo de pesquisa (500 kB): \~125.000 tokens

## Próximos passos

<CardGroup>
  <Card href="https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/code-execution-tool" title="Ferramenta de execução de código" icon="code">
    Execute código Python e bash em um contêiner isolado para analisar dados, gerar arquivos e iterar em soluções.
  </Card>

  <Card href="https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/server-tools" title="Ferramentas de servidor" icon="cloud">
    Trabalhe com ferramentas executadas pela Anthropic: blocos server\_tool\_use, continuação com pause\_turn e filtragem de domínios.
  </Card>

  <Card href="https://platform.claude.com/docs/pt-BR/agents-and-tools/tool-use/tool-reference" title="Referência de ferramentas" icon="book">
    Diretório de ferramentas fornecidas pela Anthropic e referência para propriedades opcionais de definição de ferramentas.
  </Card>
</CardGroup>
