# Referensi endpoint search: POST dan GET /search

> Referensi endpoint search: parameter POST dan GET /search, dari read dan max_chars hingga topic, time_range, dan filter domain. Tanpa KYC, bayar kripto.

- URL: https://llmwebsearch.com/id/docs/search/
- Terakhir diperbarui: 2026-10-22
- Penerbit: LLMWebSearch (https://llmwebsearch.com)

`/search` menjalankan pencarian web secara langsung, memeringkat hingga 20 hasil, dan membaca halaman di balik hasil-hasil pertama. Halaman ini mencantumkan setiap parameter, nilai default-nya, batasannya, dan pengaruhnya terhadap harga.

**Jawaban singkat — Parameter apa saja yang diterima endpoint search LLMWebSearch?**

Endpoint `/search` dari **LLMWebSearch** hanya membutuhkan `q`. Parameter opsional mengatur berapa banyak hasil yang dikembalikan (`max_results`), berapa banyak halaman yang dibaca (`read`), format dan panjang konten, news atau web, rentang waktu, negara dan bahasa, serta domain yang dipertahankan atau dibuang. Membaca hingga 3 halaman membutuhkan 1 kredit, mulai dari US$1,20/1K pencarian per Oktober 2026. Tanpa KYC; bayar dengan kripto.

## /search at a glance

| Atribut | Nilai |
| --- | --- |
| Metode | `POST` dengan body JSON, atau `GET` dengan nama yang sama di query string |
| URL | `https://llmwebsearch.com/api/v1/search` |
| Wajib | `q`: 1 hingga 400 karakter; operator pencarian diteruskan apa adanya |
| Default | 5 hasil, 3 pertama dibaca, Markdown hingga 6.000 karakter per halaman |
| Penagihan | Satu kredit membayar satu pencarian: hingga 20 hasil berperingkat, dengan halaman dari 3 hasil teratas dibaca dan dikembalikan sebagai Markdown. Membaca 4 hingga 10 halaman menjadi 2 kredit. Panggilan yang berakhir dengan error tidak dikenakan biaya |
| Hasil | Hasil berasal dari pencarian web langsung yang dijalankan pada saat panggilan Anda, dalam urutan peringkat dari mesin pencari; tidak ada yang disajikan dari indeks lama |
| Filter | Pilih negara dan bahasa hasil, rentang waktu (hari, minggu, bulan, atau tahun terakhir), hasil web atau berita, serta domain yang ingin disertakan atau dikecualikan |
| Page reader | `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)` |

## Cari di web dan baca hasil teratas (POST)

`POST /api/v1/search`

Menjalankan pencarian web secara langsung dan mengembalikan hasil yang telah diperingkat. Halaman dari `read` hasil pertama diambil secara paralel dan konten utamanya dikembalikan dalam `content`. Contoh ini menanyakan cara merotasi API key; judul, tanggal, dan nilai hanyalah ilustrasi.

Autentikasi: API key di header `Authorization: Bearer API_KEY`.

**Body permintaan**

| Field | Tipe | Wajib | Deskripsi |
| --- | --- | --- | --- |
| `q` | string | Ya | Kueri pencarian, 1 hingga 400 karakter. Tanda kutip dan operator seperti `site:` dipertahankan apa adanya. |
| `max_results` | integer | Tidak | Jumlah hasil yang diperingkat, 1 hingga 20. Default 5. |
| `read` | integer | Tidak | Berapa banyak hasil pertama yang dibaca dan dikembalikan bersama kontennya, 0 hingga 10. Default 3. Mulai dari 4 ke atas, panggilan membutuhkan 2 kredit. |
| `format` | string | Tidak | `markdown` (default) atau `text` untuk konten halaman. |
| `max_chars` | integer | Tidak | Batas panjang konten tiap halaman, 500 hingga 50.000 karakter. Default 6.000. |
| `topic` | string | Tidak | `web` (default) atau `news`. |
| `time_range` | string | Tidak | `day`, `week`, `month`, atau `year`. Tanpa default: tanggal apa pun. |
| `country` | string | Tidak | Kode negara dua huruf (ISO 3166-1 alpha-2) untuk lokasi pencarian dijalankan. Default `us`. |
| `language` | string | Tidak | Bahasa hasil, seperti `en`, `de`, atau `pt-BR`. Default `en`. |
| `include_domains` | string[] | Tidak | Hingga 20 domain; hanya hasil dari domain ini dan subdomainnya yang dipertahankan. |
| `exclude_domains` | string[] | Tidak | Hingga 20 domain yang hasilnya dibuang. |

*Contoh: 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
}
```

*Contoh: 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
}
```

