---
title: Outil de récupération web
url: https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-fetch-tool
description: Récupérez et lisez le contenu d'URL spécifiques pour enrichir le contexte de Claude avec du contenu web en direct.
---

<Note>
  Pour savoir comment la « zero data retention » (rétention zéro des données), ou ZDR, s'applique à cette fonctionnalité, consultez [API et rétention des données](https://platform.claude.com/docs/fr/manage-claude/api-and-data-retention).
</Note>

L'outil de récupération web permet à Claude de récupérer le contenu complet de pages web et de documents PDF spécifiés.

La dernière version de l'outil de récupération web (`web_fetch_20260318`) prend en charge le **« dynamic filtering » (filtrage dynamique)** : Claude peut écrire et exécuter du code pour filtrer le contenu récupéré avant qu'il n'atteigne la « context window » (fenêtre de contexte), en ne conservant que les informations pertinentes et en écartant le reste. Cela réduit la consommation de tokens tout en maintenant la qualité des réponses. Le filtrage dynamique est disponible avec Claude 4.6 et les modèles ultérieurs, ainsi qu'avec [Claude Mythos Preview](https://anthropic.com/glasswing). `web_fetch_20260318` ajoute également le contrôle de l'[inclusion dans la réponse](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-fetch-tool#response-inclusion) pour les flux de travail agentiques. Les versions précédentes (`web_fetch_20260309` pour le filtrage dynamique et le [contournement du cache](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-fetch-tool#cache-bypass), `web_fetch_20260209` pour le filtrage dynamique uniquement, `web_fetch_20250910` pour la récupération de base) restent disponibles.

La récupération web (avec et sans filtrage dynamique) est disponible sur l'API Claude, [Claude Platform on AWS](https://platform.claude.com/docs/fr/build-with-claude/claude-platform-on-aws) et [Microsoft Foundry](https://platform.claude.com/docs/fr/build-with-claude/claude-in-microsoft-foundry). Sur Microsoft Foundry, les déploiements [hébergés sur Azure](https://platform.claude.com/docs/fr/build-with-claude/claude-in-microsoft-foundry#additional-features-not-supported-when-hosted-on-azure) ne prennent en charge que l'outil de récupération web de base (`web_fetch_20250910`, sans filtrage dynamique). Les déploiements hébergés par Anthropic prennent en charge toutes les versions. La récupération web n'est actuellement pas disponible sur Amazon Bedrock ni sur Google Cloud.

<Note>
  Pour [Claude Mythos Preview](https://anthropic.com/glasswing), la récupération web est disponible sur l'API Claude et sur Microsoft Foundry. Elle n'est actuellement pas disponible pour Mythos Preview sur Amazon Bedrock ni sur Google Cloud.
</Note>

<Note>
  Utilisez le [formulaire de commentaires](https://forms.gle/NhWcgmkcvPCMmPE86) pour donner votre avis sur la qualité des réponses du modèle, sur l'API elle-même ou sur la qualité de la documentation.
</Note>

Pour l'éligibilité à la conservation zéro des données (Zero Data Retention) et la solution de contournement `allowed_callers`, consultez [Outils serveur](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/server-tools#zdr-and-allowed-callers).

<Warning>
  Activer l'outil de récupération web dans des environnements où Claude traite des entrées non fiables en même temps que des données sensibles présente des risques d'exfiltration de données. N'utilisez cet outil que dans des environnements de confiance ou lorsque vous traitez des données non sensibles.

  Pour minimiser les risques d'exfiltration, Claude ne peut pas récupérer des URL qui apparaissent uniquement dans sa propre sortie. Claude ne peut récupérer que des URL qui sont déjà apparues dans la conversation : les URL dans les messages de l'utilisateur, les URL dans les résultats d'outils côté client (même lorsqu'un résultat reprend du texte généré par Claude) et les URL provenant de résultats précédents de recherche web ou de récupération web (consultez [Validation des URL](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-fetch-tool#url-validation)). Claude ne peut pas non plus récupérer une URL qui semble contenir un identifiant, comme une « API key » (clé API) ou un mot de passe, sauf si cet identifiant apparaît dans le « system prompt » (invite système) ou dans le texte d'un message de l'utilisateur.

  Cependant, il subsiste un risque résiduel que vous devez examiner attentivement lorsque vous utilisez cet outil.

  Si l'exfiltration de données est une préoccupation, envisagez de :

  * Désactiver entièrement l'outil de récupération web
  * Utiliser le paramètre `max_uses` pour limiter le nombre de requêtes
  * Utiliser le paramètre `allowed_domains` pour restreindre l'accès à des domaines connus comme sûrs
</Warning>

Pour la prise en charge des modèles, consultez la [Référence des outils](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/tool-reference).

## Fonctionnement de la récupération web

La récupération web est un [outil serveur](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/server-tools) : l'API récupère le contenu pendant la requête et insère les résultats dans la conversation. Vous n'exécutez rien et ne renvoyez pas de `tool_result`. L'exception se produit lorsque Claude appelle la récupération web et l'un de vos outils client dans le même groupe d'appels d'outils parallèles : l'API renvoie la réponse avec `stop_reason: "tool_use"` avant que cette récupération n'ait été exécutée, puis exécute la récupération lorsque vous renvoyez les blocs `tool_result` du client. Consultez [Combiner des outils serveur et des outils client dans un même tour](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/server-tools#mixing-server-tools-and-client-tools-in-one-turn).

Lorsque vous ajoutez l'outil de récupération web à votre requête API :

1. Claude détermine quand récupérer du contenu en fonction du prompt et des URL disponibles.
2. L'API récupère le contenu textuel complet de l'URL spécifiée.
3. Pour les PDF, l'API renvoie le contenu sous forme de données encodées en base64 et le traite comme un document PDF joint directement.
4. Claude analyse le contenu récupéré et fournit une réponse avec des citations facultatives.

<Note>
  L'outil de récupération web ne prend actuellement pas en charge les sites web rendus dynamiquement avec JavaScript. Pour les pages qui nécessitent un véritable navigateur (rendu JavaScript, clics ou remplissage de formulaires), envisagez l'[outil d'utilisation du navigateur](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/browser-use-tool), un outil client dans lequel votre application pilote le navigateur et renvoie le texte de la page ou des captures d'écran à Claude sous forme de résultats d'outils.
</Note>

### Quand Claude effectue une récupération

Claude effectue une récupération lorsque la requête désigne une page ou un document spécifique :

* Une URL est fournie dans la conversation (ou dans un résultat d'outil précédent)
* L'utilisateur nomme une ressource spécifique (un article particulier, un README, une page de tarifs ou une section de documentation) sans URL, et l'[outil de recherche web](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-search-tool) est également activé afin que Claude puisse d'abord la localiser (consultez [Recherche et récupération combinées](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-fetch-tool#combined-search-and-fetch))

Claude n'effectue **pas** de récupération pour les questions de culture générale ou ouvertes qui ne font pas référence à une page spécifique. « Résume cet article : `<url>` » déclenche une récupération. « Quelles sont les bonnes pratiques de conception d'API REST ? » reçoit une réponse directe.

### Filtrage dynamique

La récupération de pages web et de PDF complets peut rapidement consommer des tokens, en particulier lorsque seules des informations spécifiques sont nécessaires dans des documents volumineux. Avec `web_fetch_20260209` ou une version ultérieure, Claude peut écrire et exécuter du code pour filtrer le contenu récupéré avant de le charger dans le contexte.

Ce filtrage dynamique est particulièrement utile pour :

* Extraire des sections spécifiques de longs documents
* Traiter des données structurées provenant de pages web
* Filtrer les informations pertinentes dans des PDF
* Réduire les coûts en tokens lors du travail avec des documents volumineux

<Note>
  Le filtrage dynamique s'exécute sur l'[outil d'exécution de code](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/code-execution-tool), que l'API active automatiquement pour la requête. Vous n'avez pas besoin d'ajouter l'outil d'exécution de code au tableau `tools`.
</Note>

Pour activer le filtrage dynamique, utilisez `web_fetch_20260209` ou toute version ultérieure. Les exemples suivants utilisent `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>

## Comment utiliser la récupération web

Fournissez l'outil de récupération web dans votre requête 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>

## Définition de l'outil

L'outil de récupération web prend en charge les paramètres suivants :

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

Les versions ultérieures de l'outil ajoutent deux paramètres facultatifs supplémentaires : `use_cache` nécessite `web_fetch_20260309` ou une version ultérieure (consultez [Contournement du cache](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-fetch-tool#cache-bypass)), et `response_inclusion` nécessite `web_fetch_20260318` ou une version ultérieure (consultez [Inclusion dans la réponse](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-fetch-tool#response-inclusion)).

### Nombre maximal d'utilisations

Le paramètre `max_uses` limite le nombre de récupérations web effectuées. Les récupérations échouées sont comptabilisées dans la limite. Si Claude tente plus de récupérations que le nombre autorisé, le `web_fetch_tool_result` est une erreur avec le code d'erreur `max_uses_exceeded`. Il n'existe actuellement aucune limite par défaut.

### Filtrage des domaines

Pour le filtrage des domaines avec `allowed_domains` et `blocked_domains`, consultez [Outils serveur](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/server-tools#domain-filtering).

Sur [Claude Managed Agents](https://platform.claude.com/docs/fr/managed-agents/overview), définissez ces champs sur l'entrée `web_fetch` de l'ensemble d'outils de l'agent, où chaque domaine listé doit être un simple nom d'hôte sans chemin ; consultez [Restreindre les domaines de recherche web et de récupération web](https://platform.claude.com/docs/fr/managed-agents/tools-web-restrictions).

### Limites de contenu

Le paramètre `max_content_tokens` limite la quantité de contenu incluse dans le contexte. Si le contenu récupéré dépasse cette limite, l'outil le tronque. Cela permet de contrôler l'utilisation des tokens lors de la récupération de documents volumineux. La limite s'applique au contenu textuel, et non au contenu binaire tel que les PDF.

<Note>
  La limite du paramètre `max_content_tokens` est approximative. Le nombre réel de tokens d'entrée utilisés peut varier légèrement.
</Note>

Sur Claude Managed Agents, l'entrée `web_fetch` de l'ensemble d'outils de l'agent accepte également `max_content_tokens` ; consultez les [paramètres des outils web](https://platform.claude.com/docs/fr/managed-agents/tools-web-restrictions#settings).

### Contournement du cache

<Note>
  Nécessite `web_fetch_20260309` ou une version ultérieure (y compris `web_fetch_20260318`).
</Note>

Le paramètre `use_cache` détermine si du contenu mis en cache peut être renvoyé. Définissez `"use_cache": false` pour contourner le cache et récupérer du contenu à jour. La valeur par défaut est `true`. Ne désactivez la mise en cache que lorsque l'utilisateur demande explicitement du contenu à jour ou lors de la récupération de sources qui changent rapidement, car le contournement du cache augmente la « latency » (latence).

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

### Inclusion dans la réponse

<Note>
  Nécessite `web_fetch_20260318` ou une version ultérieure.
</Note>

Le paramètre `response_inclusion` détermine la manière dont les blocs de résultats de récupération apparaissent dans la réponse de l'API lorsque le résultat a été consommé par un appel d'[exécution de code](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/code-execution-tool) terminé au cours du même tour. Définissez `"response_inclusion": "excluded"` pour supprimer entièrement de la réponse ces paires imbriquées de blocs `server_tool_use` et de résultats, ce qui réduit les coûts en tokens de sortie pour les flux de travail agentiques qui n'ont pas besoin de renvoyer le contenu brut des pages au client. La valeur par défaut est `"full"`. Les résultats des appels directs, ou des appels d'exécution de code qui se sont mis en pause avant de se terminer, sont toujours renvoyés intégralement afin de pouvoir être renvoyés au tour suivant.

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

### Citations

Contrairement à la recherche web, où les citations sont toujours activées, les citations sont facultatives pour la récupération web et désactivées par défaut. Définissez `"citations": {"enabled": true}` pour permettre à Claude de citer des passages spécifiques des documents récupérés.

<Note>
  Lorsque vous affichez directement les sorties de l'API aux utilisateurs finaux, incluez les citations vers la source d'origine. Si vous modifiez les sorties de l'API, notamment en les retraitant ou en les combinant avec votre propre contenu avant de les afficher aux utilisateurs finaux, affichez les citations de manière appropriée après consultation de votre équipe juridique.
</Note>

## Réponse

Voici un exemple de structure de réponse :

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

### Résultats de récupération

Les résultats de récupération comprennent :

* `url` : l'URL qui a été récupérée
* `content` : un bloc de document contenant le contenu récupéré
* `retrieved_at` : l'horodatage de la récupération du contenu

<Note>
  L'outil de récupération web met les résultats en cache afin d'améliorer les performances et de réduire les requêtes redondantes. Le contenu renvoyé peut ne pas toujours refléter la dernière version disponible à l'URL. Le comportement du cache est géré automatiquement et peut évoluer au fil du temps afin de s'optimiser pour différents types de contenu et modèles d'utilisation. Pour récupérer du contenu à jour, définissez `"use_cache": false` (consultez [Contournement du cache](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-fetch-tool#cache-bypass)).
</Note>

Pour les documents PDF, le contenu est renvoyé sous forme de données encodées 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"
  }
}
```

### Erreurs

Lorsque l'outil de récupération web rencontre une erreur, l'API Claude renvoie une réponse 200 (succès) avec l'erreur représentée dans le corps de la réponse. Claude voit le résultat d'erreur et poursuit le tour. Par exemple :

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

Voici les codes d'erreur possibles :

* `invalid_tool_input` : entrée d'outil invalide, comme une URL mal formée ou un schéma autre que HTTP(S)
* `url_too_long` : l'URL dépasse la longueur maximale (250 caractères)
* `url_not_allowed` : URL bloquée par les règles de filtrage des domaines (y compris les paramètres de votre organisation) ou par des restrictions côté Anthropic, telles que les adresses privées, `robots.txt` et les URL qui semblent contenir un identifiant que vous n'avez pas fourni
* `url_not_in_prior_context` : l'URL n'est pas apparue précédemment dans la conversation (consultez [Validation des URL](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-fetch-tool#url-validation))
* `url_not_accessible` : échec de la récupération du contenu (erreur HTTP)
* `too_many_requests` : « rate limit » (limite de débit) dépassée
* `unsupported_content_type` : type de contenu non pris en charge (uniquement texte, HTML et PDF)
* `max_uses_exceeded` : nombre maximal d'utilisations de l'outil de récupération web dépassé
* `unavailable` : une erreur interne s'est produite

## Validation des URL

Pour des raisons de sécurité, l'outil de récupération web ne peut récupérer que des URL qui sont déjà apparues dans le contexte de la conversation. Cela inclut :

* Les URL dans les messages de l'utilisateur
* Les URL dans les résultats d'outils côté client
* Les URL provenant de résultats précédents de recherche web ou de récupération web

L'outil ne peut pas récupérer des URL qui apparaissent uniquement dans la propre sortie de Claude ou uniquement dans l'invite système. Pour rendre récupérable une URL provenant de l'invite système, incluez-la également dans un message de l'utilisateur. Les résultats d'autres outils côté serveur, tels que l'[exécution de code](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/code-execution-tool), le [connecteur MCP](https://platform.claude.com/docs/fr/agents-and-tools/mcp-connector) ou la [recherche d'outils](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/tool-search-tool), ne constituent pas non plus une source autorisée. Les résultats d'outils côté client constituent une source autorisée même lorsqu'ils reprennent du texte produit par Claude (par exemple, une commande qui affiche son entrée, ou un message d'erreur qui la cite).

L'outil refuse également une URL qui semble contenir un identifiant, comme une clé API ou un mot de passe, sauf si cet identifiant apparaît dans l'invite système ou dans le texte d'un message de l'utilisateur. Un identifiant qui apparaît uniquement dans un résultat d'outil n'est pas pris en compte. Le résultat est une erreur `url_not_allowed`. Pour récupérer une telle URL, incluez-la dans un message de l'utilisateur.

## Recherche et récupération combinées

Lorsque les outils de recherche web et de récupération web sont tous deux activés, et que l'utilisateur nomme une page ou un document spécifique sans fournir d'URL (par exemple, « lis le README du dépôt anthropics/anthropic-sdk-python »), Claude utilise la recherche web pour le localiser, puis récupère le résultat. L'exemple suivant demande une recherche et une analyse dans une seule requête :

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

Dans ce flux de travail, Claude :

1. Utilise la recherche web pour trouver des articles pertinents.
2. Sélectionne les résultats les plus prometteurs.
3. Utilise la récupération web pour obtenir le contenu complet.
4. Fournit une analyse détaillée avec des citations.

## Mise en cache des prompts

Pour mettre en cache les définitions d'outils d'un tour à l'autre, consultez [Utilisation d'outils avec la mise en cache des prompts](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/tool-use-with-prompt-caching).

## Streaming

Lorsque le streaming est activé, les événements de récupération font partie du flux, avec une pause pendant la récupération du contenu :

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

## Requêtes par lots

Vous pouvez inclure l'outil de récupération web dans l'[API Messages Batches](https://platform.claude.com/docs/fr/build-with-claude/batch-processing). Les appels à l'outil de récupération web effectués via l'API Messages Batches sont facturés au même tarif que ceux des requêtes classiques à l'API Messages.

## Utilisation et tarification

L'utilisation de la récupération web (web fetch) n'entraîne **aucun frais supplémentaire** au-delà des coûts standard en 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
    }
  }
}
```

L'outil de récupération web est disponible sur la Claude API **sans coût supplémentaire**. Vous ne payez que les coûts standard en tokens pour le contenu récupéré qui devient partie intégrante du contexte de votre conversation.

Pour vous protéger contre la récupération involontaire de contenus volumineux qui consommeraient un nombre excessif de tokens, utilisez le paramètre `max_content_tokens` afin de définir des limites appropriées en fonction de votre cas d'utilisation et de vos considérations budgétaires.

Exemple d'utilisation de tokens pour un contenu typique :

* Page web moyenne (10 kB) : \~2 500 tokens
* Grande page de documentation (100 kB) : \~25 000 tokens
* Article de recherche au format PDF (500 kB) : \~125 000 tokens

## Étapes suivantes

<CardGroup>
  <Card href="https://platform.claude.com/docs/fr/agents-and-tools/tool-use/code-execution-tool" title="Outil d'exécution de code" icon="code">
    Exécutez du code Python et bash dans un conteneur isolé pour analyser des données, générer des fichiers et itérer sur des solutions.
  </Card>

  <Card href="https://platform.claude.com/docs/fr/agents-and-tools/tool-use/server-tools" title="Outils serveur" icon="cloud">
    Travaillez avec les outils exécutés par Anthropic : blocs server\_tool\_use, poursuite avec pause\_turn et filtrage des domaines.
  </Card>

  <Card href="https://platform.claude.com/docs/fr/agents-and-tools/tool-use/tool-reference" title="Référence des outils" icon="book">
    Répertoire des outils fournis par Anthropic et référence des propriétés facultatives de définition d'outils.
  </Card>
</CardGroup>
