---
title: Outil de recherche web
url: https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-search-tool
description: Donnez à Claude accès au contenu web actuel avec des sources citées, un filtrage dynamique optionnel et des contrôles de domaine.
---

<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 recherche web (« web search tool ») donne à Claude un accès direct au contenu web en temps réel, lui permettant de répondre aux questions avec des informations à jour au-delà de sa date limite de connaissances. La réponse inclut des citations pour les sources tirées des résultats de recherche.

Avec `web_search_20260209` et les versions ultérieures, Claude peut écrire et exécuter du code qui filtre les résultats de recherche avant qu'ils n'atteignent la « context window » (fenêtre de contexte) (**filtrage dynamique**, ou « dynamic filtering »), en ne conservant que les informations pertinentes. Le filtrage dynamique est disponible avec les modèles Claude 4.6 et ultérieurs ainsi qu'avec [Claude Mythos Preview](https://anthropic.com/glasswing).

Trois versions de l'outil de recherche web sont disponibles :

* `web_search_20250305` : recherche web de base
* `web_search_20260209` : ajoute le [filtrage dynamique](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-search-tool#dynamic-filtering)
* `web_search_20260318` : ajoute le contrôle de l'[inclusion dans la réponse](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-search-tool#response-inclusion) pour les flux de travail agentiques

Les exemples de cette page utilisent `web_search_20250305` pour la recherche de base et `web_search_20260318` pour le filtrage dynamique.

<Note>
  Pour [Claude Mythos Preview](https://anthropic.com/glasswing), la recherche web est prise en charge sur la Claude API, Google Cloud et Microsoft Foundry. La recherche web n'est pas disponible pour Mythos Preview sur Amazon Bedrock ni sur [Claude Platform on AWS](https://platform.claude.com/docs/fr/build-with-claude/claude-platform-on-aws).
</Note>

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

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

Pour vérifier si un modèle accepte la recherche web avant d'envoyer une requête, lisez sa valeur `capabilities.server_tools.web_search.supported` depuis l'API Models. [Utiliser l'API Models](https://platform.claude.com/docs/fr/models/overview#using-the-models-api) décrit ce champ.

## Fonctionnement de la recherche web

Lorsque vous ajoutez l'outil de recherche web à votre requête API :

1. Claude détermine quand effectuer une recherche en fonction du prompt.
2. L'API exécute les recherches et fournit les résultats à Claude. Ce processus peut se répéter plusieurs fois au cours d'une même requête.
3. À la fin de son tour, Claude fournit une réponse finale avec des sources citées.

### Quand Claude effectue une recherche

Claude effectue une recherche lorsque la requête dépend d'informations actuelles, changeantes ou extérieures à ses données d'entraînement :

* Événements récents, actualités ou annonces
* Prix, taux, scores ou statistiques actuels
* Informations sur des organisations, personnes ou produits spécifiques susceptibles d'avoir changé
* Demandes explicites de rechercher ou de vérifier quelque chose

Claude répond directement sans effectuer de recherche lorsque la requête s'appuie sur des connaissances stables :

* Faits établis, mathématiques, fondamentaux scientifiques ou concepts de programmation
* Écriture créative ou brainstorming
* Analyse de contenu déjà fourni dans la conversation
* Échanges conversationnels et salutations

Le déclenchement est orientable via votre « system prompt » (invite système) : vous pouvez encourager Claude à rechercher plus volontiers ou à préférer répondre directement. Pour une contrainte stricte, utilisez `max_uses` afin de plafonner le nombre de recherches pour chaque requête.

### Filtrage dynamique

Avec la recherche web de base, chaque résultat de recherche est chargé dans la fenêtre de contexte de Claude, et une grande partie de ce contenu peut être sans rapport avec la requête. Avec `web_search_20260209` ou une version ultérieure, Claude écrit et exécute à la place du code qui filtre d'abord les résultats, de sorte que seul le contenu pertinent atteint la fenêtre de contexte. Cela réduit l'utilisation de tokens pour les requêtes nécessitant de nombreuses recherches.

Le filtrage dynamique exécute la recherche web depuis l'intérieur de l'[exécution de code](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/code-execution-tool) : sur `web_search_20260209` et les versions ultérieures, le champ `allowed_callers` de l'outil a pour valeur par défaut `["code_execution_20260120"]`, et lorsque le filtrage dynamique s'exécute, l'API provisionne automatiquement l'exécution de code nécessaire à la requête. Vous n'avez pas besoin d'ajouter vous-même l'outil d'exécution de code à `tools`. Il n'y a pas de frais supplémentaires pour les appels d'exécution de code effectués de cette manière au-delà des coûts de tokens standard.

Pour appeler la recherche web directement, sans filtrage dynamique, définissez `allowed_callers: ["direct"]`. Les modèles qui ne prennent pas en charge l'appel d'outils programmatique nécessitent ce paramètre. Sans lui, l'API renvoie une erreur 400 qui vous indique de le définir.

<Note>
  L'outil de recherche web (avec et sans filtrage dynamique) est disponible sur la Claude API, [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 recherche web de base (`web_search_20250305`, sans filtrage dynamique). Les déploiements hébergés chez Anthropic prennent en charge toutes les versions. Sur Google Cloud, seul l'outil de recherche web de base (sans filtrage dynamique) est disponible. La recherche web n'est pas disponible sur Amazon Bedrock.
</Note>

Les exemples suivants utilisent `web_search_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": "Search for the current prices of AAPL and GOOGL, then calculate which has a better P/E ratio."
        }
      ],
      "tools": [{
        "type": "web_search_20260318",
        "name": "web_search"
      }]
    }'
  ```

  ```bash CLI
  ant messages create <<'YAML'
  model: claude-opus-5-5
  max_tokens: 4096
  messages:
    - role: user
      content: >-
        Search for the current prices of AAPL and GOOGL, then calculate
        which has a better P/E ratio.
  tools:
    - type: web_search_20260318
      name: web_search
  YAML
  ```

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

  response = client.messages.create(
      model="claude-opus-5-5",
      max_tokens=4096,
      messages=[
          {
              "role": "user",
              "content": "Search for the current prices of AAPL and GOOGL, then calculate which has a better P/E ratio.",
          }
      ],
      tools=[{"type": "web_search_20260318", "name": "web_search"}],
  )
  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:
          "Search for the current prices of AAPL and GOOGL, then calculate which has a better P/E ratio."
      }
    ],
    tools: [{ type: "web_search_20260318", name: "web_search" }]
  });

  console.log(response);
  ```

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

  var parameters = new MessageCreateParams
  {
      Model = Model.ClaudeOpus5_5,
      MaxTokens = 4096,
      Messages = [new() { Role = Role.User, Content = "Search for the current prices of AAPL and GOOGL, then calculate which has a better P/E ratio." }],
      Tools = [new ToolUnion(new WebSearchTool20260318())]
  };

  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("Search for the current prices of AAPL and GOOGL, then calculate which has a better P/E ratio.")),
  	},
  	Tools: []anthropic.ToolUnionParam{
  		{OfWebSearchTool20260318: &anthropic.WebSearchTool20260318Param{}},
  	},
  })
  if err != nil {
  	log.Fatal(err)
  }
  fmt.Println(response)
  ```

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

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

      MessageCreateParams params = MessageCreateParams.builder()
          .model(Model.CLAUDE_OPUS_5_5)
          .maxTokens(4096L)
          .addUserMessage("Search for the current prices of AAPL and GOOGL, then calculate which has a better P/E ratio.")
          .addTool(WebSearchTool20260318.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' => 'Search for the current prices of AAPL and GOOGL, then calculate which has a better P/E ratio.'],
      ],
      model: 'claude-opus-5-5',
      tools: [
          [
              'type' => 'web_search_20260318',
              'name' => 'web_search',
          ],
      ],
  );

  echo $message;
  ```

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

  message = client.messages.create(
    model: "claude-opus-5-5",
    max_tokens: 4096,
    messages: [
      { role: "user", content: "Search for the current prices of AAPL and GOOGL, then calculate which has a better P/E ratio." }
    ],
    tools: [{
      type: "web_search_20260318",
      name: "web_search"
    }]
  )
  puts message
  ```
