# SERP API với curl và jq: công thức một dòng

> Công thức SerpCrypto SERP API một dòng với curl và jq: top 10 liên kết, People Also Ask, nguồn AI Overview, local pack và Maps, kèm phiên bản PowerShell.

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

Cách nhanh nhất để xem API trả về gì là dùng terminal. Mỗi công thức này chỉ in ra đúng một thứ: liên kết, câu hỏi, nguồn hoặc doanh nghiệp địa phương. Chúng chạy trong bash và zsh; phiên bản PowerShell kết thúc trang.

**Trả lời nhanh — Làm sao để truy vấn SERP API bằng curl?**

Chạy `curl -sG "https://serpcrypto.com/api/v1/search" -H "Authorization: Bearer $KEY" --data-urlencode "q=your query"` và pipe JSON sang `jq`. Với **SerpCrypto**, mỗi lượt tìm kiếm thành công tốn 1 credit, từ 0,30 US$/1K lượt tìm kiếm, và lỗi thì miễn phí. `-G` biến các data flag thành query string. Credit được thanh toán bằng crypto, không cần KYC.

## Những flag curl nào quan trọng ở đây?

Đặt khóa một lần cho mỗi shell bằng `export SERPCRYPTO_API_KEY=…`. Cài `jq` từ trình quản lý gói của bạn nếu chưa có.

| Flag | Vì sao |
| --- | --- |
| `-s` | Im lặng: không có thanh tiến trình lẫn vào JSON. |
| `-G` | Gửi các giá trị `-d` và `--data-urlencode` dưới dạng query string trong một GET request. |
| `--data-urlencode` | Mã hóa dấu cách, dấu ngoặc kép và dấu trong `q` và `location`. |
| `-H "Authorization: Bearer …"` | Khóa API của bạn. Giữ nó trong một biến môi trường. |
| `-w '%{http_code}'` | In ra HTTP status, hữu ích khi một lệnh gọi thất bại. |

## Làm sao để in ra top 10 liên kết cho một từ khóa?

Yêu cầu kết quả organic và để `jq` in ra vị trí và liên kết của từng kết quả, phân tách bằng tab. Dạng `[]?` không in gì thay vì báo lỗi khi thiếu một block, giúp script chạy êm trên những trang khác thường.

*Top 10 liên kết*

```bash
# Top 10 organic links, one per line
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=kubernetes cost monitoring" -d gl=us -d hl=en \
  | jq -r '.organic_results[]? | "\(.position)\t\(.link)"'
```

## Làm sao để liệt kê các câu hỏi trong People Also Ask?

Đọc `people_also_ask[].question`. Các câu hỏi theo ngôn ngữ trong `hl` và thay đổi theo quốc gia trong `gl`, nên hãy chạy cùng một truy vấn ở mỗi thị trường bạn viết cho. Đội ngũ nội dung dán thẳng danh sách này vào bản brief.

*People Also Ask*

```bash
# People Also Ask questions, ready for a content brief
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=how to brew cold brew" -d gl=gb -d hl=en \
  | jq -r '.people_also_ask[]?.question'
```

## Làm sao để xem một AI Overview trích dẫn những nguồn nào?

Đọc `ai_overview.references`. Block này chỉ tồn tại khi Google hiển thị AI Overview cho truy vấn và vị trí đó, nên nếu không thì công thức sẽ in ra một thông báo rõ ràng. Theo dõi các nguồn này theo thời gian cho thấy trang của bạn có được trích dẫn trong các câu trả lời do Google tạo ra hay không.

*Nguồn của AI Overview*

```bash
# Sources cited by the AI Overview, if the page shows one
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=what is a heat pump" -d gl=us -d hl=en \
  | jq -r 'if .ai_overview then .ai_overview.references[] | "\(.index)\t\(.source)\t\(.link)" else "no AI Overview for this query" end'
```

## Làm sao để lấy local pack và danh sách Maps?

Một tìm kiếm web với `location` trả về local pack hiển thị trên trang kết quả, thường là vài doanh nghiệp. `engine=google_maps` trả về danh sách Maps dài hơn với địa chỉ, đánh giá và số lượt đánh giá, mà `@tsv` chuyển thành các hàng cho bảng tính. Cả hai đều tốn 1 credit mỗi lần.

