# Các công thức curl và jq cho web search API

> Web search API với curl và jq: tìm kiếm, liệt kê nguồn, lưu trang Markdown, lọc tin tức, đọc URL, kiểm tra credit. Không cần KYC, thanh toán bằng crypto.

- URL: https://llmwebsearch.com/vi/docs/curl/
- Cập nhật lần cuối: 2026-10-22
- Đơn vị phát hành: LLMWebSearch (https://llmwebsearch.com)

Mọi tính năng của API đều dùng được từ terminal. Các công thức này dùng `curl` để gọi API và `jq` để định hình JSON: hữu ích khi muốn thử một truy vấn trước khi viết code, cho shell script và cho cron job.

**Trả lời nhanh — Làm thế nào để dùng web search API từ dòng lệnh?**

Gửi một JSON body với `curl -d` đến `https://llmwebsearch.com/api/v1/search`, khóa của bạn trong header `Authorization: Bearer`, rồi chuyển kết quả sang `jq`. **LLMWebSearch** trả về các kết quả đã xếp hạng kèm 3 trang đầu dưới dạng Markdown, nên chỉ một dòng lệnh có thể liệt kê nguồn hoặc lưu trang ra tệp. Mỗi lượt tìm kiếm tốn 1 credit, từ 1,20 US$/1K lượt tìm kiếm tính đến tháng 10 năm 2026. Không cần KYC; thanh toán bằng crypto.

## Làm thế nào để thiết lập terminal một lần?

Export khóa của bạn trong shell để khóa không nằm trong các lệnh bạn gõ và không lọt vào lịch sử lệnh. Các công thức bên dưới đọc khóa qua `$LLMWEBSEARCH_API_KEY`. Bạn cũng cần `jq`, mà hầu hết trình quản lý gói cài đặt dưới đúng tên đó.

Mọi công thức đều giả định dùng shell POSIX như bash hoặc zsh. Trên Windows, Git Bash hoặc WSL chạy chúng không cần sửa gì.

*Đặt khóa và kiểm tra số dư (miễn phí)*

```bash
export LLMWEBSEARCH_API_KEY="your-key"

curl -s "https://llmwebsearch.com/api/v1/credits" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" | jq .
```

## Làm thế nào để liệt kê nguồn của một lượt tìm kiếm?

Chạy tìm kiếm với `read` đặt thành `0` và in mỗi kết quả một dòng: vị trí, host và URL. Việc này tốn 1 credit và cho bạn thấy trong một giây những nguồn nào một câu hỏi đưa ra. Đây là cách tốt để tinh chỉnh cách diễn đạt truy vấn trước khi agent dùng nó.

*Mỗi kết quả một dòng*

```bash
curl -s "https://llmwebsearch.com/api/v1/search" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "postgres connection pool size", "max_results": 10, "read": 0}' \
  | jq -r '.results[] | "\(.position)\t\(.host)\t\(.url)"'
```

## Làm thế nào để lưu các trang đã đọc?

Giữ các kết quả có `content_status` là `ok` và ghi mỗi `content` ra tệp riêng. Công thức bên dưới lưu `01.md`, `02.md` v.v., mỗi tệp bắt đầu bằng URL nguồn của nó. jq chọn các kết quả và vòng lặp shell ghi tệp.

*Lưu mỗi trang dưới dạng Markdown*

```bash
curl -s "https://llmwebsearch.com/api/v1/search" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "postgres connection pool size", "read": 3}' > search.json

jq -r '.results[] | select(.content_status == "ok") | .position' search.json | while read -r pos; do
  jq -r --argjson p "$pos" '.results[] | select(.position == $p) | "Source: " + .url + "\n\n" + .content' \
    search.json > "$(printf '%02d' "$pos").md"
done
ls -1 ./*.md
```

## Làm thế nào để tìm tin tức từ một vài trang web?

Thêm `topic`, `time_range` và `include_domains` vào body. Công thức giữ tin tức trong tuần qua trên hai tên miền và in ngày cạnh mỗi tiêu đề, đủ để theo dõi một chủ đề từ cron job.

*Tin tức tuần qua từ hai tên miền*

```bash
curl -s "https://llmwebsearch.com/api/v1/search" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "database security release", "topic": "news", "time_range": "week", "include_domains": ["news.example.com", "example.org"], "read": 0}' \
  | jq -r '.results[] | "\(.published_at // "no date")  \(.title)  \(.url)"'
```

## Làm thế nào để dùng dạng GET?

Dùng `curl -G` với `--data-urlencode` cho truy vấn, để dấu cách và ký hiệu được mã hóa giúp bạn. Các danh sách như `include_domains` trở thành một giá trị phân tách bằng dấu phẩy. GET tiện cho thử nhanh; các script lớn dần nên chuyển sang POST.

*GET /search*

```bash
curl -sG "https://llmwebsearch.com/api/v1/search" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  --data-urlencode "q=pgbouncer transaction mode" \
  -d read=1 -d max_chars=3000 -d include_domains=example.com,example.org \
  | jq -r '.results[0].content // .results[0].snippet'
```

## Làm thế nào để đọc các URL tôi đã có?

Post chúng đến `/extract` dưới dạng mảng JSON gồm 1 đến 20 địa chỉ. Đọc các trang mà bạn đã có URL tốn 1 credit cho mỗi nhóm 3 trang bắt đầu được trả về kèm nội dung, tối đa 20 URL mỗi lượt gọi; các URL bị từ chối hoặc thất bại không được tính. Công thức in mỗi URL kèm trạng thái và số từ, cho thấy ngay những trang nào một site đã cho phép chúng tôi đọc.

*POST /extract*

```bash
curl -s "https://llmwebsearch.com/api/v1/extract" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"urls": ["https://docs.example.com/security/key-rotation", "https://example.com/changelog"]}' \
  | jq -r '"credits: \(.credits_used)", (.results[] | "\(.content_status)\t\(.word_count // 0)\t\(.url)")'
```

## Làm sao để xem lỗi khi một lệnh gọi thất bại?

In ra HTTP status với `-w` và giữ nguyên body: lỗi trả về dưới dạng JSON với một `code` và một `message`. Script sau đó có thể rẽ nhánh theo status, ví dụ chờ và thử lại chỉ khi gặp `429`, `502` hoặc `504`. Không lỗi nào trong số này tốn credit.

*Mã trạng thái và nội dung lỗi*

```bash
status=$(curl -s -o body.json -w '%{http_code}' "https://llmwebsearch.com/api/v1/search" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "test query"}')
if [ "$status" != "200" ]; then
  echo "HTTP $status: $(jq -r '.error.code + " - " + .error.message' body.json)"
fi
```

## curl: các câu hỏi thường gặp

### Vì sao JSON body của tôi báo lỗi invalid_parameter?

Thường là do vấn đề dấu nháy. Trong bash, hãy bọc body bằng dấu nháy đơn để các dấu nháy kép bên trong giữ nguyên, và kiểm tra bằng `echo '…' | jq .` trước khi gửi.

### Tôi có thể truyền khóa trong URL không?

Được, với `-d api_key=…` ở dạng GET. Dùng header an toàn hơn, vì lịch sử shell và log của proxy đều ghi lại URL.

### Một lệnh curl thất bại có tốn credit không?

Không. Lỗi HTTP không bao giờ tốn credit. Chỉ những truy vấn trả về kết quả mới bị tính phí, như `credits_used` cho thấy.

---

LLMWebSearch: LLMWebSearch là một web search API cho AI agent, trả về kết quả đã xếp hạng kèm nội dung của các trang hàng đầu ở định dạng Markdown, thanh toán bằng crypto mà không cần tải lên giấy tờ tùy thân. Credit trả trước từ 1,20 US$/1K lượt tìm kiếm không bao giờ hết hạn. Không cần KYC — không ID, không selfie, không giấy tờ. Thanh toán bằng crypto.