</CodeGroup>

## Comment utiliser la recherche web

<Note>
  La recherche web est activée pour votre organisation, sauf si un administrateur l'a désactivée dans la [Claude Console](https://platform.claude.com/settings/capabilities). Les administrateurs peuvent également y restreindre les domaines sur lesquels elle effectue des recherches. Si elle est désactivée, une requête qui inclut l'outil échoue avec une erreur 400 `invalid_request_error` indiquant que la recherche web n'est pas activée. Vous ne recevez donc pas de [code d'erreur](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-search-tool#errors) dans un résultat de recherche.
</Note>

Ces paramètres au niveau de l'organisation dans la Claude Console s'appliquent uniquement aux requêtes de l'API Messages. Les sessions [Claude Managed Agents](https://platform.claude.com/docs/fr/managed-agents/overview) utilisent plutôt les listes `allowed_domains` et `blocked_domains` propres à chaque outil dans l'ensemble d'outils de l'agent ; consultez [Restreindre les domaines de recherche web et de récupération web](https://platform.claude.com/docs/fr/managed-agents/tools-web-restrictions). Pour une session dans un environnement cloud avec une mise en réseau `limited`, les `allowed_hosts` de l'environnement s'appliquent également à `web_search` et `web_fetch` ; consultez [Réseau](https://platform.claude.com/docs/fr/managed-agents/environments#networking). Les listes propres à chaque outil restreignent davantage ces outils, au sein des hôtes autorisés par `allowed_hosts`.

Fournissez l'outil de recherche 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": "What is the weather in NYC?"
        }
      ],
      "tools": [{
        "type": "web_search_20250305",
        "name": "web_search",
        "max_uses": 5
      }]
    }'
  ```

  ```bash CLI
  ant messages create \
    --model claude-opus-5-5 \
    --max-tokens 1024 \
    --message '{role: user, content: What is the weather in NYC?}' \
    --tool '{type: web_search_20250305, name: web_search, max_uses: 5}'
  ```

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

  response = client.messages.create(
      model="claude-opus-5-5",
      max_tokens=1024,
      messages=[{"role": "user", "content": "What's the weather in NYC?"}],
      tools=[{"type": "web_search_20250305", "name": "web_search", "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: "What's the weather in NYC?"
      }
    ],
    tools: [
      {
        type: "web_search_20250305",
        name: "web_search",
        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 = "What's the weather in NYC?" }],
      Tools = [new ToolUnion(new WebSearchTool20250305() { 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("What's the weather in NYC?")),
  	},
  	Tools: []anthropic.ToolUnionParam{
  		{OfWebSearchTool20250305: &anthropic.WebSearchTool20250305Param{
  			MaxUses: anthropic.Int(5),
  		}},
  	},
  })
  if err != nil {
  	log.Fatal(err)
  }
  fmt.Println(response)
  ```

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

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

      MessageCreateParams params = MessageCreateParams.builder()
          .model(Model.CLAUDE_OPUS_5_5)
          .maxTokens(1024L)
          .addUserMessage("What's the weather in NYC?")
          .addTool(WebSearchTool20250305.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' => "What's the weather in NYC?"],
      ],
      model: 'claude-opus-5-5',
      tools: [
          [
              'type' => 'web_search_20250305',
              'name' => 'web_search',
              '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: "What's the weather in NYC?" }
    ],
    tools: [{
      type: "web_search_20250305",
      name: "web_search",
      max_uses: 5
    }]
  )
  puts message
  ```
</CodeGroup>

## Définition de l'outil

L'outil de recherche web prend en charge les paramètres suivants :

```json JSON
{
  "type": "web_search_20250305",
  "name": "web_search",

  // Optional: Limit the number of searches per request
  "max_uses": 5,

  // Optional: Only include results from these domains.
  // Use allowed_domains or blocked_domains, not both.
  "allowed_domains": ["example.com", "trusteddomain.org"],

  // Optional: Never include results from these domains
  "blocked_domains": ["untrustedsource.com"],

  // Optional: Localize search results
  "user_location": {
    "type": "approximate",
    "city": "San Francisco",
    "region": "California",
    "country": "US",
    "timezone": "America/Los_Angeles"
  }
}
```

Toutes les versions de l'outil de recherche web acceptent `allowed_callers`, qui contrôle si Claude appelle la recherche web directement ou depuis l'exécution de code via le [filtrage dynamique](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-search-tool#dynamic-filtering). Sur `web_search_20260209` et les versions ultérieures, sa valeur par défaut est `["code_execution_20260120"]` au lieu de `["direct"]`. Consultez [Outils serveur](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/server-tools#zdr-and-allowed-callers) pour savoir comment le configurer. `web_search_20260318` et les versions ultérieures acceptent également [`response_inclusion`](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-search-tool#response-inclusion).

### Nombre maximal d'utilisations

Le paramètre `max_uses` limite le nombre de recherches effectuées. Si Claude tente plus de recherches que ce qui est autorisé, le `web_search_tool_result` est une erreur avec le code d'erreur `max_uses_exceeded`.

Les requêtes factuelles simples utilisent généralement 1 à 3 recherches ; les recherches comparatives ou portant sur plusieurs entités peuvent en utiliser 10 ou plus. Pour des conseils sur le choix d'une valeur, consultez [Outils serveur](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/server-tools).

### Filtrage par domaine

Fournissez `allowed_domains` ou `blocked_domains`, mais pas les deux. Si une requête inclut les deux, l'API renvoie une erreur 400. Les entrées sont des domaines nus avec un chemin optionnel, par exemple `example.com` ou `example.com/blog`, sans schéma.

Pour l'ensemble des règles de filtrage par domaine, consultez [Filtrage par domaine](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/server-tools#domain-filtering) dans le guide des outils serveur.

Sur [Claude Managed Agents](https://platform.claude.com/docs/fr/managed-agents/overview), définissez ces champs sur l'entrée `web_search` de l'ensemble d'outils de l'agent ; consultez [Restreindre les domaines de recherche web et de récupération web](https://platform.claude.com/docs/fr/managed-agents/tools-web-restrictions).

### Localisation

Le paramètre `user_location` vous permet de localiser les résultats de recherche en fonction de l'emplacement d'un utilisateur. Fournissez au moins l'un des champs `city`, `region`, `country` ou `timezone`.

* `type` : le type d'emplacement (doit être `approximate`)
* `city` : le nom de la ville
* `region` : la région ou l'État
* `country` : le code pays à deux lettres [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). L'API rejette les codes pays non pris en charge avec une erreur 400.
* `timezone` : l'[identifiant de fuseau horaire IANA](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).

Sur Claude Managed Agents, l'entrée `web_search` de l'ensemble d'outils de l'agent accepte un objet `user_location` avec les mêmes champs. L'API rejette un code `country` non pris en charge avec une erreur 400 lorsque vous créez ou mettez à jour l'agent, ou lorsque vous créez ou mettez à jour une session qui fournit ce paramètre. Consultez les [paramètres des outils web](https://platform.claude.com/docs/fr/managed-agents/tools-web-restrictions#settings).

### Inclusion dans la réponse

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

Le paramètre `response_inclusion` contrôle la manière dont les blocs de résultats de recherche 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 blocs de résultat, réduisant ainsi les coûts de tokens de sortie pour les flux de travail agentiques qui n'ont pas besoin de renvoyer le contenu brut des recherches au client. La valeur par défaut est `"full"`. Les résultats des appels directs, ou des appels d'exécution de code mis en pause avant d'être terminés, sont toujours renvoyés intégralement afin de pouvoir être renvoyés au tour suivant.

```json JSON
{
  "tools": [
    {
      "type": "web_search_20260318",
      "name": "web_search",
      "response_inclusion": "excluded"
    }
  ]
}
```

## Réponse

Voici un exemple de structure de réponse :

```json Output
{
  "role": "assistant",
  "content": [
    // 1. Claude's decision to search
    {
      "type": "text",
      "text": "I'll search for when Claude Shannon was born."
    },
    // 2. The search query used
    {
      "type": "server_tool_use",
      "id": "srvtoolu_01WYG3ziw53XMcoyKL4XcZmE",
      "name": "web_search",
      "input": {
        "query": "claude shannon birth date"
      }
    },
    // 3. Search results
    {
      "type": "web_search_tool_result",
      "tool_use_id": "srvtoolu_01WYG3ziw53XMcoyKL4XcZmE",
      "content": [
        {
          "type": "web_search_result",
          "url": "https://en.wikipedia.org/wiki/Claude_Shannon",
          "title": "Claude Shannon - Wikipedia",
          "encrypted_content": "EqgfCioIARgBIiQ3YTAwMjY1Mi1mZjM5LTQ1NGUtODgxNC1kNjNjNTk1ZWI3Y...",
          "page_age": "April 30, 2025"
        }
      ]
    },
    {
      "text": "Based on the search results, ",
      "type": "text"
    },
    // 4. Claude's response with citations
    {
      "text": "Claude Shannon was born on April 30, 1916, in Petoskey, Michigan",
      "type": "text",
      "citations": [
        {
          "type": "web_search_result_location",
          "url": "https://en.wikipedia.org/wiki/Claude_Shannon",
          "title": "Claude Shannon - Wikipedia",
          "encrypted_index": "Eo8BCioIAhgBIiQyYjQ0OWJmZi1lNm..",
          "cited_text": "Claude Elwood Shannon (April 30, 1916 – February 24, 2001) was an American mathematician, electrical engineer, computer scientist, cryptographer and i..."
        }
      ]
    }
  ],
  "id": "msg_a930390d3a",
  "usage": {
    "input_tokens": 6039,
    "output_tokens": 931,
    "server_tool_use": {
      "web_search_requests": 1
    }
  },
  "stop_reason": "end_turn"
}
```

Cet exemple montre une recherche directe. Lorsqu'une recherche s'exécute via le [filtrage dynamique](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-search-tool#dynamic-filtering), la réponse contient également les blocs de résultat de l'[outil d'exécution de code](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/code-execution-tool), et chaque paire imbriquée `server_tool_use` et `web_search_tool_result` comporte un champ `caller` identifiant l'appel d'exécution de code qui l'a effectuée.

### Résultats de recherche

Les résultats de recherche incluent :

* `url` : l'URL de la page source
* `title` : le titre de la page source
* `page_age` : la date de dernière mise à jour du site
* `encrypted_content` : contenu chiffré que vous devez renvoyer dans les conversations à plusieurs tours

Pour poursuivre une conversation contenant des résultats de recherche, renvoyez les blocs de contenu de l'assistant exactement tels que vous les avez reçus, y compris le `encrypted_content` de chaque résultat. L'API déchiffre ce contenu lors des tours suivants pour restaurer les résultats de recherche dans le contexte de Claude. Si `encrypted_content` est manquant ou modifié, la requête échoue avec une erreur de validation 400.

### Citations

Les citations sont toujours activées pour la recherche web, et chaque `web_search_result_location` inclut :

* `url` : l'URL de la source citée
* `title` : le titre de la source citée
* `encrypted_index` : une référence qui doit être renvoyée pour les conversations à plusieurs tours
* `cited_text` : jusqu'à 150 caractères du contenu cité

Les champs de citation de la recherche web `cited_text`, `title` et `url` ne sont pas comptabilisés dans l'utilisation des tokens d'entrée ou de sortie.

<Note>
  Lorsque vous affichez les sorties de l'API directement aux utilisateurs finaux, les citations vers la source originale doivent être incluses. Si vous apportez des modifications aux 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>

### Erreurs

Lorsque l'outil de recherche web rencontre une erreur (par exemple en atteignant les limites de débit), la Claude API renvoie tout de même une réponse 200 (succès). L'erreur est représentée dans le corps de la réponse selon la structure suivante :

```json Output
{
  "type": "web_search_tool_result",
  "tool_use_id": "srvtoolu_a93jad",
  "content": {
    "type": "web_search_tool_result_error",
    "error_code": "max_uses_exceeded"
  }
}
```

En cas d'erreur, `content` est un objet d'erreur unique plutôt qu'une liste de blocs de résultats. Une recherche qui réussit mais ne correspond à aucun résultat renvoie une liste `content` vide, et non une erreur.

Voici les codes d'erreur possibles :

* `too_many_requests` : limite de débit dépassée
* `invalid_tool_input` : paramètre de requête de recherche invalide
* `max_uses_exceeded` : nombre maximal d'utilisations de l'outil de recherche web dépassé
* `query_too_long` : la requête dépasse la longueur maximale
* `request_too_large` : la requête de recherche est trop volumineuse, généralement en raison d'une longue liste de filtres de domaine
* `unavailable` : une erreur interne s'est produite

### Raison d'arrêt `pause_turn`

L'API peut mettre en pause un tour de recherche de longue durée et renvoyer `stop_reason: "pause_turn"`. Pour continuer, renvoyez le message de l'assistant mis en pause sans modification dans une nouvelle requête.

Si Claude appelle la recherche web et l'un de vos outils client dans le même groupe d'appels d'outils parallèles, l'API renvoie à la place `stop_reason: "tool_use"` et n'exécute pas encore la recherche. Pour continuer, renvoyez les résultats de l'outil client, et l'API exécute la recherche lors de la requête suivante. 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).

Pour la boucle côté serveur et la gestion de `pause_turn`, consultez [La boucle côté serveur et pause\_turn](https://platform.claude.com/docs/fr/agents-and-tools/tool-use/server-tools#the-server-side-loop-and-pause-turn) dans le guide des outils serveur.

## Mise en cache des prompts

Pour mettre en cache les définitions d'outils entre les tours, 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

Avec le streaming activé, vous recevrez les événements de recherche dans le cadre du flux. Il y aura une pause pendant l'exécution de la recherche :

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

event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "web_search"}}

// Search query streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"query\":\"latest quantum computing breakthroughs 2025\"}"}}

// Pause while search executes

// Search results streamed
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "web_search_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": [{"type": "web_search_result", "title": "Quantum Computing Breakthroughs in 2025", "url": "https://example.com"}]}}

// Claude's response with citations (omitted in this example)
```

