# อ่านเอกสารอ้างอิง endpoint: GET และ POST /read

> อ่านเอกสารอ้างอิง endpoint: ทุก parameter ของ GET และ POST /read ตั้งแต่ format และ render ถึง country และ max_chars พร้อมตัวอย่าง จาก US$0.07/1K หน้า

- URL: https://webreaderapi.com/th/docs/read/
- อัปเดตล่าสุด: 2026-10-22
- ผู้เผยแพร่: WebReaderAPI (https://webreaderapi.com)

`/read` ดึงหน้าเว็บสาธารณะหนึ่งหน้า ดึงเนื้อหาหลักและส่งคืนเป็น Markdown, ข้อความล้วน หรือ HTML ที่ทำความสะอาดแล้ว หน้านี้แสดงรายการทุก parameter ค่าเริ่มต้น และค่าใช้จ่าย

**คำตอบสั้น — WebReaderAPI read endpoint รับ parameter อะไรบ้าง**

endpoint `/read` ของ **WebReaderAPI** ต้องมี parameter หนึ่งตัวคือ `url` ส่วนตัวเลือกกำหนดรูปแบบผลลัพธ์ (`format`) จำนวนเนื้อหาที่เก็บ (`main_content`) ว่าจะรันเบราว์เซอร์หรือไม่ (`render`) ลิงก์และรูปภาพ ประเทศที่อ่าน ขีดจำกัดตัวอักษร และ timeout หน้าธรรมดาราคา 1 เครดิต 2 เครดิตหากใช้เบราว์เซอร์ เริ่มที่ US$0.07/1K หน้า ณ ตุลาคม 2026 ไม่ต้อง KYC จ่ายด้วยคริปโต

## /read at a glance

| คุณสมบัติ | ค่า |
| --- | --- |
| Method | `GET` พร้อม query parameter หรือ `POST` พร้อม JSON body ที่ใช้ชื่อเดียวกัน |
| URL | `https://webreaderapi.com/api/v1/read` |
| จำเป็น | `url`: ที่อยู่ http หรือ https ยาวสูงสุด 2,048 ตัวอักษร |
| รูปแบบผลลัพธ์เริ่มต้น | Markdown ของเนื้อหาหลัก |
| การเรียกเก็บเงิน | 1 เครดิต = อ่าน 1 หน้าโดยไม่ใช้เบราว์เซอร์; 2 เครดิตเมื่อหน้านั้นต้องใช้เบราว์เซอร์เพื่อเรนเดอร์ JavaScript คำขอที่ล้มเหลว หรือที่ robots.txt ของเว็บไซต์ปฏิเสธ จะไม่ถูกคิดเครดิต |
| ประเทศ | การเลือกประเทศที่จะอ่านหน้าจาก จะเพิ่ม 10 เครดิต เพราะหน้าจะถูกอ่านผ่านการเชื่อมต่อแบบ residential ในประเทศนั้น |
| PDF | ไฟล์ PDF ขนาดไม่เกิน 20 MB และไม่เกิน 100 หน้า จะถูกแปลงเป็น Markdown ในอัตรา 1 เครดิตต่อทุก 10 หน้าที่เริ่มต้น |
| ข้อมูลระบุตัวตน crawler | `WebReaderAPI/1.0 (+https://webreaderapi.com/bot/)` |

## อ่านหนึ่งหน้า (GET)

`GET /api/v1/read`

ดึงหน้าเว็บสาธารณะหนึ่งหน้าและส่งคืนเนื้อหาหลักเป็น Markdown พร้อม metadata ของหน้า parameter อยู่ใน query string แบบ URL-encoded ตัวอย่างนี้อ่านโพสต์บล็อก ID วันที่ และค่าเป็นเพียงตัวอย่าง

การยืนยันตัวตน: API key ใน header `Authorization: Bearer API_KEY`

**พารามิเตอร์**

| ชื่อ | ตำแหน่ง (In) | ประเภท | จำเป็น | คำอธิบาย |
| --- | --- | --- | --- | --- |
| `url` | query | string | ใช่ | หน้าที่จะอ่าน: http หรือ https ยาวไม่เกิน 2,048 ตัวอักษร ที่อยู่ private, local และ cloud metadata จะถูกปฏิเสธ |
| `format` | query | string | ไม่ใช่ | `markdown` (ค่าเริ่มต้น), `text` (ข้อความล้วน ไม่มี markup) หรือ `html` (HTML ที่ทำความสะอาดแล้วของเนื้อหา) |
| `main_content` | query | boolean | ไม่ใช่ | `true` (ค่าเริ่มต้น) เก็บเฉพาะบทความหรือเนื้อหาหลัก; `false` แปลงทั้งหน้า รวมถึงเมนูและ footer |
| `render` | query | string | ไม่ใช่ | `auto` (ค่าเริ่มต้น) เริ่มเบราว์เซอร์เฉพาะเมื่อ HTML ดิบมีข้อความน้อยเกินไป; `true` ทุกครั้ง; `false` ไม่เลย หน้าที่ render แล้วมีค่าใช้จ่าย 2 เครดิต |
| `include_links` | query | boolean | ไม่ใช่ | `true` เพิ่มรายการ `links` ของ `{url, text}` ค่าเริ่มต้น `false` |
| `include_images` | query | boolean | ไม่ใช่ | `true` เก็บรูปภาพเป็น `![alt](src)` ใน Markdown ค่าเริ่มต้น `false` |
| `country` | query | string | ไม่ใช่ | รหัสประเทศสองตัวอักษร (ISO 3166-1 alpha-2) หน้าจะถูกอ่านจากที่อยู่ในประเทศนั้น เพิ่ม 10 เครดิต (การเชื่อมต่อ residential) |
| `max_chars` | query | integer | ไม่ใช่ | ตัดผลลัพธ์ที่จำนวนตัวอักษรนี้ ตั้งแต่ 1,000 ถึง 500,000 มีประโยชน์เพื่อให้พอดีกับ context ของโมเดล |
| `timeout` | query | integer | ไม่ใช่ | รอเว็บไซต์เป็นเวลาไม่กี่วินาที ตั้งแต่ 5 ถึง 60 ค่าเริ่มต้น 30 |
| `api_key` | query | string | ไม่ใช่ | API key ของคุณ หากคุณไม่ได้ส่ง header `Authorization` |

**Response** `200`

```json
{
  "url": "https://example.com/blog/first-post",
  "final_url": "https://example.com/blog/first-post",
  "status_code": 200,
  "fetched_at": "2026-10-22T09:41:12Z",
  "rendered": false,
  "credits_used": 1,
  "title": "Our first post",
  "description": "Why we started this blog and what comes next.",
  "language": "en",
  "author": "Jane Doe",
  "published_at": "2026-10-01",
  "site_name": "Example Blog",
  "markdown": "# Our first post\n\nWe started this blog to share what we learn...\n\n## What comes next\n\n- A post every month\n- Notes from our team",
  "word_count": 612
}
```

*curl*

```bash
curl -sG "https://webreaderapi.com/api/v1/read" \
  -H "Authorization: Bearer $WEBREADER_API_KEY" \
  --data-urlencode "url=https://example.com/blog/first-post" \
  -d format=markdown -d max_chars=20000
```

*Python*

```python
import os
import requests

resp = requests.get(
    "https://webreaderapi.com/api/v1/read",
    headers={"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]},
    params={"url": "https://example.com/blog/first-post", "max_chars": 20000},
    timeout=70,
)
resp.raise_for_status()
print(resp.json()["markdown"][:300])
```

*Node.js*

```javascript
const params = new URLSearchParams({ url: 'https://example.com/blog/first-post', max_chars: '20000' });
const res = await fetch(`https://webreaderapi.com/api/v1/read?${params}`, {
  headers: { Authorization: `Bearer ${process.env.WEBREADER_API_KEY}` },
});
const page = await res.json();
console.log(page.markdown.slice(0, 300));
```

## อ่านหนึ่งหน้า (POST)

`POST /api/v1/read`

endpoint เดียวกัน พารามิเตอร์เดียวกัน ส่งเป็น JSON body ใช้ POST เมื่อ URL ยาวมาก หรือเมื่อ HTTP client ของคุณสร้าง JSON ได้ง่ายกว่า query string การตอบกลับเหมือนกับรูปแบบ GET ทุกประการ

การยืนยันตัวตน: API key ใน header `Authorization: Bearer API_KEY`

**Request body**

| ฟิลด์ | ประเภท | จำเป็น | คำอธิบาย |
| --- | --- | --- | --- |
| `url` | string | ใช่ | หน้าที่จะอ่าน |
| `format`, `main_content`, `render`, `include_links`, `include_images`, `country`, `max_chars`, `timeout` | mixed | ไม่ใช่ | เช่นเดียวกับตาราง GET ด้านบน ด้วยชนิดข้อมูล JSON: boolean เป็น `true`/`false` ตัวเลขไม่ต้องใส่เครื่องหมายคำพูด |

*ตัวอย่าง: a JavaScript-heavy page, read from Germany, with its links*

```json
{
  "url": "https://example.com/app/pricing",
  "render": "true",
  "country": "de",
  "include_links": true,
  "max_chars": 30000
}
```

**Response** `200`

```json
{
  "url": "https://example.com/app/pricing",
  "final_url": "https://example.com/de/app/pricing",
  "status_code": 200,
  "fetched_at": "2026-10-22T09:44:03Z",
  "rendered": true,
  "credits_used": 3,
  "title": "Pricing",
  "language": "de",
  "markdown": "# Pricing\n\n| Plan | Price |\n|---|---|\n| Basic | ... |",
  "word_count": 214,
  "links": [
    {
      "url": "https://example.com/de/contact",
      "text": "Contact"
    }
  ]
}
```

*curl*

```bash
curl -s "https://webreaderapi.com/api/v1/read" \
  -H "Authorization: Bearer $WEBREADER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/app/pricing", "render": "true", "country": "de", "include_links": true}'
