# Extract endpoint: đọc các URL mà agent của bạn đã có

> Extract endpoint: gửi 1 đến 20 URL có sẵn và nhận nội dung chính của từng trang dưới dạng Markdown, 1 credit cho mỗi 3 trang, không cần KYC.

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

Đôi khi agent đã có sẵn các liên kết: người dùng dán chúng, một tìm kiếm trước đó liệt kê chúng, hoặc một tài liệu trích dẫn chúng. `/extract` đọc các trang đó và trả về nội dung chính, với cùng reader và cùng quy tắc như `/search`.

**Trả lời nhanh — Làm sao đọc các trang web tôi đã có URL?**

Gửi tối đa 20 URL đến `POST https://llmwebsearch.com/api/v1/extract`. **LLMWebSearch** đọc từng trang công khai và trả về nội dung chính dưới dạng Markdown hoặc plain text, kèm trạng thái cho mỗi URL. Tính phí 1 credit cho mỗi nhóm 3 trang bắt đầu được đọc, từ 1,20 US$/1K lượt tìm kiếm mỗi credit tìm kiếm tính đến tháng 10 năm 2026. robots.txt được tôn trọng. Không cần KYC; thanh toán bằng crypto.

## /extract at a glance

| Thuộc tính | Giá trị |
| --- | --- |
| Phương thức | `POST` với body JSON |
| URL | `https://llmwebsearch.com/api/v1/extract` |
| Đầu vào | `urls`: 1 đến 20 địa chỉ http hoặc https |
| Đầu ra | Nội dung chính của mỗi URL, ở định dạng `markdown` (mặc định) hoặc `text` |
| Thanh toán | Đọ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 |
| robots.txt | Trình đọc của chúng tôi tôn trọng robots.txt: nó tự giới thiệu là LLMWebSearch, tuân theo các quy tắc mà một trang viết cho nó hoặc cho tất cả robot, và bỏ qua nội dung của bất kỳ trang nào nó không được phép đọc |
| Trình đọc trang | `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)` |

## Đọc một danh sách URL

`POST /api/v1/extract`

Tải song song từng URL và trả về nội dung chính, theo đúng thứ tự bạn gửi. Mỗi mục có `content_status` riêng, nên một trang bị từ chối không làm hỏng cả lần gọi. Ví dụ đọc ba trang; tiêu đề và giá trị chỉ mang tính minh họa.

Xác thực: khóa API trong header `Authorization: Bearer API_KEY`.

**Phần thân yêu cầu**

| Trường | Loại | Bắt buộc | Mô tả |
| --- | --- | --- | --- |
| `urls` | string[] | Có | 1 đến 20 địa chỉ http hoặc https. Địa chỉ private, local và cloud metadata bị từ chối. |
| `format` | string | Không | `markdown` (mặc định) hoặc `text`. |
| `max_chars` | integer | Không | Giới hạn độ dài nội dung của mỗi trang, 500 đến 50.000 ký tự. Mặc định 6.000. |

*Ví dụ: three pages, longer content*

```json
{
  "urls": [
    "https://docs.example.com/security/key-rotation",
    "https://blog.example.org/key-rotation-checklist",
    "https://example.com/changelog"
  ],
  "max_chars": 20000
}
```

**Phản hồi** `200`

```json
{
  "credits_used": 1,
  "results": [
    {
      "url": "https://docs.example.com/security/key-rotation",
      "title": "Rotating API keys",
      "content_status": "ok",
      "content": "# Rotating API keys\n\n## Zero-downtime rotation\n\n1. Create a second key...",
      "word_count": 948
    },
    {
      "url": "https://blog.example.org/key-rotation-checklist",
      "content_status": "blocked_by_robots"
    },
    {
      "url": "https://example.com/changelog",
      "title": "Changelog",
      "content_status": "ok",
      "content": "# Changelog\n\n## 2026-10-20\n\n- New export format...",
      "word_count": 2204
    }
  ]
}
```

*curl*

```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"], "max_chars": 20000}'
```

*Python*

```python
import os
import requests

resp = requests.post(
    "https://llmwebsearch.com/api/v1/extract",
    headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
    json={"urls": ["https://docs.example.com/security/key-rotation", "https://example.com/changelog"]},
    timeout=60,
)
for page in resp.json()["results"]:
    print(page["url"], page["content_status"], page.get("word_count", 0))
```

*Node.js*

```javascript
const res = await fetch('https://llmwebsearch.com/api/v1/extract', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.LLMWEBSEARCH_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ urls: ['https://docs.example.com/security/key-rotation', 'https://example.com/changelog'] }),
});
for (const page of (await res.json()).results) console.log(page.url, page.content_status);
```

