Respuesta rápida
¿Cómo convierto una página web a Markdown desde la línea de comandos?
Ejecuta curl -sG https://webreaderapi.com/api/v1/read --data-urlencode "url=…" con tu clave en un header Authorization: Bearer y pasa la respuesta por una tubería a jq -r .markdown. WebReaderAPI devuelve el contenido principal de la página como Markdown con sus metadatos. Una página normal usa 1 crédito, desde 0,07 US$/1K páginas a octubre de 2026. Sin KYC; paga con criptomonedas.
¿Cómo configuro el terminal?
Instala curl y jq, que la mayoría de los sistemas Linux y macOS ya tienen, y exporta tu clave una vez por sesión. Cada receta de abajo la lee desde $WEBREADER_API_KEY, así la clave nunca aparece en el historial del shell como parte de un comando.
Usa -G con --data-urlencode para las solicitudes GET: curl codifica la dirección de la página por ti, lo cual importa porque las direcciones contienen ?, & y = propios.
export WEBREADER_API_KEY="your-key"
curl -sG "https://webreaderapi.com/api/v1/read" \
-H "Authorization: Bearer $WEBREADER_API_KEY" \
--data-urlencode "url=https://example.com/guides/compost" \
| jq -r '.markdown' > compost.md¿Cómo veo qué devolvió una llamada y cuánto costó?
Pídele a jq los metadatos en lugar del contenido. final_url muestra a dónde llevaron las redirecciones, rendered te dice si se usó un navegador y credits_used es lo que costó la llamada. Si la respuesta es un error, el mismo filtro imprime los campos de null; imprime .error para leer el código y el mensaje.
curl -sG "https://webreaderapi.com/api/v1/read" \
-H "Authorization: Bearer $WEBREADER_API_KEY" \
--data-urlencode "url=https://example.com/guides/compost" \
| jq '.error // {title, final_url, rendered, credits_used, word_count}'¿Cómo listo los enlaces de una página?
Añade include_links=true y convierte la lista links en líneas separadas por tabulaciones. Así obtienes un mapa rápido de los enlaces salientes de una página, que puedes ordenar, filtrar con grep o pasar a un trabajo por lotes.
curl -sG "https://webreaderapi.com/api/v1/read" \
-H "Authorization: Bearer $WEBREADER_API_KEY" \
--data-urlencode "url=https://example.com/docs/" \
-d include_links=true \
| jq -r '.links[] | "\(.text)\t\(.url)"' | sort -u¿Cómo leo una página con JavaScript o un PDF?
Añade -d render=true para una página que construye su contenido con JavaScript; entonces cuesta 2 créditos. Un PDF no necesita nada especial: envía su URL y el texto vuelve en markdown. Los archivos PDF de hasta 20 MB y 100 páginas se convierten a Markdown, a 1 crédito por cada bloque de 10 páginas iniciado.
curl -sG "https://webreaderapi.com/api/v1/read" -H "Authorization: Bearer $WEBREADER_API_KEY" \
--data-urlencode "url=https://example.com/app/changelog" -d render=true \
| jq -r '.markdown' > changelog.md
curl -sG "https://webreaderapi.com/api/v1/read" -H "Authorization: Bearer $WEBREADER_API_KEY" \
--data-urlencode "url=https://example.com/files/annual-report.pdf" \
| jq -r '.markdown' > annual-report.md¿Cómo ejecuto un trabajo por lotes desde el shell?
Envía un cuerpo JSON con tus URLs a /batch, guarda el job_id y luego lee el trabajo. Un pequeño bucle espera hasta que el trabajo esté done e imprime el título o el código de error de cada página. Para trabajos largos, sigue next_cursor como se muestra en la página de lotes y rastreo.
JOB=$(curl -s "https://webreaderapi.com/api/v1/batch" \
-H "Authorization: Bearer $WEBREADER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://example.com/a", "https://example.com/b", "https://example.com/c"]}' \
| jq -r '.job_id')
until [ "$(curl -s "https://webreaderapi.com/api/v1/jobs/$JOB" -H "Authorization: Bearer $WEBREADER_API_KEY" | jq -r '.status')" = "done" ]; do
sleep 5
done
curl -s "https://webreaderapi.com/api/v1/jobs/$JOB" -H "Authorization: Bearer $WEBREADER_API_KEY" \
| jq -r '.results[] | "\(.url)\t\(.title // .error.code)"'¿Cómo consulto mis créditos?
Llama a /credits; es gratis. Devuelve credits_remaining, credits_used_today y tu concurrency_limit. Los créditos prepago nunca caducan: las páginas sin usar permanecen en tu cuenta hasta que las uses.
curl -s "https://webreaderapi.com/api/v1/credits" -H "Authorization: Bearer $WEBREADER_API_KEY" | jq '.credits_remaining'¿Cuál es la versión de PowerShell en Windows?
Invoke-RestMethod analiza el JSON por ti, así que no necesitas jq. Construye la consulta con [uri]::EscapeDataString para codificar la dirección de la página y pasa la clave en una tabla de headers.
$headers = @{ Authorization = "Bearer $env:WEBREADER_API_KEY" }
$target = [uri]::EscapeDataString('https://example.com/guides/compost')
$page = Invoke-RestMethod -Uri "https://webreaderapi.com/api/v1/read?url=$target" -Headers $headers
$page.markdown | Out-File -Encoding utf8 compost.md
"$($page.title): $($page.word_count) words, $($page.credits_used) credit(s)"curl: preguntas frecuentes
¿Por qué falla mi URL con &?
Porque el shell o curl la dividen. Pon entre comillas todo el argumento url=… y pásalo con --data-urlencode, como en las recetas de arriba; entonces curl codifica &, ? y = dentro de la dirección de la página.
¿Cómo veo el estado HTTP de un error?
Añade -w '\n%{http_code}\n' para imprimirlo después del cuerpo, o -i para ver todos los headers. El error.code del cuerpo es el valor estable que debes comprobar en tus scripts.
¿Se cobra una llamada fallida?
No. 1 crédito = 1 página leída sin navegador; 2 créditos cuando la página necesita un navegador para renderizar JavaScript. Una solicitud que falla, o que el robots.txt de un sitio rechaza, no se cobra.