Hızlı yanıt
WebReaderAPI read endpoint'i hangi parametreleri alır?
WebReaderAPI'nin /read endpoint'i tek bir parametre gerektirir, url. İsteğe bağlı olanlar çıktıyı (format), sayfanın ne kadarının tutulacağını (main_content), tarayıcının çalışıp çalışmayacağını (render), bağlantıları ve görselleri, okuma ülkesini, bir karakter sınırını ve bir timeout değerini seçer. Düz bir sayfa 1 kredi, tarayıcıyla 2 kredi; Ekim 2026 itibarıyla $0,07/1K sayfa fiyatından. KYC yok; kripto ile ödeme yapın.
/read at a glance
| Metotlar | Sorgu parametreleriyle GET, veya aynı adları kullanan bir JSON gövdesiyle POST |
|---|---|
| URL | https://webreaderapi.com/api/v1/read |
| Zorunlu | url: bir http veya https adresi, en fazla 2.048 karakter |
| Varsayılan çıktı | Ana içeriğin Markdown'ı |
| Faturalandırma | 1 kredi = tarayıcı olmadan 1 sayfa okuma; sayfa JavaScript render etmek için tarayıcı gerektiriyorsa 2 kredi. Başarısız olan veya bir sitenin robots.txt'inin reddettiği istek için ücret alınmaz |
| Ülke | Sayfanın okunacağı ülkeyi seçmek 10 kredi ekler, çünkü sayfa o ülkedeki bir konut bağlantısı üzerinden okunur |
| 20 MB ve 100 sayfaya kadar PDF dosyaları, başlayan her 10 sayfalık blok için 1 kredi ile Markdown'a dönüştürülür | |
| Tarayıcı kimliği | WebReaderAPI/1.0 (+https://webreaderapi.com/bot/) |
Bir sayfa oku (GET)
GET/api/v1/read
Tek bir herkese açık sayfayı getirir ve ana içeriğini sayfanın metadata'sıyla birlikte Markdown olarak döndürür. Parametreler sorgu dizesine URL-encoded olarak gider. Örnek bir blog yazısını okur; ID'ler, tarihler ve değerler örneklidir.
Kimlik doğrulama: Authorization: Bearer API_KEY header'ında API anahtarı.
Parametreler
| Ad | Konum | Tür | Zorunlu | Açıklama |
|---|---|---|---|---|
url | query | string | Evet | Okunacak sayfa: http veya https, en fazla 2.048 karakter. Özel, yerel ve bulut metadata adresleri reddedilir. |
format | query | string | Hayır | markdown (varsayılan), text (düz metin, işaretleme yok) veya html (içeriğin temizlenmiş HTML'i). |
main_content | query | boolean | Hayır | true (varsayılan) yalnızca makaleyi veya ana içeriği tutar; false menüler ve footer dahil tüm sayfayı dönüştürür. |
render | query | string | Hayır | auto (varsayılan) tarayıcıyı yalnızca ham HTML çok az metin içerdiğinde başlatır; true her zaman; false hiçbir zaman. Render edilen bir sayfa 2 kredi maliyetlidir. |
include_links | query | boolean | Hayır | true bir links listesi ekler: {url, text}. Varsayılan false. |
include_images | query | boolean | Hayır | true görselleri Markdown'da  olarak tutar. Varsayılan false. |
country | query | string | Hayır | İki harfli ülke kodu (ISO 3166-1 alpha-2). Sayfa o ülkedeki bir adresten okunur, 10 ek kredi karşılığında (residential bağlantı). |
max_chars | query | integer | Hayır | Çıktıyı bu karakter sayısında keser, 1.000 ile 500.000 arasında. Bir modelin context'ine sığdırmak için kullanışlıdır. |
timeout | query | integer | Hayır | Site için beklenecek saniye, 5 ile 60 arası. Varsayılan 30. |
api_key | query | string | Hayır | Authorization başlığını göndermezseniz anahtarınız. |
Yanıt 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
}Kod örnekleri
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=20000import 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])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));Tek sayfa oku (POST)
POST/api/v1/read
Aynı endpoint, aynı parametreler, JSON gövdesi olarak gönderilir. URL çok uzunsa veya HTTP istemciniz JSON'u sorgu dizelerinden daha kolay oluşturuyorsa POST'u tercih edin. Yanıt, GET biçimiyle aynıdır.
Kimlik doğrulama: Authorization: Bearer API_KEY header'ında API anahtarı.
İstek gövdesi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
url | string | Evet | Okunacak sayfa. |
format, main_content, render, include_links, include_images, country, max_chars, timeout | mixed | Hayır | Yukarıdaki GET tablosundaki gibi, JSON türleriyle: boolean'lar true/false, sayılar tırnaksız. |
{
"url": "https://example.com/app/pricing",
"render": "true",
"country": "de",
"include_links": true,
"max_chars": 30000
}Yanıt 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"
}
]
}Kod örnekleri
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}'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")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);Hangi çıktı formatını seçmeliyim?
Dil modelleri ve RAG için markdown seçin: başlıklar, listeler, tablolar ve bağlantılar korunur, metin kompakt kalır. Yalnızca kelime sayacak, sınıflandıracak veya arama yapacaksanız ve işaretleme gürültü olacaksa text seçin. Kendi pipeline'ınız zaten HTML'i ayrıştırıyorsa ve sadece fazlalıkların gitmesini istiyorsanız html seçin.
Meta veri alanları üç formatta da aynıdır. Yalnızca içerik alanının adı değişir: markdown, text veya html.
main_content ne zaman false olarak ayarlanmalı?
Makalenin çevresindeki kısımlar ihtiyacınız olan şeyse false olarak ayarlayın. Örnekler: bir sitenin bölümlerini haritalamak için gezinme menüsü, yasal veya iletişim bilgilerini içeren bir alt bilgi ya da özellikleri kenar çubuğunda duran bir ürün sayfası.
Varsayılan true ile çıkarıcı ana içerik bloğunu korur; gezinme, çerez bildirimleri, reklamlar, paylaş düğmeleri ve alt bilgileri atar. Çoğu agent ve RAG pipeline'ının istediği budur ve genellikle bir sayfayı HTML boyutunun küçük bir kısmına indirir.
render=auto tarayıcı kullanmaya nasıl karar verir?
Önce ham HTML'i getirir; bu hızlıdır ve 1 kredi tutar. Bu HTML çok az okunabilir metin içeriyorsa, tipik olarak sayfayı JavaScript ile oluşturan bir uygulamaysa, sayfayı yeniden headless tarayıcıda yükler ve çağrı 2 kredi tutar. Yanıt hangi yolun çalıştığını söyler: rendered, true veya false değerindedir.
Site tam HTML sunuyorsa ve sabit maliyet istiyorsanız render=false ayarlayın. Tek sayfa uygulamaları için ilk denemeyi atlamak üzere render=true ayarlayın.
country ve max_chars neyi değiştirir?
country, sayfayı belirttiğiniz ülkedeki bir adresten, aynı User-Agent ile okur. Fiyatları, dili veya kullanılabilirliği ülkeye göre değişen sayfalar için kullanın. Sayfa bu durumda konut bağlantısı üzerinden okunduğu için 10 kredi ekler ve hizmetin faaliyet göstermediği ülkelerde kullanılamaz.
max_chars, çıktıyı belirtilen karakter sayısından sonra keser. Fiyatı değiştirmez ama bir agent'ın bağlam penceresini korur: bir modele verilen tek bir sayfa için 20.000 karakter makul bir varsayılandır.
/read PDF dosyalarını işleyebilir mi?
Evet. URL bir PDF döndürdüğünde metin, aynı markdown alanında Markdown olarak gelir. 20 MB ve 100 sayfaya kadar PDF dosyaları, başlayan her 10 sayfalık blok için 1 kredi ile Markdown'a dönüştürülür. Metin katmanı olmayan taranmış PDF'ler çok az veya hiç metin döndürmez, çünkü karakter tanıma adımı yoktur.
Read endpoint: sık sorulan sorular
/read yönlendirmeleri takip eder mi?
Evet, en fazla 5 tanesini. Yanıt, istediğiniz adresi url ve gerçekten okunan adresi final_url içinde verir. Özel veya yerel bir adrese yönlendirme reddedilir.
Giriş gerektiren bir sayfayı okuyabilir miyim?
Hayır. Bir site isteğimizi reddederse, verdiği yanıtı döndürürüz: CAPTCHA'ları asla çözmeyiz, hesaplara giriş yapmayız veya bir engeli ya da ödeme duvarını aşmaya çalışmayız. Giriş veya ödeme duvarı arkasındaki sayfalar sitenin reddini döndürür ve çağrı ücretsizdir.
robots.txt kontrolü her çağrıda yapılır mı?
Evet, sitenin en fazla 24 saatlik robots.txt kopyasına karşı yapılır. İzin verilmeyen bir URL 403 blocked_by_robots döndürür ve kredi kullanmaz.
Aynı anda kaç sayfa okuyabilirim?
Her hesabın aynı anda okuyabileceği sayfa sayısına bir limit vardır; paneliniz bunu gösterir ve destek ekibi bunu yükseltebilir. Çok sayıda URL için bir toplu iş, çok sayıda paralel çağrı çalıştırmaktan daha basittir.