---
title: Herramienta de obtención web
url: https://platform.claude.com/docs/es/agents-and-tools/tool-use/web-fetch-tool
description: Obtén y lee contenido de URLs específicas para ampliar el contexto de Claude con contenido web en vivo.
---

<Note>
  Para saber cómo se aplica la "zero data retention" (retención cero de datos), o ZDR, a esta función, consulta [API y retención de datos](https://platform.claude.com/docs/es/manage-claude/api-and-data-retention).
</Note>

La herramienta de obtención web ("web fetch tool") permite a Claude recuperar el contenido completo de páginas web y documentos PDF especificados.

La versión más reciente de la herramienta de web fetch (`web_fetch_20260318`) admite **"dynamic filtering" (filtrado dinámico)**: Claude puede escribir y ejecutar código para filtrar el contenido obtenido antes de que llegue a la "context window" (ventana de contexto), conservando solo la información relevante y descartando el resto. Esto reduce el consumo de tokens sin afectar la calidad de las respuestas. El filtrado dinámico está disponible con Claude 4.6 y modelos posteriores, y con [Claude Mythos Preview](https://anthropic.com/glasswing). `web_fetch_20260318` también añade control de [inclusión en la respuesta](https://platform.claude.com/docs/es/agents-and-tools/tool-use/web-fetch-tool#response-inclusion) para flujos de trabajo agénticos. Las versiones anteriores (`web_fetch_20260309` para filtrado dinámico y [omisión de caché](https://platform.claude.com/docs/es/agents-and-tools/tool-use/web-fetch-tool#cache-bypass), `web_fetch_20260209` solo para filtrado dinámico, `web_fetch_20250910` para obtención básica) siguen disponibles.

La obtención web (con y sin filtrado dinámico) está disponible en la Claude API, [Claude Platform en AWS](https://platform.claude.com/docs/es/build-with-claude/claude-platform-on-aws) y [Microsoft Foundry](https://platform.claude.com/docs/es/build-with-claude/claude-in-microsoft-foundry). En Microsoft Foundry, las implementaciones [alojadas en Azure](https://platform.claude.com/docs/es/build-with-claude/claude-in-microsoft-foundry#additional-features-not-supported-when-hosted-on-azure) admiten solo la herramienta de obtención web básica (`web_fetch_20250910`, sin filtrado dinámico). Las implementaciones alojadas en Anthropic admiten todas las versiones. La obtención web no está disponible actualmente en Amazon Bedrock ni en Google Cloud.

<Note>
  Para [Claude Mythos Preview](https://anthropic.com/glasswing), la obtención web está disponible en la Claude API y Microsoft Foundry. Actualmente no está disponible para Mythos Preview en Amazon Bedrock ni en Google Cloud.
</Note>

<Note>
  Usa el [formulario de comentarios](https://forms.gle/NhWcgmkcvPCMmPE86) para enviar comentarios sobre la calidad de las respuestas del modelo, la API en sí o la calidad de la documentación.
</Note>

Para la elegibilidad de Zero Data Retention y la solución alternativa de `allowed_callers`, consulta [Herramientas de servidor](https://platform.claude.com/docs/es/agents-and-tools/tool-use/server-tools#zdr-and-allowed-callers).

<Warning>
  Habilitar la herramienta de obtención web en entornos donde Claude procesa entradas no confiables junto con datos sensibles plantea riesgos de exfiltración de datos. Usa esta herramienta únicamente en entornos confiables o cuando manejes datos no sensibles.

  Para minimizar los riesgos de exfiltración, Claude no puede obtener URLs que aparezcan únicamente en su propia salida. Claude solo puede obtener URLs que hayan aparecido previamente en la conversación: URLs en mensajes del usuario, URLs en resultados de herramientas del lado del cliente (incluso cuando un resultado repite texto que Claude generó) y URLs de resultados anteriores de búsqueda web u obtención web (consulta [Validación de URLs](https://platform.claude.com/docs/es/agents-and-tools/tool-use/web-fetch-tool#url-validation)). Claude tampoco puede obtener una URL que parezca contener una credencial, como una clave de API o una contraseña, a menos que esa credencial aparezca en la indicación del sistema o en el texto de un mensaje del usuario.

  Sin embargo, sigue existiendo un riesgo residual que debes considerar cuidadosamente al usar esta herramienta.

  Si la exfiltración de datos es una preocupación, considera:

  * Deshabilitar por completo la herramienta de obtención web
  * Usar el parámetro `max_uses` para limitar el número de solicitudes
  * Usar el parámetro `allowed_domains` para restringir a dominios seguros conocidos
</Warning>

Para la compatibilidad de modelos, consulta la [Referencia de herramientas](https://platform.claude.com/docs/es/agents-and-tools/tool-use/tool-reference).

## Cómo funciona la obtención web

La obtención web es una [herramienta de servidor](https://platform.claude.com/docs/es/agents-and-tools/tool-use/server-tools) ("server tool"): la API obtiene el contenido durante la solicitud e inserta los resultados en la conversación. No ejecutas nada ni devuelves un `tool_result`. La excepción es cuando Claude llama a la obtención web y a una de tus herramientas de cliente en el mismo grupo de llamadas a herramientas en paralelo: la API devuelve la respuesta con `stop_reason: "tool_use"` antes de que esa obtención se haya ejecutado, y luego ejecuta la obtención cuando envías de vuelta los bloques `tool_result` del cliente. Consulta [Combinar herramientas de servidor y herramientas de cliente en un mismo turno](https://platform.claude.com/docs/es/agents-and-tools/tool-use/server-tools#mixing-server-tools-and-client-tools-in-one-turn).

Cuando añades la herramienta de obtención web a tu solicitud de API:

1. Claude determina cuándo obtener contenido según el prompt y las URLs disponibles.
2. La API recupera el contenido de texto completo de la URL especificada.
3. Para PDFs, la API devuelve el contenido como datos codificados en base64 y lo procesa como un documento PDF adjuntado directamente.
4. Claude analiza el contenido obtenido y proporciona una respuesta con citas opcionales.

<Note>
  La herramienta de obtención web actualmente no admite sitios web renderizados dinámicamente con JavaScript. Para páginas que necesitan un navegador real (renderizado de JavaScript, hacer clic o rellenar formularios), considera la [herramienta de uso del navegador](https://platform.claude.com/docs/es/agents-and-tools/tool-use/browser-use-tool), una herramienta de cliente en la que tu aplicación controla el navegador y devuelve el texto de la página o capturas de pantalla a Claude como resultados de herramienta.
</Note>

### Cuándo obtiene Claude

Claude obtiene contenido cuando la solicitud apunta a una página o documento específico:

* Se proporciona una URL en la conversación (o en un resultado de herramienta previo)
* El usuario nombra un recurso específico (un artículo, README, página de precios o sección de documentación en particular) sin una URL, y la [herramienta de búsqueda web](https://platform.claude.com/docs/es/agents-and-tools/tool-use/web-search-tool) también está habilitada para que Claude pueda localizarlo primero (consulta [Búsqueda y obtención combinadas](https://platform.claude.com/docs/es/agents-and-tools/tool-use/web-fetch-tool#combined-search-and-fetch))

Claude **no** obtiene contenido para preguntas de conocimiento general o abiertas que no hacen referencia a una página específica. "Resume este artículo: `<url>`" desencadena una obtención. "¿Cuáles son las mejores prácticas para el diseño de APIs REST?" se responde directamente.

### Filtrado dinámico

Obtener páginas web y PDFs completos puede consumir tokens rápidamente, especialmente cuando solo se necesita información específica de documentos grandes. Con `web_fetch_20260209` o posterior, Claude puede escribir y ejecutar código para filtrar el contenido obtenido antes de cargarlo en el contexto.

Este filtrado dinámico es particularmente útil para:

* Extraer secciones específicas de documentos largos
* Procesar datos estructurados de páginas web
* Filtrar información relevante de PDFs
* Reducir los costos de tokens al trabajar con documentos grandes

<Note>
  El filtrado dinámico se ejecuta sobre la [herramienta de ejecución de código](https://platform.claude.com/docs/es/agents-and-tools/tool-use/code-execution-tool), que la API habilita automáticamente para la solicitud. No necesitas añadir la herramienta de ejecución de código al arreglo `tools`.
</Note>

Para habilitar el filtrado dinámico, usa `web_fetch_20260209` o cualquier versión posterior. Los siguientes ejemplos usan `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>

## Cómo usar la obtención web

Proporciona la herramienta de obtención web en tu solicitud 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>

## Definición de la herramienta

La herramienta de obtención web admite los siguientes 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
}
```

Las versiones posteriores de la herramienta añaden dos parámetros opcionales más: `use_cache` requiere `web_fetch_20260309` o posterior (consulta [Omisión de caché](https://platform.claude.com/docs/es/agents-and-tools/tool-use/web-fetch-tool#cache-bypass)), y `response_inclusion` requiere `web_fetch_20260318` o posterior (consulta [Inclusión de respuesta](https://platform.claude.com/docs/es/agents-and-tools/tool-use/web-fetch-tool#response-inclusion)).

### Usos máximos

El parámetro `max_uses` limita el número de obtenciones web realizadas. Las obtenciones fallidas cuentan para el límite. Si Claude intenta más obtenciones de las permitidas, el `web_fetch_tool_result` es un error con el código de error `max_uses_exceeded`. Actualmente no hay un límite predeterminado.

### Filtrado de dominios

Para el filtrado de dominios con `allowed_domains` y `blocked_domains`, consulta [Herramientas de servidor](https://platform.claude.com/docs/es/agents-and-tools/tool-use/server-tools#domain-filtering).

En [Claude Managed Agents](https://platform.claude.com/docs/es/managed-agents/overview), establece estos campos en la entrada `web_fetch` del conjunto de herramientas del agente, donde cada dominio listado debe ser un nombre de host simple sin ruta; consulta [Restringir los dominios de búsqueda web y obtención web](https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions).

### Límites de contenido

El parámetro `max_content_tokens` limita la cantidad de contenido incluido en el contexto. Si el contenido obtenido supera este límite, la herramienta lo trunca. Esto ayuda a controlar el uso de tokens al obtener documentos grandes. El límite se aplica al contenido de texto, no al contenido binario como los PDFs.

<Note>
  El límite del parámetro `max_content_tokens` es aproximado. El número real de tokens de entrada utilizados puede variar ligeramente.
</Note>

En Claude Managed Agents, la entrada `web_fetch` del conjunto de herramientas del agente también acepta `max_content_tokens`; consulta la [configuración de las herramientas web](https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions#settings).

### Omisión de caché

<Note>
  Requiere `web_fetch_20260309` o posterior (incluido `web_fetch_20260318`).
</Note>

El parámetro `use_cache` controla si se puede devolver contenido almacenado en caché. Establece `"use_cache": false` para omitir la caché y obtener contenido actualizado. El valor predeterminado es `true`. Deshabilita la caché únicamente cuando el usuario solicite explícitamente contenido actualizado o cuando obtengas fuentes que cambian rápidamente, ya que omitir la caché aumenta la "latency" (latencia).

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

### Inclusión de respuesta

<Note>
  Requiere `web_fetch_20260318` o posterior.
</Note>

El parámetro `response_inclusion` controla cómo aparecen los bloques de resultado de obtención en la respuesta de la API cuando el resultado fue consumido por una llamada de [ejecución de código](https://platform.claude.com/docs/es/agents-and-tools/tool-use/code-execution-tool) completada en el mismo turno. Establece `"response_inclusion": "excluded"` para eliminar por completo de la respuesta esos pares anidados de bloques `server_tool_use` y de resultado, reduciendo los costos de tokens de salida para flujos de trabajo agénticos que no necesitan devolver el contenido sin procesar de la página al cliente. El valor predeterminado es `"full"`. Los resultados de llamadas directas, o de llamadas de ejecución de código que se pausaron antes de completarse, siempre se devuelven completos para que puedan enviarse de vuelta en el siguiente turno.

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

### Citas

A diferencia de la búsqueda web, donde las citas siempre están habilitadas, las citas son opcionales para la obtención web y están deshabilitadas de forma predeterminada. Establece `"citations": {"enabled": true}` para permitir que Claude cite pasajes específicos de los documentos obtenidos.

<Note>
  Al mostrar las salidas de la API directamente a los usuarios finales, incluye citas a la fuente original. Si realizas modificaciones a las salidas de la API, incluso reprocesándolas o combinándolas con tu propio material antes de mostrarlas a los usuarios finales, muestra las citas según corresponda tras consultar con tu equipo legal.
</Note>

## Respuesta

Este es un ejemplo de la estructura de respuesta:

```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 obtención

Los resultados de obtención incluyen:

* `url`: La URL que se obtuvo
* `content`: Un bloque de documento que contiene el contenido obtenido
* `retrieved_at`: Marca de tiempo de cuándo se recuperó el contenido

<Note>
  La herramienta de obtención web almacena los resultados en caché para mejorar el rendimiento y reducir solicitudes redundantes. El contenido devuelto puede no reflejar siempre la versión más reciente disponible en la URL. El comportamiento de la caché se gestiona automáticamente y puede cambiar con el tiempo para optimizarse según distintos tipos de contenido y patrones de uso. Para obtener contenido actualizado, establece `"use_cache": false` (consulta [Omisión de caché](https://platform.claude.com/docs/es/agents-and-tools/tool-use/web-fetch-tool#cache-bypass)).
</Note>

Para documentos PDF, el contenido se devuelve como datos codificados en 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"
  }
}
```

### Errores

Cuando la herramienta de obtención web encuentra un error, la Claude API devuelve una respuesta 200 (éxito) con el error representado en el cuerpo de la respuesta. Claude ve el resultado de error y continúa el turno. Por ejemplo:

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

Estos son los posibles códigos de error:

* `invalid_tool_input`: Entrada de herramienta no válida, como una URL mal formada o un esquema que no es HTTP(S)
* `url_too_long`: La URL supera la longitud máxima (250 caracteres)
* `url_not_allowed`: URL bloqueada por las reglas de filtrado de dominios (incluida la configuración de tu organización) o por restricciones del lado de Anthropic, como direcciones privadas, `robots.txt` y URLs que parecen contener una credencial que no proporcionaste
* `url_not_in_prior_context`: La URL no apareció anteriormente en la conversación (consulta [Validación de URLs](https://platform.claude.com/docs/es/agents-and-tools/tool-use/web-fetch-tool#url-validation))
* `url_not_accessible`: No se pudo obtener el contenido (error HTTP)
* `too_many_requests`: Se superó el "rate limit" (límite de velocidad)
* `unsupported_content_type`: Tipo de contenido no admitido (solo texto, HTML y PDF)
* `max_uses_exceeded`: Se superó el número máximo de usos de la herramienta de obtención web
* `unavailable`: Ocurrió un error interno

## Validación de URLs

Por razones de seguridad, la herramienta de obtención web solo puede obtener URLs que hayan aparecido previamente en el contexto de la conversación. Esto incluye:

* URLs en mensajes del usuario
* URLs en resultados de herramientas del lado del cliente
* URLs de resultados previos de búsqueda web u obtención web

La herramienta no puede obtener URLs que aparezcan únicamente en la propia salida de Claude o únicamente en la indicación del sistema. Para que una URL de la indicación del sistema se pueda obtener, inclúyela también en un mensaje del usuario. Los resultados de otras herramientas del lado del servidor, como la [ejecución de código](https://platform.claude.com/docs/es/agents-and-tools/tool-use/code-execution-tool), el [conector MCP](https://platform.claude.com/docs/es/agents-and-tools/mcp-connector) o la [búsqueda de herramientas](https://platform.claude.com/docs/es/agents-and-tools/tool-use/tool-search-tool), tampoco son una fuente permitida. Los resultados de herramientas del lado del cliente son una fuente permitida incluso cuando repiten texto que Claude produjo (por ejemplo, un comando que imprime su entrada o un mensaje de error que la cita).

La herramienta también rechaza una URL que parezca contener una credencial, como una clave de API o una contraseña, a menos que esa credencial aparezca en la indicación del sistema o en el texto de un mensaje del usuario. Una credencial que aparece solo en un resultado de herramienta no cuenta. El resultado es un error `url_not_allowed`. Para obtener una URL de este tipo, inclúyela en un mensaje del usuario.

## Búsqueda y obtención combinadas

Cuando tanto la herramienta de búsqueda web como la de obtención web están habilitadas, y el usuario nombra una página o documento específico sin proporcionar una URL (por ejemplo, "lee el README del repositorio anthropics/anthropic-sdk-python"), Claude usa la búsqueda web para localizarlo y luego obtiene el resultado. El siguiente ejemplo solicita una búsqueda y un análisis en una sola solicitud:

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

En este flujo de trabajo, Claude:

1. Usa la búsqueda web para encontrar artículos relevantes.
2. Selecciona los resultados más prometedores.
3. Usa la obtención web para recuperar el contenido completo.
4. Proporciona un análisis detallado con citas.

## Almacenamiento en caché de prompts

Para almacenar en caché las definiciones de herramientas entre turnos, consulta [Uso de herramientas con almacenamiento en caché de prompts](https://platform.claude.com/docs/es/agents-and-tools/tool-use/tool-use-with-prompt-caching).

## Streaming

Con el streaming habilitado, los eventos de obtención forman parte del flujo, con una pausa durante la recuperación del contenido:

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

## Solicitudes por lotes

Puedes incluir la herramienta de obtención web en la [API de Messages Batches](https://platform.claude.com/docs/es/build-with-claude/batch-processing). Las llamadas a la herramienta de obtención web a través de la API de Messages Batches tienen el mismo precio que las de las solicitudes normales de la Messages API.

## Uso y precios

El uso de web fetch **no tiene cargos adicionales** más allá de los costos estándar 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
    }
  }
}
```

La herramienta web fetch está disponible en la Claude API **sin costo adicional**. Solo pagas los costos estándar de tokens por el contenido obtenido que pasa a formar parte del contexto de tu conversación.

Para protegerte contra la obtención inadvertida de contenido grande que consumiría tokens en exceso, usa el parámetro `max_content_tokens` para establecer límites apropiados según tu caso de uso y consideraciones de presupuesto.

Ejemplo de uso de tokens para contenido típico:

* Página web promedio (10 kB): \~2,500 tokens
* Página de documentación grande (100 kB): \~25,000 tokens
* PDF de artículo de investigación (500 kB): \~125,000 tokens

## Próximos pasos

<CardGroup>
  <Card href="https://platform.claude.com/docs/es/agents-and-tools/tool-use/code-execution-tool" title="Herramienta de ejecución de código" icon="code">
    Ejecuta código Python y bash en un contenedor aislado para analizar datos, generar archivos e iterar sobre soluciones.
  </Card>

  <Card href="https://platform.claude.com/docs/es/agents-and-tools/tool-use/server-tools" title="Herramientas de servidor" icon="cloud">
    Trabaja con herramientas ejecutadas por Anthropic: bloques server\_tool\_use, continuación con pause\_turn y filtrado de dominios.
  </Card>

  <Card href="https://platform.claude.com/docs/es/agents-and-tools/tool-use/tool-reference" title="Referencia de herramientas" icon="book">
    Directorio de herramientas proporcionadas por Anthropic y referencia de las propiedades opcionales de definición de herramientas.
  </Card>
</CardGroup>
