Sem KYC — sem documento, sem selfie, sem envio de arquivos. Pague com cripto: BTC, USDT, USDC, ETH, SOL, LTC
Idioma: Português
Obtenha uma chave de API

Docs · Referência da API

Referência do endpoint de leitura: GET e POST /read

/read busca uma página pública, extrai o conteúdo principal e devolve como Markdown, texto simples ou HTML limpo. Esta página lista cada parâmetro, seu padrão e quanto custa.

Última atualização: · 7 min de leitura

Resposta rápida

Quais parâmetros o endpoint de leitura do WebReaderAPI aceita?

O endpoint /read do WebReaderAPI precisa de um parâmetro, url. Os opcionais escolhem a saída (format), quanto da página manter (main_content), se um navegador roda (render), links e imagens, o país de leitura, um limite de caracteres e um timeout. Uma página simples custa 1 crédito, 2 com navegador, a partir de US$ 0,07/1K páginas em outubro de 2026. Sem KYC; pague com cripto.

/read at a glance

MétodosGET com parâmetros de consulta, ou POST com um corpo JSON usando os mesmos nomes
URLhttps://webreaderapi.com/api/v1/read
Obrigatóriourl: um endereço http ou https, de até 2.048 caracteres
Saída padrãoMarkdown do conteúdo principal
Cobrança1 crédito = 1 página lida sem navegador; 2 créditos quando a página precisa de um navegador para renderizar JavaScript. Uma requisição que falha, ou que o robots.txt de um site recusa, não é cobrada
PaísEscolher o país de onde a página é lida adiciona 10 créditos, porque a página passa a ser lida por uma conexão residencial naquele país
PDFArquivos PDF de até 20 MB e 100 páginas são convertidos em Markdown, a 1 crédito por bloco iniciado de 10 páginas
Identidade do crawlerWebReaderAPI/1.0 (+https://webreaderapi.com/bot/)

Ler uma página (GET)

GET/api/v1/read

Busca uma página pública e devolve seu conteúdo principal como Markdown, com os metadados da página. Os parâmetros vão na query string, codificados em URL. O exemplo lê um post de blog; IDs, datas e valores são ilustrativos.

Autenticação: chave de API no header Authorization: Bearer API_KEY.

Parâmetros

NomeEmTipoObrigatórioDescrição
urlquerystringSimA página a ler: http ou https, no máximo 2.048 caracteres. Endereços privados, locais e de metadados de nuvem são recusados.
formatquerystringNãomarkdown (padrão), text (texto simples, sem marcação) ou html (HTML limpo do conteúdo).
main_contentquerybooleanNãotrue (padrão) mantém só o artigo ou conteúdo principal; false converte a página inteira, menus e rodapé incluídos.
renderquerystringNãoauto (padrão) inicia um navegador só quando o HTML bruto tem texto de menos; true sempre; false nunca. Uma página renderizada custa 2 créditos.
include_linksquerybooleanNãotrue adiciona uma lista links de {url, text}. Padrão false.
include_imagesquerybooleanNãotrue mantém as imagens como ![alt](src) no Markdown. Padrão false.
countryquerystringNãoCódigo de país de duas letras (ISO 3166-1 alpha-2). A página é lida a partir de um endereço nesse país, por 10 créditos extras (conexão residencial).
max_charsqueryintegerNãoCorta a saída neste número de caracteres, de 1.000 a 500.000. Útil para caber no contexto de um modelo.
timeoutqueryintegerNãoSegundos de espera pelo site, de 5 a 60. Padrão 30.
api_keyquerystringNãoSua chave, caso você não envie o header Authorization.

Resposta 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
}

Exemplos de código

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));

Ler uma página (POST)

POST/api/v1/read

Mesmo endpoint, mesmos parâmetros, enviados como body JSON. Prefira POST quando a URL for muito longa ou quando seu cliente HTTP montar JSON com mais facilidade do que query strings. A resposta é idêntica à da forma GET.

Autenticação: chave de API no header Authorization: Bearer API_KEY.

