---
title: Web-Fetch-Tool
url: https://platform.claude.com/docs/de/agents-and-tools/tool-use/web-fetch-tool
description: Rufe Inhalte von bestimmten URLs ab und lies sie, um Claudes Kontext mit Live-Webinhalten zu erweitern.
---

<Note>
  Um zu erfahren, wie „zero data retention“ (Null-Datenspeicherung), oder ZDR, auf diese Funktion angewendet wird, siehe [API und Datenspeicherung](https://platform.claude.com/docs/de/manage-claude/api-and-data-retention).
</Note>

Das Web-Fetch-Tool ermöglicht es Claude, vollständige Inhalte von angegebenen Webseiten und PDF-Dokumenten abzurufen.

Die neueste Version des Web-Fetch-Tools (`web_fetch_20260318`) unterstützt **„dynamic filtering" (dynamische Filterung)**: Claude kann Code schreiben und ausführen, um abgerufene Inhalte zu filtern, bevor sie das „context window" (Kontextfenster) erreichen. Dabei bleiben nur relevante Informationen erhalten, und der Rest wird verworfen. Das senkt den Token-Verbrauch bei gleichbleibender Antwortqualität. Die dynamische Filterung ist mit Claude 4.6 und neueren Modellen sowie mit [Claude Mythos Preview](https://anthropic.com/glasswing) verfügbar. `web_fetch_20260318` ergänzt außerdem die Steuerung der [Antwortaufnahme](https://platform.claude.com/docs/de/agents-and-tools/tool-use/web-fetch-tool#response-inclusion) für agentische Workflows. Die vorherigen Versionen (`web_fetch_20260309` für dynamische Filterung und [Cache-Umgehung](https://platform.claude.com/docs/de/agents-and-tools/tool-use/web-fetch-tool#cache-bypass), `web_fetch_20260209` nur für dynamische Filterung, `web_fetch_20250910` für einfaches Abrufen) bleiben verfügbar.

Web Fetch (mit und ohne dynamisches Filtern) ist auf der Claude API, der [Claude Platform on AWS](https://platform.claude.com/docs/de/build-with-claude/claude-platform-on-aws) und [Microsoft Foundry](https://platform.claude.com/docs/de/build-with-claude/claude-in-microsoft-foundry) verfügbar. Auf Microsoft Foundry unterstützen [auf Azure gehostete](https://platform.claude.com/docs/de/build-with-claude/claude-in-microsoft-foundry#additional-features-not-supported-when-hosted-on-azure) Deployments nur das einfache Web-Fetch-Tool (`web_fetch_20250910`, ohne dynamisches Filtern). Bei Anthropic gehostete Deployments unterstützen alle Versionen. Web Fetch ist derzeit nicht auf Amazon Bedrock oder Google Cloud verfügbar.

<Note>
  Für [Claude Mythos Preview](https://anthropic.com/glasswing) ist Web Fetch auf der Claude API und Microsoft Foundry verfügbar. Es ist derzeit für Mythos Preview nicht auf Amazon Bedrock oder Google Cloud verfügbar.
</Note>

<Note>
  Verwende das [Feedback-Formular](https://forms.gle/NhWcgmkcvPCMmPE86), um Feedback zur Qualität der Modellantworten, zur API selbst oder zur Qualität der Dokumentation zu geben.
</Note>

Zur Berechtigung für Zero Data Retention und zum `allowed_callers`-Workaround siehe [Server-Tools](https://platform.claude.com/docs/de/agents-and-tools/tool-use/server-tools#zdr-and-allowed-callers).

<Warning>
  Das Aktivieren des Web-Fetch-Tools in Umgebungen, in denen Claude nicht vertrauenswürdige Eingaben zusammen mit sensiblen Daten verarbeitet, birgt Risiken der Datenexfiltration. Verwende dieses Tool nur in vertrauenswürdigen Umgebungen oder beim Umgang mit nicht sensiblen Daten.

  Um Exfiltrationsrisiken zu minimieren, kann Claude keine URLs abrufen, die nur in seiner eigenen Ausgabe vorkommen. Claude kann nur URLs abrufen, die zuvor in der Konversation aufgetaucht sind: URLs in Benutzernachrichten, URLs in clientseitigen Tool-Ergebnissen (auch wenn ein Ergebnis Text wiedergibt, den Claude generiert hat) sowie URLs aus vorherigen Web-Search- oder Web-Fetch-Ergebnissen (siehe [URL-Validierung](https://platform.claude.com/docs/de/agents-and-tools/tool-use/web-fetch-tool#url-validation)). Claude kann außerdem keine URL abrufen, die anscheinend Zugangsdaten enthält, etwa einen API-Key oder ein Passwort, es sei denn, diese Zugangsdaten kommen im System-Prompt oder im Text einer Benutzernachricht vor.

  Es besteht jedoch weiterhin ein Restrisiko, das du bei der Verwendung dieses Tools sorgfältig abwägen solltest.

  Wenn Datenexfiltration ein Anliegen ist, erwäge Folgendes:

  * Das Web-Fetch-Tool vollständig deaktivieren
  * Den Parameter `max_uses` verwenden, um die Anzahl der Anfragen zu begrenzen
  * Den Parameter `allowed_domains` verwenden, um auf bekannte sichere Domains einzuschränken
</Warning>

Zur Modellunterstützung siehe die [Tool-Referenz](https://platform.claude.com/docs/de/agents-and-tools/tool-use/tool-reference).

## So funktioniert Web Fetch

Web Fetch ist ein [Server-Tool](https://platform.claude.com/docs/de/agents-and-tools/tool-use/server-tools): Die API ruft den Inhalt während der Anfrage ab und fügt die Ergebnisse in die Konversation ein. Du führst nichts aus und gibst kein `tool_result` zurück. Die Ausnahme ist, wenn Claude Web Fetch und eines deiner Client-Tools in derselben Gruppe paralleler Tool-Aufrufe aufruft: Die API gibt die Antwort mit `stop_reason: "tool_use"` zurück, bevor dieser Abruf ausgeführt wurde, und führt den Abruf dann aus, wenn du die `tool_result`-Blöcke des Clients zurücksendest. Siehe [Server-Tools und Client-Tools in einem Zug mischen](https://platform.claude.com/docs/de/agents-and-tools/tool-use/server-tools#mixing-server-tools-and-client-tools-in-one-turn).

Wenn du das Web-Fetch-Tool zu deiner API-Anfrage hinzufügst:

1. Claude bestimmt anhand des Prompts und der verfügbaren URLs, wann Inhalte abgerufen werden sollen.
2. Die API ruft den vollständigen Textinhalt von der angegebenen URL ab.
3. Bei PDFs gibt die API den Inhalt als base64-kodierte Daten zurück und verarbeitet ihn wie ein direkt angehängtes PDF-Dokument.
4. Claude analysiert den abgerufenen Inhalt und liefert eine Antwort mit optionalen Zitaten.

<Note>
  Das Web-Fetch-Tool unterstützt derzeit keine Websites, die dynamisch mit JavaScript gerendert werden. Für Seiten, die einen echten Browser benötigen (JavaScript-Rendering, Klicken oder Ausfüllen von Formularen), erwäge das [Browser-Use-Tool](https://platform.claude.com/docs/de/agents-and-tools/tool-use/browser-use-tool), ein Client-Tool, bei dem deine Anwendung den Browser steuert und Seitentext oder Screenshots als Tool-Ergebnisse an Claude zurückgibt.
</Note>

### Wann Claude abruft

Claude ruft ab, wenn die Anfrage auf eine bestimmte Seite oder ein bestimmtes Dokument verweist:

* Eine URL wird in der Konversation (oder einem vorherigen Tool-Ergebnis) bereitgestellt
* Der Benutzer nennt eine bestimmte Ressource (einen bestimmten Artikel, eine README, eine Preisseite oder einen Dokumentationsabschnitt) ohne URL, und das [Web-Search-Tool](https://platform.claude.com/docs/de/agents-and-tools/tool-use/web-search-tool) ist ebenfalls aktiviert, sodass Claude sie zuerst finden kann (siehe [Kombinierte Suche und Abruf](https://platform.claude.com/docs/de/agents-and-tools/tool-use/web-fetch-tool#combined-search-and-fetch))

Claude ruft **nicht** ab bei Allgemeinwissens- oder offenen Fragen, die nicht auf eine bestimmte Seite verweisen. „Fasse diesen Artikel zusammen: `<url>`" löst einen Abruf aus. „Was sind Best Practices für das Design von REST-APIs?“ wird direkt beantwortet.

### Dynamisches Filtern

Das Abrufen vollständiger Webseiten und PDFs kann schnell Token verbrauchen, insbesondere wenn nur bestimmte Informationen aus großen Dokumenten benötigt werden. Mit `web_fetch_20260209` oder neuer kann Claude Code schreiben und ausführen, um den abgerufenen Inhalt zu filtern, bevor er in den Kontext geladen wird.

Dieses dynamische Filtern ist besonders nützlich für:

* Das Extrahieren bestimmter Abschnitte aus langen Dokumenten
* Das Verarbeiten strukturierter Daten von Webseiten
* Das Filtern relevanter Informationen aus PDFs
* Das Reduzieren von Token-Kosten bei der Arbeit mit großen Dokumenten

<Note>
  Dynamisches Filtern läuft auf dem [Code-Execution-Tool](https://platform.claude.com/docs/de/agents-and-tools/tool-use/code-execution-tool), das die API automatisch für die Anfrage aktiviert. Du musst das Code-Execution-Tool nicht zum `tools`-Array hinzufügen.
</Note>

Um dynamisches Filtern zu aktivieren, verwende `web_fetch_20260209` oder eine beliebige neuere Version. Die folgenden Beispiele verwenden `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>

## So verwendest du Web Fetch

Stelle das Web-Fetch-Tool in deiner API-Anfrage bereit:

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

## Tool-Definition

Das Web-Fetch-Tool unterstützt die folgenden Parameter:

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

Neuere Tool-Versionen fügen zwei weitere optionale Parameter hinzu: `use_cache` erfordert `web_fetch_20260309` oder neuer (siehe [Cache-Umgehung](https://platform.claude.com/docs/de/agents-and-tools/tool-use/web-fetch-tool#cache-bypass)), und `response_inclusion` erfordert `web_fetch_20260318` oder neuer (siehe [Response Inclusion](https://platform.claude.com/docs/de/agents-and-tools/tool-use/web-fetch-tool#response-inclusion)).

### Maximale Nutzungen

Der Parameter `max_uses` begrenzt die Anzahl der durchgeführten Web-Abrufe. Fehlgeschlagene Abrufe werden auf das Limit angerechnet. Wenn Claude mehr Abrufe versucht als erlaubt, ist das `web_fetch_tool_result` ein Fehler mit dem Fehlercode `max_uses_exceeded`. Derzeit gibt es kein Standardlimit.

### Domain-Filterung

Zur Domain-Filterung mit `allowed_domains` und `blocked_domains` siehe [Server-Tools](https://platform.claude.com/docs/de/agents-and-tools/tool-use/server-tools#domain-filtering).

Bei [Claude Managed Agents](https://platform.claude.com/docs/de/managed-agents/overview) setzt du diese Felder im `web_fetch`-Eintrag des Agent-Toolsets, wobei jede aufgeführte Domain ein einfacher Hostname ohne Pfad sein muss; siehe [Domains für Websuche und Web-Fetch einschränken](https://platform.claude.com/docs/de/managed-agents/tools-web-restrictions).

### Inhaltslimits

Der Parameter `max_content_tokens` begrenzt die Menge an Inhalt, die in den Kontext aufgenommen wird. Wenn der abgerufene Inhalt dieses Limit überschreitet, kürzt das Tool ihn. Dies hilft, die Token-Nutzung beim Abrufen großer Dokumente zu kontrollieren. Das Limit gilt für Textinhalte, nicht für binäre Inhalte wie PDFs.

<Note>
  Das Limit des Parameters `max_content_tokens` ist ungefähr. Die tatsächliche Anzahl der verwendeten Input-Token kann geringfügig abweichen.
</Note>

Bei Claude Managed Agents akzeptiert der `web_fetch`-Eintrag des Agent-Toolsets ebenfalls `max_content_tokens`; siehe die [Web-Tool-Einstellungen](https://platform.claude.com/docs/de/managed-agents/tools-web-restrictions#settings).

### Cache-Umgehung

<Note>
  Erfordert `web_fetch_20260309` oder neuer (einschließlich `web_fetch_20260318`).
</Note>

Der Parameter `use_cache` steuert, ob zwischengespeicherte Inhalte zurückgegeben werden dürfen. Setze `"use_cache": false`, um den Cache zu umgehen und frische Inhalte abzurufen. Der Standardwert ist `true`. Deaktiviere das Caching nur, wenn der Benutzer ausdrücklich frische Inhalte anfordert oder wenn sich schnell ändernde Quellen abgerufen werden, da das Umgehen des Caches die „latency“ (Latenz) erhöht.

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

### Response Inclusion

<Note>
  Erfordert `web_fetch_20260318` oder neuer.
</Note>

Der Parameter `response_inclusion` steuert, wie Fetch-Ergebnisblöcke in der API-Antwort erscheinen, wenn das Ergebnis von einem abgeschlossenen [Code-Execution](https://platform.claude.com/docs/de/agents-and-tools/tool-use/code-execution-tool)-Aufruf im selben Zug konsumiert wurde. Setze `"response_inclusion": "excluded"`, um diese verschachtelten Paare aus `server_tool_use`- und Ergebnisblöcken vollständig aus der Antwort zu entfernen, was die Output-Token-Kosten für agentische Workflows reduziert, die rohe Seiteninhalte nicht an den Client zurückgeben müssen. Der Standardwert ist `"full"`. Ergebnisse aus direkten Aufrufen oder aus Code-Execution-Aufrufen, die vor dem Abschluss pausiert haben, werden immer vollständig zurückgegeben, damit sie im nächsten Zug zurückgesendet werden können.

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

### Zitate

Anders als bei Web Search, wo Zitate immer aktiviert sind, sind Zitate bei Web Fetch optional und standardmäßig deaktiviert. Setze `"citations": {"enabled": true}`, damit Claude bestimmte Passagen aus abgerufenen Dokumenten zitieren kann.

<Note>
  Wenn du API-Ausgaben direkt Endbenutzern anzeigst, füge Zitate zur Originalquelle hinzu. Wenn du Änderungen an API-Ausgaben vornimmst, einschließlich der Weiterverarbeitung oder Kombination mit deinem eigenen Material, bevor du sie Endbenutzern anzeigst, zeige Zitate nach Rücksprache mit deiner Rechtsabteilung in angemessener Weise an.
</Note>

## Antwort

Hier ist ein Beispiel für eine Antwortstruktur:

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

### Fetch-Ergebnisse

Fetch-Ergebnisse enthalten:

* `url`: Die URL, die abgerufen wurde
* `content`: Ein Dokumentblock, der den abgerufenen Inhalt enthält
* `retrieved_at`: Zeitstempel, wann der Inhalt abgerufen wurde

<Note>
  Das Web-Fetch-Tool speichert Ergebnisse im Cache, um die Leistung zu verbessern und redundante Anfragen zu reduzieren. Der zurückgegebene Inhalt spiegelt möglicherweise nicht immer die neueste unter der URL verfügbare Version wider. Das Cache-Verhalten wird automatisch verwaltet und kann sich im Laufe der Zeit ändern, um für verschiedene Inhaltstypen und Nutzungsmuster zu optimieren. Um frische Inhalte abzurufen, setze `"use_cache": false` (siehe [Cache-Umgehung](https://platform.claude.com/docs/de/agents-and-tools/tool-use/web-fetch-tool#cache-bypass)).
</Note>

Bei PDF-Dokumenten wird der Inhalt als base64-kodierte Daten zurückgegeben:

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

### Fehler

Wenn das Web-Fetch-Tool auf einen Fehler stößt, gibt die Claude API eine 200-Antwort (Erfolg) zurück, wobei der Fehler im Antwort-Body dargestellt wird. Claude sieht das Fehlerergebnis und setzt den Zug fort. Zum Beispiel:

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

Dies sind die möglichen Fehlercodes:

* `invalid_tool_input`: Ungültige Tool-Eingabe, etwa eine fehlerhafte URL oder ein Nicht-HTTP(S)-Schema
* `url_too_long`: URL überschreitet die maximale Länge (250 Zeichen)
* `url_not_allowed`: URL durch Domain-Filterregeln (einschließlich der Einstellungen deiner Organisation) oder durch Anthropic-seitige Einschränkungen blockiert, etwa private Adressen, `robots.txt` und URLs, die anscheinend Zugangsdaten enthalten, die du nicht angegeben hast
* `url_not_in_prior_context`: URL ist zuvor nicht in der Konversation aufgetaucht (siehe [URL-Validierung](https://platform.claude.com/docs/de/agents-and-tools/tool-use/web-fetch-tool#url-validation))
* `url_not_accessible`: Inhalt konnte nicht abgerufen werden (HTTP-Fehler)
* `too_many_requests`: Ratenlimit überschritten
* `unsupported_content_type`: Inhaltstyp nicht unterstützt (nur Text, HTML und PDF)
* `max_uses_exceeded`: Maximale Anzahl der Web-Fetch-Tool-Nutzungen überschritten
* `unavailable`: Ein interner Fehler ist aufgetreten

## URL-Validierung

Aus Sicherheitsgründen kann das Web-Fetch-Tool nur URLs abrufen, die zuvor im Konversationskontext aufgetaucht sind. Dazu gehören:

* URLs in Benutzernachrichten
* URLs in clientseitigen Tool-Ergebnissen
* URLs aus vorherigen Web-Search- oder Web-Fetch-Ergebnissen

Das Tool kann keine URLs abrufen, die nur in Claudes eigener Ausgabe oder nur im System-Prompt vorkommen. Um eine URL aus dem System-Prompt abrufbar zu machen, füge sie zusätzlich in eine Benutzernachricht ein. Ergebnisse anderer serverseitiger Tools, wie [Code-Ausführung](https://platform.claude.com/docs/de/agents-and-tools/tool-use/code-execution-tool), der [MCP-Connector](https://platform.claude.com/docs/de/agents-and-tools/mcp-connector) oder [Tool-Suche](https://platform.claude.com/docs/de/agents-and-tools/tool-use/tool-search-tool), sind ebenfalls keine zulässige Quelle. Clientseitige Tool-Ergebnisse sind eine zulässige Quelle, auch wenn sie Text wiedergeben, den Claude erzeugt hat (zum Beispiel ein Befehl, der seine Eingabe ausgibt, oder eine Fehlermeldung, die sie zitiert).

Das Tool lehnt außerdem eine URL ab, die anscheinend Zugangsdaten enthält, etwa einen API-Key oder ein Passwort, es sei denn, diese Zugangsdaten kommen im System-Prompt oder im Text einer Benutzernachricht vor. Zugangsdaten, die nur in einem Tool-Ergebnis vorkommen, zählen nicht. Das Ergebnis ist ein `url_not_allowed`-Fehler. Um eine solche URL abzurufen, füge sie in eine Benutzernachricht ein.

## Kombinierte Suche und Abruf

Wenn sowohl das Web-Search- als auch das Web-Fetch-Tool aktiviert sind und der Benutzer eine bestimmte Seite oder ein bestimmtes Dokument nennt, ohne eine URL anzugeben (zum Beispiel „lies die README aus dem Repository anthropics/anthropic-sdk-python“), verwendet Claude Web Search, um sie zu finden, und ruft dann das Ergebnis ab. Das folgende Beispiel fordert eine Suche und eine Analyse in einer Anfrage an:

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

In diesem Workflow:

1. Verwendet Claude Web Search, um relevante Artikel zu finden.
2. Wählt die vielversprechendsten Ergebnisse aus.
3. Verwendet Web Fetch, um den vollständigen Inhalt abzurufen.
4. Liefert eine detaillierte Analyse mit Zitaten.

## Prompt-Caching

Um Tool-Definitionen über Züge hinweg zu cachen, siehe [Tool-Nutzung mit Prompt-Caching](https://platform.claude.com/docs/de/agents-and-tools/tool-use/tool-use-with-prompt-caching).

## Streaming

Bei aktiviertem Streaming sind Fetch-Ereignisse Teil des Streams, mit einer Pause während des Inhaltsabrufs:

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

## Batch-Anfragen

Du kannst das Web-Fetch-Tool in die [Messages Batches API](https://platform.claude.com/docs/de/build-with-claude/batch-processing) einbinden. Web-Fetch-Tool-Aufrufe über die Messages Batches API werden genauso abgerechnet wie solche in regulären Messages-API-Anfragen.

## Nutzung und Preise

Die Nutzung von Web Fetch verursacht **keine zusätzlichen Gebühren** über die Standard-Token-Kosten hinaus:

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

Das Web-Fetch-Tool ist auf der Claude API **ohne zusätzliche Kosten** verfügbar. Du zahlst nur die Standard-Token-Kosten für die abgerufenen Inhalte, die Teil deines Gesprächskontexts werden.

Um dich davor zu schützen, versehentlich große Inhalte abzurufen, die übermäßig viele Token verbrauchen würden, verwende den Parameter `max_content_tokens`, um angemessene Limits basierend auf deinem Anwendungsfall und deinen Budgetüberlegungen festzulegen.

Beispielhafter Token-Verbrauch für typische Inhalte:

* Durchschnittliche Webseite (10 kB): \~2.500 Token
* Große Dokumentationsseite (100 kB): \~25.000 Token
* Forschungsarbeit als PDF (500 kB): \~125.000 Token

## Nächste Schritte

<CardGroup>
  <Card href="https://platform.claude.com/docs/de/agents-and-tools/tool-use/code-execution-tool" title="Code-Execution-Tool" icon="code">
    Führe Python- und Bash-Code in einem Sandbox-Container aus, um Daten zu analysieren, Dateien zu generieren und Lösungen iterativ zu verbessern.
  </Card>

  <Card href="https://platform.claude.com/docs/de/agents-and-tools/tool-use/server-tools" title="Server-Tools" icon="cloud">
    Arbeite mit von Anthropic ausgeführten Tools: server\_tool\_use-Blöcke, pause\_turn-Fortsetzung und Domain-Filterung.
  </Card>

  <Card href="https://platform.claude.com/docs/de/agents-and-tools/tool-use/tool-reference" title="Tool-Referenz" icon="book">
    Verzeichnis der von Anthropic bereitgestellten Tools und Referenz für optionale Eigenschaften von Tool-Definitionen.
  </Card>
</CardGroup>
