# Endpoint Extract: lee las URLs que tu agente ya tiene

> Endpoint Extract: envía de 1 a 20 URLs que ya tienes y recibe el contenido principal de cada página en Markdown, 1 crédito por cada grupo de 3. Sin KYC, cripto.

- URL: https://llmwebsearch.com/es/docs/extract/
- Última actualización: 2026-10-22
- Editor: LLMWebSearch (https://llmwebsearch.com)

A veces el agente ya tiene los enlaces: un usuario los pegó, una búsqueda anterior los listó o un documento los cita. `/extract` lee esas páginas y devuelve su contenido principal, con el mismo lector y las mismas reglas que `/search`.

**Respuesta rápida — ¿Cómo leo páginas web de las que ya tengo las URLs?**

Envía hasta 20 URLs a `POST https://llmwebsearch.com/api/v1/extract`. **LLMWebSearch** lee cada página pública y devuelve su contenido principal en Markdown o texto plano, con un estado por URL. La facturación es de 1 crédito por cada grupo de 3 páginas leídas comenzado, a partir de 1,20 US$/1K búsquedas por crédito de búsqueda a fecha de octubre de 2026. Se respeta robots.txt. Sin KYC; paga con criptomonedas.

## /extract at a glance

| Atributo | Valor |
| --- | --- |
| Método | `POST` con un cuerpo JSON |
| URL | `https://llmwebsearch.com/api/v1/extract` |
| Entrada | `urls`: de 1 a 20 direcciones http o https |
| Salida | Contenido principal por URL, en `markdown` (por defecto) o `text` |
| Facturación | Leer páginas cuyas URL ya tienes cuesta 1 crédito por cada grupo iniciado de 3 páginas devueltas con contenido, hasta 20 URL por llamada; las URL rechazadas o fallidas no se cuentan |
| robots.txt | Nuestro lector respeta robots.txt: se identifica como LLMWebSearch, sigue las reglas que un sitio escribe para él o para todos los robots, y deja fuera el contenido de cualquier página que no tenga permitido leer |
| Lector de páginas | `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)` |

## Leer una lista de URLs

`POST /api/v1/extract`

Obtiene cada URL en paralelo y devuelve su contenido principal, en el orden en que las enviaste. Cada elemento tiene su propio `content_status`, así que una página rechazada no hace fallar la llamada. El ejemplo lee tres páginas; los títulos y valores son ilustrativos.

Autenticación: clave API en la cabecera `Authorization: Bearer API_KEY`.

**Cuerpo de la solicitud**

| Campo | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `urls` | string[] | Sí | De 1 a 20 direcciones http o https. Se rechazan las direcciones privadas, locales y de metadatos en la nube. |
| `format` | string | No | `markdown` (por defecto) o `text`. |
| `max_chars` | integer | No | Límite de longitud del contenido de cada página, de 500 a 50,000 caracteres. Por defecto 6,000. |

*Ejemplo: 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
}
```

**Respuesta** `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);
```

## ¿Cuándo debo usar extract en lugar de read en una búsqueda?

Usa extract cuando las URLs no vienen de la búsqueda que estás ejecutando. Un usuario pega un enlace, un documento cita tres fuentes o una primera búsqueda con `read=0` permitió al modelo elegir qué páginas merecen una lectura completa.

Usa `read` dentro de `/search` cuando simplemente quieres leer los mejores resultados en la misma llamada. Es una petición en lugar de dos, y hasta 3 páginas van incluidas en el único crédito de la búsqueda.

## ¿Cómo se factura las llamadas a extract?

Un crédito por cada grupo de 3 páginas leídas comenzado. El recuento usa las páginas que vuelven con contenido: una URL rechazada por robots.txt o por el sitio, o una que no carga, no se cuenta.

| Páginas leídas | Créditos |
|---|---|
| 1 a 3 | 1 |
| 4 a 6 | 2 |
| 7 a 9 | 3 |
| 19 o 20 | 7 |

La respuesta siempre indica el total en `credits_used`. Una llamada en la que no se pudo leer ninguna página no cuesta nada.

## ¿Qué me dice cada elemento de la respuesta?

Cada elemento repite el `url` que enviaste y devuelve un `content_status`. Con `ok`, también obtienes la página `title`, su `content` principal y su `word_count`. De lo contrario, el estado indica el motivo: `blocked_by_robots`, `blocked_by_site_policy`, `target_refused` con el `target_status`, `fetch_failed`, `fetch_timeout` o `unsupported_content` del sitio.

Los elementos mantienen el orden de tu lista de `urls`, así que puedes emparejarlos tanto por índice como por URL. La página del [formato de respuesta](https://llmwebsearch.com/es/docs/response/) describe cada estado.

## ¿Qué URLs se rechazan antes de cualquier fetch?

Se rechazan las direcciones que apuntan a redes privadas, a la máquina local o a servicios de metadatos en la nube. Así se evita que alguien use nuestro lector para llegar a sistemas internos. Una redirección que lleve a una de esas direcciones también se rechaza, y se siguen como máximo 5 redirecciones.

La dirección debe usar `http` o `https`. Una llamada en la que `urls` esté vacío, contenga más de 20 entradas o incluya una dirección mal formada devuelve `400 invalid_parameter`, sin cargo.

## ¿Extract sigue las mismas reglas que search?

Sí. Es el mismo lector, que se identifica como `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)`. Un sitio que establece Content-Signal: ai-input=no en su robots.txt mantiene las páginas de su sitio fuera del contenido de tus resultados. Cuando un sitio rechaza a nuestro lector, el resultado vuelve sin contenido y con el estado del sitio: nunca resolvemos CAPTCHAs, iniciamos sesión en cuentas ni sorteamos un bloqueo o un paywall.

Las páginas que requieren iniciar sesión o que están detrás de un paywall vuelven sin contenido. Indica al agente otra fuente, o una página que puedas leer con tu propia sesión de navegador.

## Endpoint extract: preguntas frecuentes

### ¿Qué tipos de archivos puede leer?

Está hecho para páginas web. Un enlace a un vídeo, a un archivo comprimido o a otro archivo sin texto legible vuelve como `unsupported_content`, y esa URL no se cuenta en el precio.

### ¿Una URL enviada dos veces se lee dos veces?

Envía cada URL una sola vez. Si una lista puede contener duplicados, elimínalos antes en tu lado, para que los resultados coincidan con tu lista uno a uno.

### ¿El renderizado de JavaScript tiene coste extra?

No. Cuando una página necesita un navegador para mostrar su texto, se renderiza sin coste adicional.

### ¿Puede extract leer una página en la que tengo sesión iniciada?

No. El lector nunca inicia sesión en cuentas y no envía cookies tuyas. Cuando un sitio rechaza a nuestro lector, el resultado vuelve sin contenido y con el estado del sitio: nunca resolvemos CAPTCHAs, iniciamos sesión en cuentas ni sorteamos un bloqueo o un paywall.

---

LLMWebSearch: LLMWebSearch es una API de búsqueda web para agentes de IA que devuelve resultados clasificados con el contenido de las mejores páginas en Markdown, se paga con criptomonedas y sin subir documentos de identidad. Los créditos prepago desde 1,20 US$/1K búsquedas nunca caducan. Sin KYC: sin ID, sin selfie, sin documentos. Paga con criptomonedas.