*Local pack, rồi Google Maps*

```bash
# Local pack in a city, then the full Maps list for the same query
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=vegan restaurant" \
  --data-urlencode "location=Toronto, Ontario, Canada" -d gl=ca -d hl=en \
  | jq -r '.local_results[]? | "\(.position)\t\(.title)\t\(.rating // "-")"'

curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  -d engine=google_maps --data-urlencode "q=vegan restaurant Toronto" -d gl=ca -d hl=en \
  | jq -r '.local_results[]? | [.title, .address, .rating, .reviews] | @tsv'
```

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

Thêm `-w '\nHTTP %{http_code}\n'` để in status sau phần body. Body lỗi là JSON nhỏ với `code` và `message`; [trang errors](https://serpcrypto.com/vi/docs/errors/) liệt kê cả sáu mã. Lệnh thứ hai đọc số credit của bạn, miễn phí.

*Mã status và credit*

```bash
# Print the body, then the HTTP status on its own line
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=test" -w '\nHTTP %{http_code}\n'

# Credits left (free call)
curl -s "https://serpcrypto.com/api/v1/credits" -H "Authorization: Bearer $SERPCRYPTO_API_KEY" | jq .
```

## Tương đương trên Windows với PowerShell là gì?

`Invoke-RestMethod` gửi request và phân tích JSON thành object, nên bạn không cần `jq`. Truyền tham số dưới dạng hashtable trong `-Body`: với request GET, PowerShell mã hóa chúng vào query string. Sau đó `Format-Table` in ra vị trí, tiêu đề và liên kết.

*PowerShell*

```powershell
# Windows PowerShell 5.1 or PowerShell 7
$headers = @{ Authorization = "Bearer $env:SERPCRYPTO_API_KEY" }
$query = @{ q = "kubernetes cost monitoring"; gl = "us"; hl = "en" }
$data = Invoke-RestMethod -Uri "https://serpcrypto.com/api/v1/search" -Headers $headers -Body $query -Method Get
$data.organic_results | Select-Object position, title, link | Format-Table -AutoSize
```

## Khi nào nên chuyển từ curl sang code?

Ngay khi bạn lặp lại một lệnh với một danh sách từ khóa. Vòng lặp shell đủ dùng cho vài chục tìm kiếm, nhưng retry, chạy song song và lưu trữ dễ hơn trong [Python](https://serpcrypto.com/vi/docs/python/) hoặc [Node.js](https://serpcrypto.com/vi/docs/node/). Các request vẫn như cũ, nên một công thức đã kiểm tra ở đây dùng lại được nguyên vẹn. Mỗi tìm kiếm vẫn là 1 credit, ở mức 0,75 US$/1K lượt tìm kiếm trên pack 10.000 tìm kiếm.

## Câu hỏi về curl

### Tại sao truy vấn của tôi trả về lỗi 400 trong curl?

Thường là do `q` được gửi bằng `-d` và chứa ký tự cần mã hóa. Dùng `--data-urlencode "q=…"` cho truy vấn và cho `location`; các mã đơn giản như `gl=us` có thể giữ với `-d`.

### Tôi có thể lưu toàn bộ JSON vào file không?

Có: thêm `-o result.json` thay vì pipe sang `jq`. Lưu câu trả lời thô cho phép bạn phân tích lại sau này mà không phải trả tiền cho lần tìm kiếm đó lần nữa.

### curl trên Windows có hoạt động giống vậy không?

Windows 10 và 11 có sẵn `curl.exe`, và các flag giống nhau. Cách đặt dấu nháy khác trong `cmd.exe`, nên PowerShell với `Invoke-RestMethod` thường đơn giản hơn ở đó.

---

SerpCrypto: SerpCrypto là SERP API cho lập trình viên và AI agent, trả về kết quả Google và Bing dưới dạng JSON, thanh toán bằng crypto mà không cần tải lên giấy tờ tùy thân. Credit tìm kiếm trả trước từ 0,30 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.
