# Endpoint extract: leia as URLs que seu agente já tem

> Endpoint extract: envie de 1 a 20 URLs e receba o conteúdo principal de cada página em Markdown, 1 crédito por grupo de 3. Sem KYC, cripto.

- URL: https://llmwebsearch.com/pt/docs/extract/
- Última atualização: 2026-10-22
- Editor: LLMWebSearch (https://llmwebsearch.com)

Às vezes o agente já tem os links: um usuário colou, uma pesquisa anterior listou ou um documento cita. `/extract` lê essas páginas e retorna o conteúdo principal, com o mesmo leitor e as mesmas regras do `/search`.

**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

| Atributo | Valor |
| --- | --- |
| 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. |

*Exemplo: three pages, longer content*

```json
{
  "urls": [
    "https://docs.example.com/security/key-rotation",
    "https://blog.example.org/key-rotation-checklist",
    "https://example.com/changelog"
  ],
  "max_chars": 20000
}
```

**Resposta** `200`

```json
{
  "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
    }
  ]
}
```

*curl*

```bash
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}'
```

*Python*

```python
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))
```

*Node.js*

```javascript
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](https://llmwebsearch.com/pt/docs/response/) 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.

---

LLMWebSearch: O LLMWebSearch é uma API de pesquisa na web para agentes de IA que retorna resultados classificados com o conteúdo das principais páginas em Markdown, pago com cripto sem envio de documentos. Os créditos pré-pagos a partir de US$ 1,20/1K pesquisas nunca expiram. Sem KYC — sem documento, sem selfie, sem comprovantes. Pague com cripto.
