Resposta rápida
Como leio páginas web das quais já tenho as URLs?
Envie até 20 URLs para POST https://llmwebsearch.com/api/v1/extract. LLMWebSearch lê cada página pública e retorna seu conteúdo principal em Markdown ou texto simples, com um status por URL. O faturamento é de 1 crédito para cada grupo iniciado de 3 páginas lidas, a partir de US$ 1,20/1K pesquisas por crédito de pesquisa em outubro de 2026. O robots.txt é respeitado. Sem KYC; pague com cripto.
/extract at a glance
| Método | POST com um body JSON |
|---|---|
| URL | https://llmwebsearch.com/api/v1/extract |
| Entrada | urls: 1 a 20 endereços http ou https |
| Saída | Conteúdo principal por URL, em markdown (padrão) ou text |
| Cobrança | Ler páginas cujas URLs você já tem custa 1 crédito por cada grupo iniciado de 3 páginas devolvidas com conteúdo, até 20 URLs por chamada; URLs recusadas ou com falha não são contadas |
| robots.txt | Nosso leitor respeita o robots.txt: ele se identifica como LLMWebSearch, segue as regras que um site escreve para ele ou para todos os robôs e deixa de fora o conteúdo de qualquer página que não tem permissão para ler |
| Leitor de páginas | LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/) |
Ler uma lista de URLs
POST/api/v1/extract
Busca cada URL em paralelo e retorna seu conteúdo principal, na ordem em que você enviou. Cada item tem seu próprio content_status, então uma página recusada não faz a chamada falhar. O exemplo lê três páginas; os títulos e valores são ilustrativos.
Autenticação: chave de API no header Authorization: Bearer API_KEY.
Corpo da requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
urls | string[] | Sim | 1 a 20 endereços http ou https. Endereços privados, locais e de metadados de nuvem são recusados. |
format | string | Não | markdown (padrão) ou text. |
max_chars | integer | Não | Limite de tamanho do conteúdo de cada página, de 500 a 50.000 caracteres. Padrão 6.000. |
{
"urls": [
"https://docs.example.com/security/key-rotation",
"https://blog.example.org/key-rotation-checklist",
"https://example.com/changelog"
],
"max_chars": 20000
}Resposta 200
{
"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
}
]
}Exemplos de código
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}'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))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);Quando devo usar extract em vez de read em uma pesquisa?
Use extract quando as URLs não vêm da pesquisa que você está executando. Um usuário cola um link, um documento cita três fontes, ou uma primeira pesquisa com read=0 deixou o modelo escolher quais páginas merecem uma leitura completa.
Use read dentro de /search quando você simplesmente quer os principais resultados lidos na mesma chamada. É uma requisição em vez de duas, e até 3 páginas estão incluídas no único crédito da pesquisa.
Como as chamadas extract são cobradas?
Um crédito para cada grupo iniciado de 3 páginas lidas. A contagem usa as páginas que voltam com conteúdo: uma URL recusada pelo robots.txt ou pelo site, ou que falha ao carregar, não é contada.
| Páginas lidas | Créditos |
|---|---|
| 1 a 3 | 1 |
| 4 a 6 | 2 |
| 7 a 9 | 3 |
| 19 ou 20 | 7 |
A resposta sempre informa o total em credits_used. Uma chamada em que nenhuma página pôde ser lida não custa nada.
O que cada item da resposta me diz?
Cada item repete o url que você enviou e traz um content_status. Com ok, você também recebe a página title, seu content principal e seu word_count. Caso contrário, o status informa o motivo: blocked_by_robots, blocked_by_site_policy, target_refused com o target_status do site, fetch_failed, fetch_timeout ou unsupported_content.
Os itens mantêm a ordem da sua lista urls, então você pode correlacioná-los por índice e também por URL. A página formato de resposta descreve cada status.
Quais URLs são recusadas antes de qualquer fetch?
Endereços que apontam para redes privadas, para a máquina local ou para serviços de metadados de nuvem são recusados. Isso impede que alguém use nosso leitor para acessar sistemas internos. Um redirecionamento que leva a esse tipo de endereço também é recusado, e no máximo 5 redirecionamentos são seguidos.
O endereço deve usar http ou https. Uma chamada em que urls está vazio, tem mais de 20 entradas ou contém um endereço malformado retorna 400 invalid_parameter, sem custo.
O extract segue as mesmas regras da pesquisa?
Sim. É o mesmo leitor, que se apresenta como LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/). Um site que define Content-Signal: ai-input=no no seu robots.txt mantém as suas páginas fora do conteúdo dos seus resultados. Quando um site recusa o nosso leitor, o resultado volta sem conteúdo e com o status do site: nunca resolvemos CAPTCHAs, não entramos em contas nem contornamos um bloqueio ou um paywall.
Páginas que exigem login, ou que ficam atrás de paywall, voltam sem conteúdo. Aponte o agente para outra fonte, ou para uma página que você tem permissão de ler com sua própria sessão de navegador.
Endpoint extract: perguntas frequentes
Que tipos de arquivo ele consegue ler?
Páginas web são o que ele foi feito para ler. Um link para um vídeo, um arquivo compactado ou outro arquivo sem texto legível volta como unsupported_content, e essa URL não é contada no preço.
Uma URL enviada duas vezes é lida duas vezes?
Envie cada URL uma vez. Se a lista puder conter duplicatas, remova-as do seu lado primeiro, para que os resultados correspondam à sua lista um a um.
A renderização de JavaScript tem custo extra?
Não. Quando uma página precisa de um navegador para exibir seu texto, ela é renderizada sem custo adicional.
O extract consegue ler uma página em que estou logado?
Não. O leitor nunca entra em contas e não envia cookies seus. Quando um site recusa o nosso leitor, o resultado volta sem conteúdo e com o status do site: nunca resolvemos CAPTCHAs, não entramos em contas nem contornamos um bloqueio ou um paywall.