Réponse rapide
Comment lire des pages web dont j'ai déjà les URL ?
Envoyez jusqu'à 20 URL à POST https://llmwebsearch.com/api/v1/extract. LLMWebSearch lit chaque page publique et renvoie son contenu principal en Markdown ou en texte brut, avec un statut par URL. La facturation est de 1 crédit par groupe de 3 pages lues entamé, à partir de 1,20 $US/1K requêtes par crédit de recherche en octobre 2026. robots.txt est respecté. Sans KYC ; payez en crypto.
/extract at a glance
| Méthode | POST avec un body JSON |
|---|---|
| URL | https://llmwebsearch.com/api/v1/extract |
| Entrée | urls : 1 à 20 adresses http ou https |
| Sortie | Contenu principal par URL, en markdown (par défaut) ou text |
| Facturation | Lire des pages dont vous avez déjà les URLs coûte 1 crédit par groupe de 3 pages entamé, renvoyées avec leur contenu, jusqu'à 20 URLs par appel ; les URLs refusées ou en échec ne sont pas comptées |
| robots.txt | Notre lecteur respecte robots.txt : il s'annonce comme LLMWebSearch, suit les règles qu'un site écrit pour lui ou pour tous les robots, et laisse de côté le contenu de toute page qu'il n'est pas autorisé à lire |
| Lecteur de pages | LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/) |
Lire une liste d'URL
POST/api/v1/extract
Récupère chaque URL en parallèle et renvoie son contenu principal, dans l'ordre où vous les avez envoyées. Chaque élément a son propre content_status, ainsi une page refusée ne fait pas échouer l'appel. L'exemple lit trois pages ; les titres et les valeurs sont illustratifs.
Authentification : clé API dans l’en-tête Authorization: Bearer API_KEY.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
urls | string[] | Oui | 1 à 20 adresses http ou https. Les adresses privées, locales et de métadonnées cloud sont refusées. |
format | string | Non | markdown (par défaut) ou text. |
max_chars | integer | Non | Limite de longueur du contenu de chaque page, de 500 à 50 000 caractères. Par défaut 6 000. |
{
"urls": [
"https://docs.example.com/security/key-rotation",
"https://blog.example.org/key-rotation-checklist",
"https://example.com/changelog"
],
"max_chars": 20000
}Réponse 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
}
]
}Exemples de code
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);Quand utiliser extract plutôt que read dans une recherche ?
Utilisez extract quand les URL ne proviennent pas de la recherche en cours. Un utilisateur colle un lien, un document cite trois sources, ou une première recherche avec read=0 a permis au modèle de choisir les pages qui méritent une lecture complète.
Utilisez read dans /search quand vous voulez simplement lire les meilleurs résultats dans le même appel. C'est une requête au lieu de deux, et jusqu'à 3 pages sont incluses dans le crédit unique de la recherche.
Comment sont facturés les appels extract ?
Un crédit pour chaque groupe de 3 pages lues entamé. Le décompte utilise les pages qui reviennent avec du contenu : une URL refusée par robots.txt ou par le site, ou qui ne se charge pas, n'est pas comptée.
| Pages lues | Crédits |
|---|---|
| 1 à 3 | 1 |
| 4 à 6 | 2 |
| 7 à 9 | 3 |
| 19 ou 20 | 7 |
La réponse indique toujours le total dans credits_used. Un appel où aucune page n'a pu être lue ne coûte rien.
Que m'indique chaque élément de la réponse ?
Chaque élément répète le url que vous avez envoyé et donne un content_status. Avec ok, vous obtenez aussi la page title, son content principal et son word_count. Sinon, le statut indique la raison : blocked_by_robots, blocked_by_site_policy, target_refused avec le target_status du site, fetch_failed, fetch_timeout ou unsupported_content.
Les éléments conservent l'ordre de votre liste de urls, vous pouvez donc les associer par index comme par URL. La page format de réponse décrit chaque statut.
Quelles URL sont refusées avant toute récupération ?
Les adresses qui pointent vers des réseaux privés, vers la machine locale ou vers des services de métadonnées cloud sont refusées. Cela empêche quiconque d'utiliser notre lecteur pour atteindre des systèmes internes. Une redirection qui mène à une telle adresse est aussi refusée, et au plus 5 redirections sont suivies.
L'adresse doit utiliser http ou https. Un appel où urls est vide, contient plus de 20 entrées ou contient une adresse malformée renvoie 400 invalid_parameter, sans frais.
Est-ce que extract suit les mêmes règles que search ?
Oui. C'est le même lecteur, qui se présente comme LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/). Un site qui définit Content-Signal: ai-input=no dans son robots.txt garde ses pages hors du contenu de vos résultats. Quand un site refuse notre lecteur, le résultat revient sans contenu et avec le statut du site : nous ne résolvons jamais de CAPTCHA, ne nous connectons pas à des comptes et ne contournons ni un blocage ni un paywall.
Les pages qui nécessitent une connexion, ou qui se trouvent derrière un paywall, reviennent sans contenu. Indiquez à l'agent une autre source, ou une page que vous êtes autorisé à lire avec votre propre session de navigateur.
Endpoint extract : questions fréquentes
Quels types de fichiers peut-il lire ?
Il est conçu pour les pages web. Un lien vers une vidéo, une archive ou un autre fichier sans texte lisible revient en unsupported_content, et cette URL n'est pas comptée dans le prix.
Une URL envoyée deux fois est-elle lue deux fois ?
Envoyez chaque URL une seule fois. Si une liste peut contenir des doublons, retirez-les d'abord de votre côté, pour que les résultats correspondent à votre liste un pour un.
Le rendu JavaScript est-il en supplément ?
Non. Lorsqu'une page a besoin d'un navigateur pour afficher son texte, elle est rendue sans coût supplémentaire.
Est-ce que extract peut lire une page à laquelle je suis connecté ?
Non. Le lecteur ne se connecte jamais à des comptes et n'envoie aucun de vos cookies. Quand un site refuse notre lecteur, le résultat revient sans contenu et avec le statut du site : nous ne résolvons jamais de CAPTCHA, ne nous connectons pas à des comptes et ne contournons ni un blocage ni un paywall.