```

*Python*

```python
import os
import requests

resp = requests.post(
    "https://webreaderapi.com/api/v1/read",
    headers={"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]},
    json={"url": "https://example.com/app/pricing", "render": "true", "country": "de", "include_links": True},
    timeout=70,
)
print(resp.json()["credits_used"], "credits")
```

*Node.js*

```javascript
const res = await fetch('https://webreaderapi.com/api/v1/read', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.WEBREADER_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ url: 'https://example.com/app/pricing', render: 'true', country: 'de', include_links: true }),
});
console.log((await res.json()).credits_used);
```

## ฉันควรเลือกรูปแบบ output แบบไหน?

เลือก `markdown` สำหรับ language model และ RAG: หัวข้อ รายการ ตาราง และลิงก์ยังคงอยู่ และข้อความยังกระชับ เลือก `text` เมื่อคุณเพียงนับคำ จำแนกประเภท หรือค้นหา และ markup จะเป็นเพียงสัญญาณรบกวน เลือก `html` เมื่อ pipeline ของคุณเองแยกวิเคราะห์ HTML อยู่แล้ว และคุณต้องการเพียงกำจัดความรกออก

ฟิลด์ metadata เหมือนกันในทั้งสามรูปแบบ เฉพาะชื่อฟิลด์เนื้อหาเท่านั้นที่เปลี่ยน: `markdown`, `text` หรือ `html`

## ฉันควรตั้ง main_content เป็น false เมื่อใด?

ตั้งเป็น `false` เมื่อส่วนต่างๆ รอบบทความคือสิ่งที่คุณต้องการ ตัวอย่างเช่น navigation ของเว็บไซต์เพื่อทำแผนที่ส่วนต่างๆ footer ที่มีข้อมูลทางกฎหมายหรือข้อมูลติดต่อ หรือหน้า product ที่ข้อมูลสเปกอยู่ใน sidebar

ด้วยค่าเริ่มต้น `true` ตัวดึงเนื้อหาจะเก็บบล็อกเนื้อหาหลักและตัด navigation, cookie banner, โฆษณา, ปุ่มแชร์ และ footer ออก นั่นคือสิ่งที่ agent และ RAG pipeline ส่วนใหญ่ต้องการ และมักลดหน้าเว็บให้เหลือเพียงเศษเสี้ยวของขนาด HTML

## render=auto ตัดสินใจใช้เบราว์เซอร์อย่างไร?

ขั้นแรกจะดึง HTML ดิบ ซึ่งรวดเร็วและใช้ 1 เครดิต หาก HTML นั้นมีข้อความที่อ่านได้น้อยเกินไป โดยทั่วไปคือแอปที่สร้างหน้าด้วย JavaScript มันจะโหลดหน้าอีกครั้งในเบราว์เซอร์แบบ headless และการเรียกจะใช้ 2 เครดิต การตอบกลับจะบอกคุณว่าเส้นทางใดทำงาน: `rendered` คือ `true` หรือ `false`

ตั้ง `render=false` เมื่อคุณรู้ว่าเว็บไซต์ให้ HTML ครบถ้วนและต้องการต้นทุนคงที่ ตั้ง `render=true` สำหรับ single-page app เพื่อข้ามการพยายามครั้งแรก

## country และ max_chars เปลี่ยนอะไร?

`country` อ่านหน้าจากที่อยู่ในประเทศที่คุณระบุ ด้วย User-Agent เดียวกัน ใช้สำหรับหน้าที่ราคา ภาษา หรือการพร้อมให้บริการเปลี่ยนตามประเทศ มีค่าใช้จ่ายเพิ่ม 10 เครดิต เนื่องจากหน้าจะถูกอ่านผ่านการเชื่อมต่อ residential และไม่สามารถใช้กับประเทศที่บริการไม่ดำเนินการได้

`max_chars` ตัด output หลังจากจำนวนตัวอักษรนั้น ไม่เปลี่ยนราคา แต่ช่วยปกป้อง context window ของ agent: 20,000 ตัวอักษรเป็นค่าเริ่มต้นที่เหมาะสมสำหรับหน้าเดียวที่ส่งให้โมเดล

## /read รองรับไฟล์ PDF ได้ไหม?

ได้ เมื่อ URL ส่งคืน PDF ข้อความจะกลับมาเป็น Markdown ในฟิลด์ `markdown` เดียวกัน ไฟล์ PDF ขนาดไม่เกิน 20 MB และไม่เกิน 100 หน้า จะถูกแปลงเป็น Markdown ในอัตรา 1 เครดิตต่อทุก 10 หน้าที่เริ่มต้น PDF ที่สแกนโดยไม่มีชั้นข้อความจะส่งคืนข้อความน้อยหรือไม่มีเลย เนื่องจากไม่มีขั้นตอนการรู้จำอักขระ

## Read endpoint: คำถามที่พบบ่อย

### /read ติดตาม redirect หรือไม่?

ใช่ สูงสุด 5 ครั้ง การตอบกลับให้ที่อยู่ที่คุณขอใน `url` และที่อยู่ที่อ่านจริงใน `final_url` redirect ไปยังที่อยู่ส่วนตัวหรือภายในจะถูกปฏิเสธ

### ฉันสามารถอ่านหน้าที่ต้องเข้าสู่ระบบได้ไหม?

ไม่ได้ หากเว็บไซต์ปฏิเสธคำขอของเรา เราจะส่งคำตอบของเว็บนั้นกลับไป: เราไม่แก้ CAPTCHA ไม่เข้าสู่ระบบบัญชี และไม่พยายามหลบเลี่ยงการบล็อกหรือ paywall หน้าที่อยู่หลังการเข้าสู่ระบบหรือ paywall จะส่งคืนการปฏิเสธของเว็บไซต์ และการเรียกนั้นฟรี

### ตรวจสอบ robots.txt ทุกครั้งที่เรียกหรือไม่?

ใช่ เทียบกับสำเนา robots.txt ของเว็บไซต์ที่มีอายุไม่เกิน 24 ชั่วโมง URL ที่ไม่อนุญาตจะส่งคืน `403 blocked_by_robots` และไม่ใช้เครดิต

### ฉันสามารถอ่านได้กี่หน้าพร้อมกัน?

ทุกบัญชีมีขีดจำกัดจำนวนหน้าที่อ่านพร้อมกัน แดชบอร์ดแสดงให้เห็น และฝ่ายสนับสนุนสามารถเพิ่มให้ได้ สำหรับหลาย URL [batch job](https://webreaderapi.com/th/docs/crawl/) ง่ายกว่าการเรียกแบบขนานจำนวนมาก

---

WebReaderAPI: WebReaderAPI คือ API อ่านหน้าเว็บสำหรับ AI agent ที่แปลงหน้าเว็บสาธารณะใด ๆ เป็น Markdown สะอาด จ่ายด้วยคริปโตโดยไม่ต้องอัปโหลดบัตรประชาชน เครดิตแบบเติมเงินเริ่มต้นที่ US$0.07/1K หน้า ไม่มีวันหมดอายุ และเคารพ robots.txt ไม่ต้อง KYC — ไม่ต้องใช้บัตรประชาชน ไม่ต้องเซลฟี่ ไม่ต้องเอกสาร จ่ายด้วยคริปโต
