# Search-Endpoint-Referenz: POST und GET /search

> LLMWebSearch Referenz: jeder Parameter von POST und GET /search, von read und max_chars bis topic, time_range und Domain-Filtern. Ohne KYC, mit Krypto zahlen.

- URL: https://llmwebsearch.com/de/docs/search/
- Zuletzt aktualisiert: 2026-10-22
- Herausgeber: LLMWebSearch (https://llmwebsearch.com)

`/search` führt eine Live-Websuche aus, ordnet bis zu 20 Ergebnisse und liest die Seiten hinter den ersten. Diese Seite listet jeden Parameter, seinen Standardwert, seine Grenzen und seine Auswirkung auf den Preis.

**Kurze Antwort — Welche Parameter nimmt der LLMWebSearch-Search-Endpoint an?**

Der `/search`-Endpoint von **LLMWebSearch** benötigt nur `q`. Optionale Parameter legen fest, wie viele Ergebnisse zurückkommen (`max_results`), wie viele Seiten gelesen werden (`read`), das Inhaltsformat und die Länge, News oder Web, einen Zeitraum, Land und Sprache sowie Domains, die beibehalten oder verworfen werden. Bis zu 3 Seiten lesen kostet 1 Credit, ab 1,20 $/1K Suchanfragen Stand Oktober 2026. Ohne KYC; mit Krypto bezahlen.

## /search at a glance

| Attribut | Wert |
| --- | --- |
| Methoden | `POST` mit einem JSON-Body oder `GET` mit denselben Namen im Query String |
| URL | `https://llmwebsearch.com/api/v1/search` |
| Required | `q`: 1 bis 400 Zeichen; Suchoperatoren werden unverändert übergeben |
| Standardwerte | 5 Ergebnisse, die ersten 3 gelesen, Markdown bis 6.000 Zeichen pro Seite |
| Abrechnung | Ein Credit bezahlt eine Suchanfrage: bis zu 20 gerankte Ergebnisse, wobei die Seiten der ersten 3 gelesen und als Markdown zurückgegeben werden. Werden 4 bis 10 Seiten gelesen, sind es 2 Credits. Ein Aufruf, der mit einem Fehler endet, kostet nichts |
| Ergebnisse | Die Ergebnisse stammen aus einer Live-Websuche, die im Moment Ihres Aufrufs ausgeführt wird, in der Reihenfolge, in der die Suchmaschine sie rankt; nichts wird aus einem alten Index geliefert |
| Filter | Wählen Sie Land und Sprache der Ergebnisse, einen Zeitraum (letzter Tag, Woche, Monat oder Jahr), Web- oder News-Ergebnisse sowie Domains, die ein- oder ausgeschlossen werden sollen |
| Page Reader | `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)` |

## Im Web suchen und die Top-Ergebnisse lesen (POST)

`POST /api/v1/search`

Führt eine Live-Websuche aus und gibt gerankte Ergebnisse zurück. Die Seiten der ersten `read` Ergebnisse werden parallel abgerufen und ihr Hauptinhalt wird in `content` zurückgegeben. Das Beispiel fragt, wie man API-Schlüssel rotiert; Titel, Daten und Werte sind illustrativ.

Authentifizierung: API-Schlüssel im Header `Authorization: Bearer API_KEY`.

**Request body**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `q` | string | Ja | Die Suchanfrage, 1 bis 400 Zeichen. Anführungszeichen und Operatoren wie `site:` bleiben unverändert. |
| `max_results` | integer | Nein | Anzahl der gerankten Ergebnisse, 1 bis 20. Standard 5. |
| `read` | integer | Nein | Wie viele der ersten Ergebnisse gelesen und mit ihrem Inhalt zurückgegeben werden, 0 bis 10. Standard 3. Ab 4 aufwärts kostet der Aufruf 2 Credits. |
| `format` | string | Nein | `markdown` (Standard) oder `text` für den Seiteninhalt. |
| `max_chars` | integer | Nein | Längenbegrenzung für den Inhalt jeder Seite, 500 bis 50.000 Zeichen. Standard 6.000. |
| `topic` | string | Nein | `web` (Standard) oder `news`. |
| `time_range` | string | Nein | `day`, `week`, `month` oder `year`. Kein Standardwert: jedes Datum. |
| `country` | string | Nein | Zweistelliger Ländercode (ISO 3166-1 alpha-2) für den Ort, an dem die Suche läuft. Standard `us`. |
| `language` | string | Nein | Sprache der Ergebnisse, etwa `en`, `de` oder `pt-BR`. Standard `en`. |
| `include_domains` | string[] | Nein | Bis zu 20 Domains; nur Ergebnisse von diesen Domains und ihren Subdomains werden beibehalten. |
| `exclude_domains` | string[] | Nein | Bis zu 20 Domains, deren Ergebnisse verworfen werden. |

*Beispiel: five results, the top three read as Markdown*

```json
{
  "q": "how to rotate api keys without downtime",
  "max_results": 5,
  "read": 3,
  "max_chars": 6000
}
```

*Beispiel: news of the past week from two sites, nothing read*

```json
{
  "q": "open source license change",
  "topic": "news",
  "time_range": "week",
  "include_domains": [
    "news.example.com",
    "example.org"
  ],
  "read": 0
}
```

**Response** `200`

```json
{
  "query": "how to rotate api keys without downtime",
  "created_at": "2026-10-22T10:15:04Z",
  "credits_used": 1,
  "results": [
    {
      "position": 1,
      "title": "Rotating API keys",
      "url": "https://docs.example.com/security/key-rotation",
      "host": "docs.example.com",
      "snippet": "Create a second key, deploy it everywhere, then revoke the first one.",
      "published_at": "2026-09-30",
      "content_status": "ok",
      "content": "# Rotating API keys\n\n## Zero-downtime rotation\n\n1. Create a second key.\n2. Deploy it to every service.\n3. Revoke the old key.",
      "word_count": 948
    },
    {
      "position": 2,
      "title": "Key rotation checklist",
      "url": "https://blog.example.org/key-rotation-checklist",
      "host": "blog.example.org",
      "snippet": "Keep two keys active during the switch and alert on the old one.",
      "content_status": "blocked_by_robots"
    },
    {
      "position": 3,
      "title": "Secrets management basics",
      "url": "https://security.example.net/secrets-basics",
      "host": "security.example.net",
      "snippet": "Never commit keys to a repository.",
      "published_at": "2026-06-12",
      "content_status": "ok",
      "content": "# Secrets management basics\n\n**Never** commit keys to a repository...",
      "word_count": 1310
    },
    {
      "position": 4,
      "title": "API key best practices",
      "url": "https://dev.example.com/api-key-best-practices",
      "host": "dev.example.com",
      "snippet": "Scope each key to one service and one environment.",
      "content_status": "not_requested"
    }
  ]
}
```

*curl*

```bash
curl -s "https://llmwebsearch.com/api/v1/search" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "how to rotate api keys without downtime", "max_results": 5, "read": 3}'
```

*Python*

```python
import os
import requests

resp = requests.post(
    "https://llmwebsearch.com/api/v1/search",
    headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
    json={"q": "how to rotate api keys without downtime", "max_results": 5, "read": 3},
    timeout=60,
)
resp.raise_for_status()
for r in resp.json()["results"]:
    print(r["position"], r["content_status"], r["url"])
```

*Node.js*

```javascript
const res = await fetch('https://llmwebsearch.com/api/v1/search', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.LLMWEBSEARCH_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ q: 'how to rotate api keys without downtime', max_results: 5, read: 3 }),
});
const { results } = await res.json();
for (const r of results) console.log(r.position, r.content_status, r.url);
```

## Im Web suchen (GET)

`GET /api/v1/search`

Dieselbe Suche mit den Parametern im Query String, URL-kodiert. Listen wie `include_domains` werden als ein durch Kommas getrennter Wert geschrieben. Praktisch für einen schnellen Test oder für Tools, die nur GET-Requests senden. Das Beispiel fragt nur nach Ergebnissen (`read=0`).

Authentifizierung: API-Schlüssel im Header `Authorization: Bearer API_KEY`.

**Parameter**

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `q` | query | string | Ja | Die Suchanfrage, URL-kodiert, 1 bis 400 Zeichen. |
| `max_results` | query | integer | Nein | 1 bis 20. Standard 5. |
| `read` | query | integer | Nein | 0 bis 10. Standard 3; 4 oder mehr kostet 2 Credits. |
| `format` | query | string | Nein | `markdown` (Standard) oder `text`. |
| `max_chars` | query | integer | Nein | 500 bis 50.000 pro Seite. Standard 6.000. |
| `topic` | query | string | Nein | `web` (Standard) oder `news`. |
| `time_range` | query | string | Nein | `day`, `week`, `month` oder `year`. |
| `country` | query | string | Nein | ISO 3166-1 alpha-2-Code. Standard `us`. |
| `language` | query | string | Nein | Sprachcode. Standard `en`. |
| `include_domains` | query | string | Nein | Kommagetrennte Liste, bis zu 20 Domains. |
| `exclude_domains` | query | string | Nein | Kommagetrennte Liste, bis zu 20 Domains. |
| `api_key` | query | string | Nein | Ihr Schlüssel, wenn Sie den Header `Authorization` nicht senden. |

**Response** `200`

```json
{
  "query": "postgres connection pooling",
  "created_at": "2026-10-22T10:21:47Z",
  "credits_used": 1,
  "results": [
    {
      "position": 1,
      "title": "Connection pooling explained",
      "url": "https://docs.example.com/db/pooling",
      "host": "docs.example.com",
      "snippet": "A pool keeps a few database connections open and lends them to requests.",
      "content_status": "not_requested"
    },
    {
      "position": 2,
      "title": "Sizing a connection pool",
      "url": "https://blog.example.org/pool-size",
      "host": "blog.example.org",
      "snippet": "Start small: the right size depends on cores and disk, not on traffic.",
      "published_at": "2026-03-04",
      "content_status": "not_requested"
    }
  ]
}
```

*curl*

```bash
curl -sG "https://llmwebsearch.com/api/v1/search" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  --data-urlencode "q=postgres connection pooling" \
  -d max_results=10 -d read=0
```

*Python*

```python
import os
import requests

resp = requests.get(
    "https://llmwebsearch.com/api/v1/search",
    headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
    params={"q": "postgres connection pooling", "max_results": 10, "read": 0},
    timeout=60,
)
print([r["url"] for r in resp.json()["results"]])
```

*Node.js*

```javascript
const params = new URLSearchParams({ q: 'postgres connection pooling', max_results: '10', read: '0' });
const res = await fetch(`https://llmwebsearch.com/api/v1/search?${params}`, {
  headers: { Authorization: `Bearer ${process.env.LLMWEBSEARCH_API_KEY}` },
});
console.log((await res.json()).results.map((r) => r.url));
```

## Wie erhalte ich Ergebnisse ohne Seiteninhalt?

Setzen Sie `read` auf `0`. Jedes Ergebnis kommt dann mit Titel, URL, Host, Snippet und Datum zurück sowie `content_status: "not_requested"`. Die Antwort ist deutlich kleiner, was hilft, wenn der Agent nur entscheiden muss, welche Links relevant sind.

Der Preis bleibt bei 1 Credit, genau wie beim Lesen von bis zu 3 Seiten. Ein übliches Muster ist eine `read=0`-Suche zur Vorauswahl, dann ein [extract-Aufruf](https://llmwebsearch.com/de/docs/extract/) für die zwei oder drei URLs, die das Modell ausgewählt hat.

## Wann kostet eine Suche 2 Credits?

Wenn `read` zwischen 4 und 10 liegt. Mehr Seiten zu lesen bedeutet mehr Arbeit auf unserer Seite, daher verdoppelt sich der Preis einmal und bleibt bis zum Maximum von 10 Seiten bei 2 Credits.

`credits_used` in jeder Antwort zeigt, was der Aufruf gekostet hat. Eine Seite, die nicht gelesen werden konnte, wegen einer robots.txt-Regel oder einer Ablehnung, senkt oder erhöht diesen Preis nicht. Wenn Sie meist nur wenige vollständige Seiten brauchen, lassen Sie `read` bei 3 und rufen `/extract` für die seltene zusätzliche Seite auf.

## Wie suche ich aktuelle Nachrichten?

Senden Sie `topic: "news"` und eine `time_range`. Die Ergebnisse stammen dann aus Nachrichtenartikeln, und `time_range` behält nur die aus den vergangenen `day`, `week`, `month` oder `year`. `published_at` wird ausgefüllt, wenn der Artikel oder das Suchergebnis ein Datum angibt.

Derselbe Aktualitätsfilter funktioniert mit `topic: "web"`. Er ist nützlich für Fragen wie aktuelle Releases oder Preisänderungen, bei denen eine alte Seite das Modell in die Irre führen würde.

*Nachrichten aus der vergangenen Woche, Top-3-Artikel gelesen*

```bash
curl -s "https://llmwebsearch.com/api/v1/search" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "database release security fix", "topic": "news", "time_range": "week", "read": 3}'
```

## Wie beschränke ich Ergebnisse auf bestimmte Websites?

Listen Sie sie in `include_domains` auf, bis zu 20 Einträge. Nur Ergebnisse, deren Host eine dieser Domains oder eine ihrer Subdomains ist, werden behalten: `example.com` passt auch auf `docs.example.com`. Verwenden Sie `exclude_domains` umgekehrt, zum Beispiel um Ihre eigene Website aus den Ergebnissen zu entfernen.

In einem POST-Body sind beide Felder JSON-Arrays. In einer GET-Anfrage schreiben Sie sie als einen kommagetrennten Wert. Die Suchanfrage selbst kann auch einen `site:`-Operator enthalten; er wird unverändert an die Suche weitergegeben.

## Was ändern Land und Sprache?

`country` legt fest, wo die Suche läuft, mit einem zweibuchstabigen Code wie `us`, `de` oder `br`. Rankings unterscheiden sich je nach Land, besonders bei lokalen Diensten, Preisen und Vorschriften. `language` legt die Sprache der Ergebnisse fest, etwa `en`, `fr` oder `pt-BR`.

Beide sind standardmäßig auf Vereinigte Staaten und Englisch gesetzt. Setzen Sie sie gemeinsam, wenn der Agent für Nutzer in einem Markt arbeitet: Ein deutscher Nutzer, der nach Steuerregeln fragt, möchte `country: "de"` und `language: "de"`.

## Wie viel Seitentext kommt zurück?

Bis zu `max_chars` Zeichen pro Seite, standardmäßig 6.000 und zwischen 500 und 50.000. Die Obergrenze schützt das Kontextfenster des Modells: drei Seiten mit 6.000 Zeichen sind etwa 4.500 Tokens Englisch.

`word_count` zählt den gesamten extrahierten Text, vor dem Kürzen, sodass Sie erkennen können, wann eine Seite gekürzt wurde. Wenn eine Antwort ein langes Dokument braucht, suchen Sie zuerst mit einer niedrigen Obergrenze und rufen dann diese Seite allein über `/extract` mit einer höheren ab. Auf eine langsame Seite wird nicht unbegrenzt gewartet: Nach 15 Sekunden kommt sie als `fetch_timeout` zurück, ohne Inhalt.

## Search-Endpoint: häufige Fragen

### Sollte ich POST oder GET verwenden?

POST im Code, weil JSON-Arrays und lange Suchanfragen in einem Body einfacher sind. GET eignet sich für einen schnellen Test im Terminal oder für ein Tool, das nur Query-Strings sendet. Beide liefern dieselbe Antwort und kosten gleich viel.

### Kann ich mehr als 20 Ergebnisse anfordern?

Nein. 20 ist das Maximum pro Aufruf. Agents brauchen selten mehr: Eine zweite Suche mit umformulierter Anfrage liefert meist bessere Quellen als eine lange Liste.

### Werden die Seiten nacheinander gelesen?

Nein, parallel. Eine Seite, die nicht innerhalb von 15 Sekunden antwortet, wird ohne Inhalt als `fetch_timeout` zurückgegeben, sodass eine langsame Website nicht die gesamte Antwort aufhält.

### Welche Suchmaschine liefert die Ergebnisse?

Die Ergebnisse stammen aus einer Live-Websuche, die im Moment Ihres Aufrufs ausgeführt wird, in der Reihenfolge, in der die Suchmaschine sie rankt; nichts wird aus einem alten Index geliefert. Wir veröffentlichen nicht, welche Upstream-Anbieter die Suche ausführen.

---

LLMWebSearch: LLMWebSearch ist eine Websuch-API für KI-Agenten, die gerankte Ergebnisse mit dem Inhalt der Top-Seiten als Markdown liefert, bezahlt mit Krypto ohne Ausweis-Upload. Vorausbezahlte Credits ab 1,20 $/1K Suchanfragen verfallen nie. Ohne KYC — kein Ausweis, kein Selfie, keine Dokumente. Mit Krypto bezahlen.