**Respons** `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);
```

## Cari di web (GET)

`GET /api/v1/search`

Pencarian yang sama dengan parameter di query string, di-URL-encode. List seperti `include_domains` ditulis sebagai satu nilai yang dipisahkan koma. Berguna untuk pengujian cepat atau untuk alat yang hanya mengirim permintaan GET. Contoh ini hanya meminta hasil (`read=0`).

Autentikasi: API key di header `Authorization: Bearer API_KEY`.

**Parameter**

| Nama | Di | Tipe | Wajib | Deskripsi |
| --- | --- | --- | --- | --- |
| `q` | query | string | Ya | Kueri pencarian, di-URL-encode, 1 hingga 400 karakter. |
| `max_results` | query | integer | Tidak | 1 hingga 20. Default 5. |
| `read` | query | integer | Tidak | 0 hingga 10. Default 3; 4 atau lebih dikenakan 2 kredit. |
| `format` | query | string | Tidak | `markdown` (default) atau `text`. |
| `max_chars` | query | integer | Tidak | 500 hingga 50.000 per halaman. Default 6.000. |
| `topic` | query | string | Tidak | `web` (default) atau `news`. |
| `time_range` | query | string | Tidak | `day`, `week`, `month` atau `year`. |
| `country` | query | string | Tidak | Kode ISO 3166-1 alpha-2. Default `us`. |
| `language` | query | string | Tidak | Kode bahasa. Default `en`. |
| `include_domains` | query | string | Tidak | Daftar dipisahkan koma, hingga 20 domain. |
| `exclude_domains` | query | string | Tidak | Daftar dipisahkan koma, hingga 20 domain. |
| `api_key` | query | string | Tidak | API key Anda, saat Anda tidak mengirim header `Authorization`. |

**Respons** `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));
```

## Bagaimana cara mendapatkan hasil tanpa konten halaman sama sekali?

Set `read` ke `0`. Setiap hasil lalu dikembalikan dengan judul, URL, host, snippet, dan tanggalnya, serta `content_status: "not_requested"`. Responsnya jauh lebih kecil, yang membantu saat agen hanya perlu memilih tautan mana yang penting.

