Sans KYC — pas de pièce d'identité, pas de selfie, pas de documents. Payez en crypto : BTC, USDT, USDC, ETH, SOL, LTC
Langue: Français
Obtenir une clé API

Docs · réponse

Format de réponse de l'API Read, champ par champ

Chaque appel /read renvoie un objet JSON : le contenu de la page dans le format demandé, ses métadonnées, et trois champs qui vous indiquent ce qui s'est passé et ce que cela a coûté. Les résultats de job réutilisent le même objet.

Dernière mise à jour: · 5 min de lecture

Réponse rapide

Que contient la réponse de lecture de WebReaderAPI ?

Une réponse WebReaderAPI /read contient le contenu de la page en markdown (ou text ou html), ses métadonnées (title, description, author, published_at, language, site_name, word_count), et les informations du fetch : final_url, status_code, rendered et credits_used. Une page simple utilise 1 crédit, à partir de 0,07 $US/1K pages en octobre 2026. Sans KYC ; payez en crypto.

Quels champs décrivent le fetch ?

Ces champs sont toujours présents dans une réponse réussie.

ChampTypeSignification
urlstringL'adresse que vous avez envoyée
final_urlstringL'adresse réellement lue, après redirections (5 au maximum)
status_codeentierLe statut HTTP renvoyé par le site pour l'adresse finale, normalement 200
fetched_atstringHeure de la récupération, ISO 8601 en UTC
renderedbooléentrue lorsqu'un navigateur headless a construit la page
credits_usedentierCrédits facturés pour cette page : 1, 2 avec un navigateur, plus 10 avec country ; PDF 1 par tranche de 10 pages commencées

Quels champs décrivent la page ?

Les métadonnées proviennent de la page elle-même : sa balise title, ses balises meta, ses données structurées et sa signature visible. Un champ que la page ne fournit pas est absent : testez sa présence avant de l'utiliser.

ChampTypeSignification
titlestringLe titre de la page ou de l'article
descriptionstringLe résumé que la page donne d'elle-même
languagestringCode de langue du contenu, par exemple en ou de
authorstringL'auteur indiqué sur la page
published_atstringDate de publication indiquée par la page
site_namestringLe nom du site lui-même
word_countentierMots dans le contenu renvoyé, après extraction et avant max_chars

Où se trouve le contenu lui-même ?

Un seul champ de contenu est renvoyé, nommé d'après le format choisi.

ChampQuandContenu
markdownformat=markdown (par défaut)Titres, paragraphes, listes, tableaux et liens en Markdown ; images aussi avec include_images=true
textformat=textTexte brut, paragraphes séparés par des lignes vides
htmlformat=htmlHTML nettoyé du contenu principal, sans scripts, styles ni publicités
linksinclude_links=trueListe des {url, text} pour les liens trouvés sur la page, URL absolues
Une réponse complète (les valeurs sont illustratives)
{
  "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" }
  ]
}

Comment distinguer une page rendue d'une page brute ?

Regardez rendered. Avec render=auto, l'API lit d'abord le HTML brut ; elle ne lance un navigateur que lorsque ce HTML contient trop peu de texte, et passe alors rendered à true et credits_used à 2. Si un site que vous lisez souvent revient toujours rendu, envoyez render=true dès le départ : le coût est identique et vous évitez une première étape inutile.

Si une page revient non rendue mais pauvre en contenu, comparez word_count avec ce que vous voyez dans un navigateur. Un nombre faible signifie généralement que le contenu nécessite JavaScript ; réessayez une fois avec render=true.

Pourquoi final_url peut-il différer de url ?

Parce que les sites redirigent. Un lien court, une ancienne adresse, une barre oblique finale manquante ou un changement de langue vous envoient ailleurs. L'API suit jusqu'à 5 redirections et indique l'adresse qu'elle a finalement lue dans final_url.

Stockez final_url comme source canonique d'un document dans un index RAG. Deux valeurs url différentes qui aboutissent au même final_url désignent la même page : vous pouvez donc supprimer le doublon avant de l'embedder.

À quoi ressemble le résultat d'un job ?

GET https://webreaderapi.com/api/v1/jobs/{job_id} renvoie job_id, status (queued, running ou done), results, next_cursor et l'état d'avancement credits_used du job. Chaque élément de results prend l'une de deux formes :

  • une réponse /read complète, exactement comme décrit ci-dessus, pour une page qui a été lue ;
  • {url, error} pour une page qui ne l'a pas été, où error possède les mêmes code et message qu'une erreur API.

next_cursor est présent tant que d'autres résultats sont disponibles ; renvoyez-le en tant que cursor pour les récupérer. La page batch et crawl contient une boucle de polling complète.

Une page de résultat de job (les valeurs sont illustratives)
{
  "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
}

À quoi ressemble une réponse d'erreur ?

Une erreur revient avec un statut HTTP de 400 ou plus et un corps JSON {"error": {"code", "message"}}. Lorsque le site lui-même a refusé la requête, target_status indique le statut envoyé par le site. Aucune erreur n'est facturée. La page des erreurs liste chaque code avec sa cause et précise si une nouvelle tentative peut aider.

Format de réponse : questions fréquentes

Le Markdown est-il coupé lorsque je définis max_chars ?

Oui. Le champ content s'arrête à ce nombre de caractères. word_count décrit toujours l'intégralité du contenu extrait, vous pouvez donc voir ce qui a été omis.

Pourquoi author ou published_at sont-ils absents ?

Parce que la page ne l'indique pas d'une manière lisible. Beaucoup de pages ne fournissent ni auteur ni date. Les champs absents sont omis plutôt que renvoyés vides.

Les liens dans le Markdown sont-ils absolus ?

Les liens de la liste links sont absolus. Écrivez votre code pour accepter les deux formes dans le corps Markdown, et résolvez les liens relatifs par rapport à final_url.

Puis-je obtenir le HTML brut de la page entière ?

Le plus proche est format=html avec main_content=false, qui renvoie la page entière nettoyée des scripts et des styles. Le HTML original octet par octet ne fait pas partie de la v1.

À partir de 0,07 $US/1K pages · sans KYC

Obtenir une clé API