Corpo da requisição

CampoTipoObrigatórioDescrição
urlstringSimA página a ser lida.
format, main_content, render, include_links, include_images, country, max_chars, timeoutmixedNãoComo na tabela GET acima, com tipos JSON: booleanos como true/false, números sem aspas.
Exemplo: 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
}

Resposta 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"
    }
  ]
}

Exemplos de código

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);

Qual formato de saída devo escolher?

Escolha markdown para modelos de linguagem e RAG: títulos, listas, tabelas e links sobrevivem, e o texto fica compacto. Escolha text quando você só conta palavras, classifica ou pesquisa, e a marcação seria ruído. Escolha html quando seu próprio pipeline já interpreta HTML e você só quer remover o excesso.

Os campos de metadados são os mesmos nos três formatos. Só muda o nome do campo de conteúdo: markdown, text ou html.

Quando devo definir main_content como false?

Defina como false quando o que você precisa são as partes ao redor do artigo. Exemplos são a navegação de um site para mapear suas seções, um rodapé com dados legais ou de contato, ou uma página de produto cujas especificações ficam em uma barra lateral.

Com o padrão true, o extrator mantém o bloco de conteúdo principal e descarta navegação, banners de cookies, anúncios, botões de compartilhamento e rodapés. É o que a maioria dos agentes e pipelines de RAG quer, e muitas vezes reduz uma página a uma fração do tamanho do HTML.

Como o render=auto decide usar um navegador?

Primeiro ele busca o HTML bruto, o que é rápido e custa 1 crédito. Se esse HTML tiver pouco texto legível, tipicamente um app que monta a página com JavaScript, ele carrega a página novamente em um navegador headless e a chamada custa 2 créditos. A resposta informa qual caminho foi usado: rendered é true ou false.

Defina render=false quando você sabe que o site entrega HTML completo e quer um custo fixo. Defina render=true para single-page apps, para pular a primeira tentativa.

O que country e max_chars mudam?

country lê a página de um endereço no país que você indicar, com o mesmo User-Agent. Use para páginas cujos preços, idioma ou disponibilidade mudam por país. Custa 10 créditos a mais, porque a página passa a ser lida por uma conexão residencial, e não pode ser usado com os países em que o serviço não opera.

max_chars corta a saída após essa quantidade de caracteres. Não muda o preço, mas protege a janela de contexto de um agente: 20.000 caracteres é um padrão razoável para uma única página enviada a um modelo.

O /read consegue lidar com arquivos PDF?

Sim. Quando a URL retorna um PDF, o texto volta como Markdown no mesmo campo markdown. Arquivos PDF de até 20 MB e 100 páginas são convertidos em Markdown, a 1 crédito por bloco iniciado de 10 páginas. PDFs escaneados sem camada de texto retornam pouco ou nenhum texto, porque não há etapa de reconhecimento de caracteres.

Endpoint read: perguntas frequentes

O /read segue redirecionamentos?

Sim, até 5. A resposta traz o endereço que você pediu em url e o endereço realmente lido em final_url. Um redirecionamento para um endereço privado ou local é recusado.

Posso ler uma página que exige login?

Não. Se um site recusa nossa requisição, devolvemos a resposta dele: nunca resolvemos CAPTCHAs, nunca entramos em contas e nunca tentamos contornar um bloqueio ou um paywall. Páginas atrás de login ou paywall retornam a recusa do site, e a chamada é gratuita.

A checagem do robots.txt é feita em toda chamada?

Sim, contra uma cópia do robots.txt do site com no máximo 24 horas. Uma URL não permitida retorna 403 blocked_by_robots e não consome crédito.

Quantas páginas posso ler ao mesmo tempo?

Cada conta tem um limite de quantas páginas lê ao mesmo tempo; seu dashboard mostra esse limite, e o suporte pode aumentá-lo. Para muitas URLs, um job em lote é mais simples do que rodar muitas chamadas paralelas.

A partir de US$ 0,07/1K páginas · sem KYC

Obtenha uma chave de API