Sin KYC: ni documento de identidad, ni selfie, ni documentos. Paga con criptomonedas: BTC, USDT, USDC, ETH, SOL, LTC
Idioma: Español
Obtén una clave API

Docs · respuesta

Formato de respuesta de la API Read, campo por campo

Cada llamada a /read devuelve un objeto JSON: el contenido de la página en el formato que pediste, sus metadatos y tres campos que te indican qué ocurrió y cuánto costó. Los resultados de trabajos reutilizan el mismo objeto.

Última actualización: · 5 min de lectura

Respuesta rápida

¿Qué contiene la respuesta de lectura de WebReaderAPI?

Una respuesta WebReaderAPI de /read contiene el contenido de la página en markdown (o text o html), sus metadatos (title, description, author, published_at, language, site_name, word_count) y los datos de la obtención: final_url, status_code, rendered y credits_used. Una página normal usa 1 crédito, desde 0,07 US$/1K páginas a partir de octubre de 2026. Sin KYC; paga con criptomonedas.

¿Qué campos describen la obtención?

Estos campos siempre están presentes en una respuesta correcta.

CampoTipoSignificado
urlstringLa dirección que enviaste
final_urlstringLa dirección que realmente se leyó, tras las redirecciones (5 como máximo)
status_codeintegerEl código de estado HTTP que devolvió el sitio para la dirección final, normalmente 200
fetched_atstringHora de la consulta, ISO 8601 en UTC
renderedbooleantrue cuando un navegador headless construyó la página
credits_usedintegerCréditos facturados por esta página: 1, 2 con navegador, más 10 con country; los PDF, 1 por cada 10 páginas iniciadas

¿Qué campos describen la página?

Los metadatos provienen de la propia página: su etiqueta title, sus meta etiquetas, sus datos estructurados y la firma visible. Un campo que la página no proporciona está ausente, así que compruébalo antes de usarlo.

CampoTipoSignificado
titlestringEl título de la página o del artículo
descriptionstringEl resumen que la página da de sí misma
languagestringCódigo de idioma del contenido, como en o de
authorstringEl autor indicado en la página
published_atstringFecha de publicación indicada por la página
site_namestringEl nombre del propio sitio
word_countintegerPalabras del contenido devuelto, después de la extracción y antes de max_chars

¿Dónde está el contenido en sí?

Se devuelve un campo de contenido, con el nombre del format que elegiste.

CampoCuándoContenido
markdownformat=markdown (predeterminado)Encabezados, párrafos, listas, tablas y enlaces en Markdown; también imágenes con include_images=true
textformat=textTexto plano, con párrafos separados por líneas en blanco
htmlformat=htmlHTML limpio del contenido principal, sin scripts, estilos ni anuncios
linksinclude_links=trueLista de {url, text} para los enlaces encontrados en la página, URLs absolutas
Una respuesta completa (los valores son ilustrativos)
{
  "url": "https://example.com/guides/compost",
  "final_url": "https://example.com/guides/compost-at-home",
  "status_code": 200,
  "fetched_at": "2026-10-22T10:02:44Z",
  "rendered": false,
  "credits_used": 1,
  "title": "Compost at home: a beginner's guide",
  "description": "What to put in a compost bin, and what to leave out.",
  "language": "en",
  "author": "Sam Rivera",
  "published_at": "2026-09-14",
  "site_name": "Example Garden",
  "markdown": "# Compost at home: a beginner's guide\n\nA compost bin turns kitchen scraps into soil...\n\n## What goes in\n\n- Fruit and vegetable peels\n- Coffee grounds\n\nSee also [Choosing a bin](https://example.com/guides/bins).",
  "word_count": 1184,
  "links": [
    { "url": "https://example.com/guides/bins", "text": "Choosing a bin" }
  ]
}

¿Cómo distingo una página renderizada de una simple?

Fíjate en rendered. Con render=auto, la API primero lee el HTML en bruto; solo arranca un navegador cuando ese HTML contiene muy poco texto, y entonces pone rendered en true y credits_used en 2. Si un sitio que lees a menudo siempre vuelve renderizado, envía render=true desde el principio: el coste es el mismo y te ahorras un primer paso inútil.

Si una página vuelve sin renderizar pero con poco contenido, compara word_count con lo que ves en un navegador. Un recuento bajo suele significar que el contenido necesita JavaScript; reinténtalo una vez con render=true.

¿Por qué final_url puede diferir de url?

Porque los sitios redirigen. Un enlace corto, una dirección antigua, una barra final que falta o un cambio de idioma te envían a otro sitio. La API sigue hasta 5 redirecciones y comunica la dirección que finalmente leyó en final_url.

Guarda final_url como la fuente canónica de un documento en un índice RAG. Dos valores distintos de url que terminan en el mismo final_url son la misma página, así que puedes descartar el duplicado antes de generar el embedding.

¿Cómo es el resultado de un job?

GET https://webreaderapi.com/api/v1/jobs/{job_id} devuelve job_id, status (queued, running o done), results, next_cursor y el credits_used en curso del job. Cada elemento de results tiene una de dos formas:

  • una respuesta /read completa, exactamente como se describe arriba, para una página que se leyó;
  • {url, error} para una página que no se leyó, donde error tiene el mismo code y message que un error de la API.

next_cursor está presente mientras haya más resultados listos; envíalo de vuelta como cursor para obtenerlos. La página de batch y crawl tiene un bucle de polling completo.

Una página de resultado de un job (los valores son ilustrativos)
{
  "job_id": "job_5c1e8a90d2",
  "status": "done",
  "results": [
    { "url": "https://example.com/blog/post-1", "final_url": "https://example.com/blog/post-1", "status_code": 200, "rendered": false, "credits_used": 1, "title": "Post one", "markdown": "# Post one\n\n...", "word_count": 802 },
    { "url": "https://example.org/members/area", "error": { "code": "target_refused", "message": "The site refused the request.", "target_status": 403 } }
  ],
  "credits_used": 1
}

¿Cómo es una respuesta de error?

Un error vuelve con un estado HTTP de 400 o superior y un cuerpo JSON {"error": {"code", "message"}}. Cuando el propio sitio rechazó la solicitud, target_status indica el estado que envió el sitio. Ningún error se factura. La página de errores enumera cada código con su causa y si un reintento puede ayudar.

Formato de respuesta: preguntas frecuentes

¿Se corta el Markdown cuando establezco max_chars?

Sí. El campo content se detiene en ese número de caracteres. word_count sigue describiendo todo el contenido extraído, así que puedes ver cuánto se quedó fuera.

¿Por qué falta author o published_at?

Porque la página no lo indica de una forma que se pueda leer. Muchas páginas no dan autor ni fecha. Los campos ausentes se omiten en lugar de devolverse vacíos.

¿Los enlaces del Markdown son absolutos?

Los enlaces de la lista links son absolutos. Escribe tu código para aceptar ambas formas en el cuerpo Markdown, y resuelve los relativos contra final_url.

¿Puedo obtener el HTML en bruto de toda la página?

Lo más parecido es format=html con main_content=false, que devuelve la página entera limpia de scripts y estilos. El HTML original byte a byte no forma parte de la v1.

Desde 0,07 US$/1K páginas · sin KYC

Obtén una clave API