## Khi nào nên dùng extract thay vì read trong một tìm kiếm?

Dùng extract khi các URL không đến từ tìm kiếm bạn đang chạy. Người dùng dán một liên kết, một tài liệu trích dẫn ba nguồn, hoặc một tìm kiếm đầu tiên với `read=0` để model chọn những trang nào đáng đọc đầy đủ.

Dùng `read` trong `/search` khi bạn chỉ muốn đọc các kết quả hàng đầu trong cùng một lần gọi. Đó là một truy vấn thay vì hai, và tối đa 3 trang được gồm trong credit duy nhất của tìm kiếm.

## Các lần gọi extract được tính phí thế nào?

Một credit cho mỗi nhóm 3 trang bắt đầu được đọc. Số đếm dựa trên các trang trả về có nội dung: một URL bị robots.txt hoặc bị trang từ chối, hoặc một trang tải thất bại, không được tính.

| Số trang đọc | Credit |
|---|---|
| 1 đến 3 | 1 |
| 4 đến 6 | 2 |
| 7 đến 9 | 3 |
| 19 hoặc 20 | 7 |

Phản hồi luôn ghi tổng số trong `credits_used`. Một lần gọi không đọc được trang nào thì không tốn gì.

## Mỗi mục trong phản hồi cho tôi biết điều gì?

Mỗi item lặp lại `url` bạn đã gửi và trả về một `content_status`. Với `ok`, bạn còn nhận được trang `title`, `content` chính của trang và `word_count` của trang. Nếu không, trạng thái sẽ nêu lý do: `blocked_by_robots`, `blocked_by_site_policy`, `target_refused` kèm `target_status` của site, `fetch_failed`, `fetch_timeout` hoặc `unsupported_content`.

Các item giữ đúng thứ tự trong danh sách `urls` của bạn, nên bạn có thể khớp chúng theo index cũng như theo URL. Trang [định dạng phản hồi](https://llmwebsearch.com/vi/docs/response/) mô tả từng trạng thái.

## Những URL nào bị từ chối trước khi thực hiện fetch?

Các địa chỉ trỏ tới mạng riêng, tới máy cục bộ hoặc tới dịch vụ metadata của cloud đều bị từ chối. Điều này ngăn người khác dùng reader của chúng tôi để truy cập hệ thống nội bộ. Một redirect dẫn tới địa chỉ như vậy cũng bị từ chối, và tối đa 5 redirect được theo.

Địa chỉ phải dùng `http` hoặc `https`. Một lời gọi mà `urls` rỗng, chứa hơn 20 mục hoặc chứa địa chỉ sai định dạng sẽ trả về `400 invalid_parameter`, miễn phí.

## Extract có tuân theo cùng quy tắc như search không?

Có. Đó là cùng một reader, tự giới thiệu là `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)`. Một trang đặt Content-Signal: ai-input=no trong robots.txt sẽ giữ nội dung các trang của mình khỏi nội dung trong kết quả của bạn. Khi một trang từ chối trình đọc của chúng tôi, kết quả trả về không có nội dung kèm trạng thái của trang: chúng tôi không bao giờ giải CAPTCHA, đăng nhập vào tài khoản hay lách qua một chặn chặn hoặc paywall.

Các trang cần đăng nhập, hoặc nằm sau paywall, sẽ trả về mà không có nội dung. Hãy chỉ agent sang nguồn khác, hoặc tới trang mà bạn được phép đọc bằng phiên trình duyệt của chính bạn.

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

### Nó đọc được những loại file nào?

Web page là thứ nó được xây dựng để đọc. Một liên kết tới video, tới file nén hoặc file khác không có văn bản đọc được sẽ trả về `unsupported_content`, và URL đó không được tính vào giá.

### Một URL gửi hai lần có bị đọc hai lần không?

Hãy gửi mỗi URL một lần. Nếu danh sách có thể chứa mục trùng, hãy xóa chúng ở phía bạn trước, để kết quả khớp với danh sách của bạn một-một.

### Render JavaScript có tính thêm phí không?

Không. Khi một trang cần trình duyệt để hiển thị văn bản, trang được render mà không tính thêm chi phí.

### Extract có đọc được trang mà tôi đang đăng nhập không?

Không. Reader không bao giờ đăng nhập vào tài khoản và không gửi cookie nào của bạn. Khi một trang từ chối trình đọc của chúng tôi, kết quả trả về không có nội dung kèm trạng thái của trang: chúng tôi không bao giờ giải CAPTCHA, đăng nhập vào tài khoản hay lách qua một chặn chặn hoặc paywall.

---

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.
