Senza KYC — niente documento, niente selfie, niente documenti. Paga in criptovalute: BTC, USDT, USDC, ETH, SOL, LTC
Lingua: Italiano
Ottieni una chiave API

Documentazione · Riferimento API

Riferimento dell'endpoint read: GET e POST /read

/read recupera una pagina pubblica, ne estrae il contenuto principale e lo restituisce come Markdown, testo semplice o HTML pulito. Questa pagina elenca ogni parametro, il suo default e quanto costa.

Ultimo aggiornamento: · 7 min di lettura

Risposta rapida

Quali parametri accetta l'endpoint read di WebReaderAPI?

L'endpoint /read di WebReaderAPI richiede un parametro, url. Quelli opzionali scelgono l'output (format), quanto della pagina mantenere (main_content), se eseguire un browser (render), link e immagini, il paese di lettura, un limite di caratteri e un timeout. Una pagina semplice costa 1 credito, 2 con un browser, da 0,07 USD/1K pagine a ottobre 2026. Senza KYC; paghi in criptovalute.

/read at a glance

MetodiGET con parametri di query, o POST con un body JSON che usa gli stessi nomi
URLhttps://webreaderapi.com/api/v1/read
Obbligatoriourl: un indirizzo http o https, fino a 2.048 caratteri
Output predefinitoMarkdown del contenuto principale
Fatturazione1 credito = 1 pagina letta senza browser; 2 crediti quando la pagina richiede un browser per eseguire JavaScript. Una richiesta che fallisce, o che il robots.txt di un sito rifiuta, non viene addebitata
PaeseScegliere il paese da cui leggere una pagina aggiunge 10 crediti, perché la pagina viene poi letta tramite una connessione residenziale in quel paese
PDFI file PDF fino a 20 MB e 100 pagine vengono convertiti in Markdown, a 1 credito per ogni blocco di 10 pagine iniziato
Identità del crawlerWebReaderAPI/1.0 (+https://webreaderapi.com/bot/)

Leggi una pagina (GET)

GET/api/v1/read

Recupera una pagina pubblica e restituisce il suo contenuto principale come Markdown, con i metadata della pagina. I parametri vanno nella query string, codificati come URL. L'esempio legge un post di un blog; ID, date e valori sono illustrativi.

Autenticazione: chiave API nell'header Authorization: Bearer API_KEY.

Parametri

NomeInTipoObbligatorioDescrizione
urlquerystringSìLa pagina da leggere: http o https, al massimo 2.048 caratteri. Gli indirizzi privati, locali e di metadata cloud vengono rifiutati.
formatquerystringNomarkdown (default), text (testo semplice, senza markup) o html (HTML pulito del contenuto).
main_contentquerybooleanNotrue (default) mantiene solo l'articolo o il contenuto principale; false converte l'intera pagina, menu e footer inclusi.
renderquerystringNoauto (default) avvia un browser solo quando l'HTML grezzo contiene troppo poco testo; true sempre; false mai. Una pagina renderizzata costa 2 crediti.
include_linksquerybooleanNotrue aggiunge un elenco links di {url, text}. Default false.
include_imagesquerybooleanNotrue mantiene le immagini come ![alt](src) nel Markdown. Default false.
countryquerystringNoCodice paese di due lettere (ISO 3166-1 alpha-2). La pagina viene letta da un indirizzo in quel paese, per 10 crediti extra (connessione residenziale).
max_charsqueryintegerNoTaglia l'output a questo numero di caratteri, da 1.000 a 500.000. Utile per rientrare nel contesto di un modello.
timeoutqueryintegerNoSecondi di attesa per il sito, da 5 a 60. Predefinito 30.
api_keyquerystringNoLa tua chiave, se non invii l'header Authorization.

Risposta 200

{
  "url": "https://example.com/blog/first-post",
  "final_url": "https://example.com/blog/first-post",
  "status_code": 200,
  "fetched_at": "2026-10-22T09:41:12Z",
  "rendered": false,
  "credits_used": 1,
  "title": "Our first post",
  "description": "Why we started this blog and what comes next.",
  "language": "en",
  "author": "Jane Doe",
  "published_at": "2026-10-01",
  "site_name": "Example Blog",
  "markdown": "# Our first post\n\nWe started this blog to share what we learn...\n\n## What comes next\n\n- A post every month\n- Notes from our team",
  "word_count": 612
}

Esempi di codice

curl
curl -sG "https://webreaderapi.com/api/v1/read" \
  -H "Authorization: Bearer $WEBREADER_API_KEY" \
  --data-urlencode "url=https://example.com/blog/first-post" \
  -d format=markdown -d max_chars=20000
Python
import os
import requests

resp = requests.get(
    "https://webreaderapi.com/api/v1/read",
    headers={"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]},
    params={"url": "https://example.com/blog/first-post", "max_chars": 20000},
    timeout=70,
)
resp.raise_for_status()
print(resp.json()["markdown"][:300])
Node.js
const params = new URLSearchParams({ url: 'https://example.com/blog/first-post', max_chars: '20000' });
const res = await fetch(`https://webreaderapi.com/api/v1/read?${params}`, {
  headers: { Authorization: `Bearer ${process.env.WEBREADER_API_KEY}` },
});
const page = await res.json();
console.log(page.markdown.slice(0, 300));

Leggi una pagina (POST)

POST/api/v1/read

Stesso endpoint, stessi parametri, inviati come corpo JSON. Preferisci POST quando l'URL è molto lungo o quando il tuo client HTTP costruisce JSON più facilmente delle query string. La risposta è identica a quella della forma GET.

Autenticazione: chiave API nell'header Authorization: Bearer API_KEY.

Corpo della richiesta

CampoTipoObbligatorioDescrizione
urlstringSìLa pagina da leggere.
format, main_content, render, include_links, include_images, country, max_chars, timeoutmixedNoCome nella tabella GET qui sopra, con i tipi JSON: booleani come true/false, numeri senza virgolette.
Esempio: a JavaScript-heavy page, read from Germany, with its links
{
  "url": "https://example.com/app/pricing",
  "render": "true",
  "country": "de",
  "include_links": true,
  "max_chars": 30000
}

Risposta 200

{
  "url": "https://example.com/app/pricing",
  "final_url": "https://example.com/de/app/pricing",
  "status_code": 200,
  "fetched_at": "2026-10-22T09:44:03Z",
  "rendered": true,
  "credits_used": 3,
  "title": "Pricing",
  "language": "de",
  "markdown": "# Pricing\n\n| Plan | Price |\n|---|---|\n| Basic | ... |",
  "word_count": 214,
  "links": [
    {
      "url": "https://example.com/de/contact",
      "text": "Contact"
    }
  ]
}

Esempi di codice

curl
curl -s "https://webreaderapi.com/api/v1/read" \
  -H "Authorization: Bearer $WEBREADER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/app/pricing", "render": "true", "country": "de", "include_links": true}'
Python
import os
import requests

resp = requests.post(
    "https://webreaderapi.com/api/v1/read",
    headers={"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]},
    json={"url": "https://example.com/app/pricing", "render": "true", "country": "de", "include_links": True},
    timeout=70,
)
print(resp.json()["credits_used"], "credits")
Node.js
const res = await fetch('https://webreaderapi.com/api/v1/read', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.WEBREADER_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ url: 'https://example.com/app/pricing', render: 'true', country: 'de', include_links: true }),
});
console.log((await res.json()).credits_used);

