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
| 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. |
{
"urls": [
"https://docs.example.com/security/key-rotation",
"https://blog.example.org/key-rotation-checklist",
"https://example.com/changelog"
],
"max_chars": 20000
}Respuesta 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
}
]
}Ejemplos 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);¿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 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.