## Requêtes par lots

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

Pour protéger la capacité partagée, l'API Batches limite les requêtes de recherche web par organisation, de sorte que les lots volumineux comportant de nombreuses recherches peuvent prendre plus de temps à se terminer. Vous pouvez consulter la limite de débit de recherche web de votre organisation sur la page [Limites de débit](https://platform.claude.com/usage/limits) de la Claude Console. Pour demander une limite plus élevée, contactez l'équipe commerciale depuis cette page.

## Utilisation et tarification

L'utilisation de la recherche web est facturée en plus de l'utilisation des tokens :

```json
{
  "usage": {
    "input_tokens": 105,
    "output_tokens": 6039,
    "cache_read_input_tokens": 7123,
    "cache_creation_input_tokens": 7345,
    "server_tool_use": {
      "web_search_requests": 1
    }
  }
}
```

La recherche web est disponible sur la Claude API pour **10 $ par 1 000 recherches**, plus les coûts standard des tokens pour le contenu généré par la recherche. Les résultats de recherche web récupérés tout au long d'une conversation sont comptés comme tokens d'entrée, aussi bien dans les itérations de recherche exécutées au cours d'un seul tour que dans les tours de conversation suivants.

Chaque recherche web compte comme une utilisation, quel que soit le nombre de résultats renvoyés. Si une erreur se produit pendant la recherche web, celle-ci ne sera pas facturée.

## Étapes suivantes

<CardGroup cols={3}>
  <Card title="Outil de récupération web" icon="link" href="https://platform.claude.com/docs/fr/agents-and-tools/tool-use/web-fetch-tool">
    Récupérez et lisez le contenu d'URL spécifiques pour enrichir le contexte de Claude avec du contenu web en direct.
  </Card>

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

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