KYC 없음 — 신분증도, 셀피도, 서류도 없습니다. 암호화폐로 결제하세요: BTC, USDT, USDC, ETH, SOL, LTC
언어: 한국어
API 키 발급받기

문서 · API 레퍼런스

Read 엔드포인트 레퍼런스: GET 및 POST /read

/read는 공개 페이지 하나를 가져와 본문을 추출하고 Markdown, 일반 텍스트 또는 정리된 HTML로 반환합니다. 이 페이지는 모든 파라미터와 기본값, 비용을 나열합니다.

마지막 업데이트: · 6 분 읽기

빠른 답변

WebReaderAPI read 엔드포인트는 어떤 파라미터를 받나요?

WebReaderAPI의 /read 엔드포인트는 url 파라미터 하나가 필요합니다. 선택 파라미터는 출력 형식(format), 페이지에서 유지할 범위(main_content), 브라우저 실행 여부(render), 링크와 이미지, 읽는 국가, 문자 제한, 타임아웃을 정합니다. 일반 페이지는 1 크레딧, 브라우저 사용 시 2 크레딧이며, 2026년 10월 기준 US$0.07/1K 페이지부터 시작합니다. KYC 없이, 암호화폐로 결제하세요.

/read at a glance

메서드쿼리 파라미터를 붙인 GET, 또는 같은 이름을 사용하는 JSON 본문을 붙인 POST
URLhttps://webreaderapi.com/api/v1/read
필수url: http 또는 https 주소, 최대 2,048자
기본 출력본문의 Markdown
과금1 크레딧 = 브라우저 없이 페이지 1회 읽기, 페이지가 JavaScript를 렌더링하는 데 브라우저가 필요하면 2 크레딧. 실패한 요청이나 사이트의 robots.txt가 거부한 요청은 과금되지 않습니다
국가페이지를 읽는 국가를 선택하면 10 크레딧이 추가됩니다. 이 경우 해당 국가의 주거용 연결을 통해 페이지를 읽기 때문입니다
PDF최대 20 MB, 100페이지까지의 PDF 파일이 Markdown으로 변환되며, 시작된 10페이지 블록당 1 크레딧입니다
크롤러 식별WebReaderAPI/1.0 (+https://webreaderapi.com/bot/)

페이지 하나 읽기 (GET)

GET/api/v1/read

공개 페이지 하나를 가져와 본문을 페이지 메타데이터와 함께 Markdown으로 반환합니다. 파라미터는 URL 인코딩된 쿼리 문자열로 전달합니다. 예제는 블로그 글을 읽습니다. ID, 날짜, 값은 예시입니다.

인증: Authorization: Bearer API_KEY 헤더에 API 키를 넣습니다.

파라미터

이름위치타입필수설명
urlquerystring예읽을 페이지: http 또는 https, 최대 2,048자. 사설, 로컬, 클라우드 메타데이터 주소는 거부됩니다.
formatquerystring아니요markdown(기본값), text(마크업 없는 일반 텍스트) 또는 html(본문의 정리된 HTML)
main_contentqueryboolean아니요true(기본값)은 기사나 본문만 유지하고, false은 메뉴와 푸터를 포함한 전체 페이지를 변환합니다.
renderquerystring아니요auto(기본값)은 원시 HTML의 텍스트가 너무 적을 때만 브라우저를 실행하고, true은 항상, false는 절대 실행하지 않습니다. 렌더링된 페이지는 2 크레딧입니다.
include_linksqueryboolean아니요true은 {url, text}의 links 목록을 추가합니다. 기본값 false.
include_imagesqueryboolean아니요true은 이미지를 Markdown의 ![alt](src)로 유지합니다. 기본값 false.
countryquerystring아니요두 글자 국가 코드(ISO 3166-1 alpha-2). 해당 국가의 주소에서 페이지를 읽으며, 10 크레딧 추가(주거용 연결)입니다.
max_charsqueryinteger아니요이 문자 수에서 출력을 자릅니다. 1,000에서 500,000까지. 모델의 컨텍스트에 맞추는 데 유용합니다.
timeoutqueryinteger아니요사이트를 기다리는 시간(초)으로, 5에서 60 사이입니다. 기본값은 30입니다.
api_keyquerystring아니요Authorization 헤더를 보내지 않는 경우 사용할 키입니다.

응답 200

{
  "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
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
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
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, 동일한 parameter를 JSON body로 보냅니다. URL이 매우 길거나 HTTP 클라이언트가 query string보다 JSON을 더 쉽게 만들 때 POST를 선호하세요. 응답은 GET 형식과 동일합니다.

인증: Authorization: Bearer API_KEY 헤더에 API 키를 넣습니다.

요청 본문

필드타입필수설명
urlstring예읽을 페이지입니다.
format, main_content, render, include_links, include_images, country, max_chars, timeoutmixed아니요위의 GET 표와 같으며, JSON 타입을 따릅니다: boolean은 true/false, 숫자는 따옴표 없이 표기합니다.
예시: a JavaScript-heavy page, read from Germany, with its links
{
  "url": "https://example.com/app/pricing",
  "render": "true",
  "country": "de",
  "include_links": true,
  "max_chars": 30000
}

응답 200

{
  "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
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
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
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 format을 선택해야 하나요?

언어 모델과 RAG에는 markdown를 선택하세요: 제목, 목록, 표, 링크가 유지되고 텍스트가 간결하게 남습니다. 단어 수를 세거나 분류, 검색만 하고 마크업이 방해가 될 때는 text를 선택하세요. 자체 pipeline이 이미 HTML을 파싱하고 잡음만 제거하고 싶을 때는 html를 선택하세요.

메타데이터 field는 세 형식 모두 동일합니다. content field의 이름만 markdown, text 또는 html로 바뀝니다.

main_content를 false로 설정해야 하는 경우는 언제인가요?

기사 주변 부분이 필요할 때 false으로 설정하세요. 예를 들어 사이트의 섹션을 파악하기 위한 내비게이션, 법적 정보나 연락처가 있는 footer, 또는 사양이 사이드바에 있는 제품 페이지 등입니다.

기본값 true의 경우, extractor는 주요 콘텐츠 블록을 유지하고 내비게이션, 쿠키 배너, 광고, 공유 버튼, footer를 제거합니다. 대부분의 agent와 RAG pipeline이 원하는 방식이며, 페이지를 HTML 크기의 일부로 줄여주는 경우가 많습니다.

render=auto는 어떻게 브라우저 사용을 결정하나요?

먼저 raw HTML을 가져오며, 이는 빠르고 1 크레딧이 듭니다. 해당 HTML에 읽을 수 있는 텍스트가 너무 적으면(일반적으로 JavaScript로 페이지를 구성하는 앱), 헤드리스 브라우저에서 페이지를 다시 로드하며 이 호출은 2 크레딧이 듭니다. 응답은 어떤 경로가 실행되었는지 알려줍니다: rendered은 true 또는 false입니다.

사이트가 완전한 HTML을 제공한다는 것을 알고 고정 비용을 원할 때는 render=false으로 설정하세요. 단일 페이지 앱의 경우 첫 시도를 건너뛰려면 render=true로 설정하세요.

country와 max_chars는 무엇을 바꾸나요?

country은 지정한 국가의 주소에서 동일한 User-Agent로 페이지를 읽습니다. 가격, 언어, 제공 여부가 국가별로 달라지는 페이지에 사용하세요. 주거용 연결로 페이지를 읽기 때문에 10 크레딧이 추가되며, 서비스가 운영되지 않는 국가에서는 사용할 수 없습니다.

max_chars은 해당 문자 수 이후 출력을 자릅니다. 가격은 바뀌지 않지만, agent의 context window를 보호합니다: 모델에 전달하는 단일 페이지에는 20,000자가 합리적인 기본값입니다.

/read는 PDF 파일을 처리할 수 있나요?

네. URL이 PDF를 반환하면 텍스트가 동일한 markdown field에 Markdown으로 반환됩니다. 최대 20 MB, 100페이지까지의 PDF 파일이 Markdown으로 변환되며, 시작된 10페이지 블록당 1 크레딧입니다. 텍스트 레이어가 없는 스캔된 PDF는 문자 인식 단계가 없기 때문에 텍스트가 거의 또는 전혀 반환되지 않습니다.

Read endpoint: 자주 묻는 질문

/read는 redirect를 따르나요?

네, 최대 5회까지 따릅니다. 응답은 요청한 주소를 url에, 실제로 읽은 주소를 final_url에 제공합니다. 비공개 또는 로컬 주소로의 redirect는 거부됩니다.

로그인이 필요한 페이지를 읽을 수 있나요?

아니요. 사이트가 우리 요청을 거부하면 그 응답을 그대로 반환합니다. 우리는 CAPTCHA를 풀거나, 계정에 로그인하거나, 차단이나 페이월을 우회하려 시도하지 않습니다. 로그인이나 paywall 뒤의 페이지는 사이트의 거부 응답을 반환하며, 이 호출은 무료입니다.

robots.txt 확인은 매 호출마다 이루어지나요?

네, 최대 24시간 된 사이트의 robots.txt 사본을 기준으로 확인합니다. 허용되지 않은 URL은 403 blocked_by_robots을 반환하고 크레딧을 사용하지 않습니다.

동시에 몇 개의 페이지를 읽을 수 있나요?

모든 계정에는 동시에 읽는 페이지 수에 대한 한도가 있으며, 대시보드에 표시됩니다. 지원팀이 이를 높일 수 있습니다. 많은 URL의 경우 batch job이 많은 병렬 호출을 실행하는 것보다 간단합니다.

US$0.07/1K 페이지부터 · KYC 없이

API 키 발급받기