Harganya tetap 1 kredit, sama seperti membaca hingga 3 halaman. Pola yang umum adalah pencarian `read=0` untuk menyaring kandidat, lalu [panggilan extract](https://llmwebsearch.com/id/docs/extract/) pada dua atau tiga URL yang dipilih model.

## Kapan sebuah pencarian dikenakan 2 kredit?

Saat `read` antara 4 dan 10. Membaca lebih banyak halaman butuh lebih banyak kerja di sisi kami, jadi harganya naik sekali, dan tetap 2 kredit hingga maksimum 10 halaman.

`credits_used` di setiap respons menunjukkan biaya panggilan tersebut. Halaman yang tidak bisa dibaca, karena aturan robots.txt atau penolakan, tidak menurunkan atau menaikkan harga itu. Jika Anda biasanya hanya butuh beberapa halaman penuh, biarkan `read` di 3 dan panggil `/extract` untuk halaman tambahan yang jarang.

## Bagaimana cara mencari berita terbaru?

Kirim `topic: "news"` dan `time_range`. Hasilnya lalu berasal dari artikel berita, dan `time_range` hanya menyimpan hasil dari `day`, `week`, `month` atau `year` terakhir. `published_at` diisi saat artikel atau hasil pencarian mencantumkan tanggal.

Filter kesegaran yang sama berfungsi dengan `topic: "web"`. Berguna untuk pertanyaan seperti rilis terbaru atau perubahan harga, di mana halaman lama bisa menyesatkan model.

*Berita dari minggu lalu, 3 artikel teratas dibaca*

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

## Bagaimana cara membatasi hasil ke situs tertentu?

Cantumkan di `include_domains`, hingga 20 entri. Hanya hasil yang host-nya salah satu domain tersebut, atau subdomainnya, yang disimpan: `example.com` juga cocok dengan `docs.example.com`. Gunakan `exclude_domains` untuk kebalikannya, misalnya untuk menyingkirkan situs Anda sendiri dari hasil.

Di body POST kedua field ini berupa array JSON. Di request GET, tulis keduanya sebagai satu nilai dipisahkan koma. Kueri itu sendiri juga bisa membawa operator `site:`; operator itu diteruskan ke pencarian apa adanya.

## Apa yang diubah oleh country dan language?

`country` menentukan lokasi pencarian dijalankan, dengan kode dua huruf seperti `us`, `de` atau `br`. Peringkat berbeda per negara, terutama untuk layanan lokal, harga, dan regulasi. `language` menentukan bahasa hasil, seperti `en`, `fr` atau `pt-BR`.

Keduanya default ke Amerika Serikat dan bahasa Inggris. Set keduanya bersamaan saat agen bekerja untuk pengguna di satu pasar: pengguna Jerman yang bertanya soal aturan pajak ingin `country: "de"` dan `language: "de"`.

## Berapa banyak teks halaman yang dikembalikan?

Hingga `max_chars` karakter per halaman, default 6.000 dan antara 500 hingga 50.000. Batas ini melindungi context window model: tiga halaman dengan 6.000 karakter kira-kira 4.500 token bahasa Inggris.

`word_count` menghitung seluruh teks yang diekstrak, sebelum dipotong, jadi Anda bisa tahu kapan sebuah halaman dipangkas. Saat jawaban butuh satu dokumen panjang, cari dulu dengan batas rendah, lalu ambil halaman itu saja melalui `/extract` dengan batas lebih tinggi. Halaman yang lambat tidak ditunggu tanpa batas: setelah 15 detik halaman itu dikembalikan sebagai `fetch_timeout`, tanpa konten.

## Endpoint pencarian: pertanyaan umum

### Sebaiknya saya pakai POST atau GET?

POST di kode, karena array JSON dan kueri panjang lebih sederhana di body. GET cocok untuk tes cepat di terminal atau tool yang hanya mengirim query string. Keduanya mengembalikan respons yang sama dan berbiaya sama.

### Bisakah saya meminta lebih dari 20 hasil?

Tidak. 20 adalah maksimum per panggilan. Agen jarang butuh lebih: pencarian kedua dengan kueri yang diubah kata-katanya biasanya membawa sumber yang lebih baik daripada daftar panjang.

### Apakah halaman dibaca satu per satu?

Tidak, secara paralel. Halaman yang tidak menjawab dalam 15 detik dikembalikan tanpa konten, sebagai `fetch_timeout`, sehingga satu situs yang lambat tidak menahan seluruh respons.

### Mesin pencari mana yang menghasilkan hasil?

Hasil berasal dari pencarian web langsung yang dijalankan pada saat panggilan Anda, dalam urutan peringkat dari mesin pencari; tidak ada yang disajikan dari indeks lama. Kami tidak mempublikasikan penyedia upstream mana yang menjalankan pencarian.

---

LLMWebSearch: LLMWebSearch adalah API pencarian web untuk agen AI yang mengembalikan hasil berperingkat beserta konten halaman teratas dalam Markdown, dibayar dengan kripto tanpa unggah ID. Kredit prabayar mulai dari US$1,20/1K pencarian tidak pernah kedaluwarsa. Tanpa KYC — tanpa ID, tanpa selfie, tanpa dokumen. Bayar dengan kripto.