Quale formato di output devo scegliere?

Scegli markdown per i modelli linguistici e RAG: titoli, elenchi, tabelle e link sopravvivono, e il testo resta compatto. Scegli text quando devi solo contare parole, classificare o cercare, e il markup sarebbe rumore. Scegli html quando la tua pipeline già analizza HTML e vuoi solo togliere il superfluo.

I campi dei metadati sono gli stessi in tutti e tre i formati. Cambia solo il nome del campo del contenuto: markdown, text o html.

Quando devo impostare main_content su false?

Impostalo su false quando le parti intorno all'articolo sono ciò che ti serve. Esempi sono la navigazione di un sito per mapparne le sezioni, un footer con dettagli legali o di contatto, o una pagina prodotto le cui specifiche stanno in una sidebar.

Con il valore predefinito true, l'estrattore mantiene il blocco del contenuto principale e scarta navigazione, banner cookie, annunci, pulsanti di condivisione e footer. È ciò che la maggior parte degli agenti e delle pipeline RAG vuole, e spesso riduce una pagina a una frazione della sua dimensione HTML.

Come fa render=auto a decidere di usare un browser?

Prima recupera l'HTML grezzo, che è veloce e costa 1 credito. Se quell'HTML contiene troppo poco testo leggibile, tipicamente un'app che costruisce la pagina con JavaScript, ricarica la pagina in un browser headless e la chiamata costa 2 crediti. La risposta ti dice quale percorso è stato eseguito: rendered è true o false.

Imposta render=false quando sai che il sito serve HTML completo e vuoi un costo fisso. Imposta render=true per le single-page app, per saltare il primo tentativo.

Cosa cambiano country e max_chars?

country legge la pagina da un indirizzo nel paese che indichi, con lo stesso User-Agent. Usalo per pagine i cui prezzi, lingua o disponibilità cambiano in base al paese. Aggiunge 10 crediti, perché la pagina viene poi letta tramite una connessione residenziale, e non può essere usato con i paesi in cui il servizio non opera.

max_chars taglia l'output dopo quel numero di caratteri. Non cambia il prezzo, ma protegge la context window di un agente: 20.000 caratteri è un valore predefinito sensato per una singola pagina passata a un modello.

/read può gestire i file PDF?

Sì. Quando l'URL restituisce un PDF, il testo torna come Markdown nello stesso campo markdown. I file PDF fino a 20 MB e 100 pagine vengono convertiti in Markdown, a 1 credito per ogni blocco di 10 pagine iniziato. I PDF scansionati senza livello di testo restituiscono poco o nessun testo, perché non c'è una fase di riconoscimento dei caratteri.

Endpoint Read: domande comuni

/read segue i redirect?

Sì, fino a 5. La risposta fornisce l'indirizzo che hai richiesto in url e l'indirizzo effettivamente letto in final_url. Un redirect verso un indirizzo privato o locale viene rifiutato.

Posso leggere una pagina che richiede un login?

No. Se un sito rifiuta la nostra richiesta, restituiamo la sua risposta: non risolviamo mai CAPTCHA, non accediamo agli account e non tentiamo di aggirare un blocco o un paywall. Le pagine dietro un login o un paywall restituiscono il rifiuto del sito, e la chiamata è gratuita.

Il controllo di robots.txt viene fatto a ogni chiamata?

Sì, su una copia del robots.txt del sito che ha al massimo 24 ore. Un URL non consentito restituisce 403 blocked_by_robots e non usa crediti.

Quante pagine posso leggere contemporaneamente?

Ogni account ha un limite di pagine lette contemporaneamente; la tua dashboard lo mostra e il supporto può aumentarlo. Per molti URL, un job batch è più semplice di molte chiamate parallele.

Da 0,07 USD/1K pagine · senza KYC

Ottieni una chiave API