HTML strip to text

FREE with proof-of-workor $0.001 in USDCPOST /api/html-strip

Strip all HTML tags and return plain text. Send POST /api/html-strip with the required field html and pay $0.001 per call over x402 or MPP, or call it free by solving a proof-of-work challenge. It returns a JSON object with text, chars and hiddenContent.

Preserves block-level structure (paragraphs and headings become newline-separated). hiddenContent reports text a reader cannot see (HTML comments, display:none or hidden elements, white-on-white or off-screen text, zero-width characters) and quotes any of it that reads as an instruction to an AI; send hidden: "drop" to leave it out of the text. Faster and more predictable than running extract on a raw HTML string when you already have it.

Category: Web & documentsTags: html strip tags plaintext text

Try in playground →

Parameters

NameTypeRequiredDescription
htmlstringyesRaw HTML string to strip (max 5MB) Also accepted as content, body, markup, text, source.
selectorstringnoOptional CSS selector - strip only within this element (default: whole document)
hiddenstring (one of: keep, drop)noWhat to do with content a reader cannot see (HTML comments, display:none or hidden elements, white-on-white or off-screen text, zero-width characters): "keep" (default) converts it like everything else, "drop" removes it first. Either way hiddenContent reports what was found and quotes any hidden text that reads as an instruction to an AI.

Example request

curl -i -X POST https://agent402.tools/api/html-strip \
  -H "Content-Type: application/json" \
  -d '{"html":"<h1>Title</h1><p>First paragraph.</p><p>Second.</p>"}'

Without payment this returns HTTP 402 Payment Required with the exact price for html-strip; any x402 v2 or MPP client pays it and retries.

Example response

{
  "text": "Title\n\nFirst paragraph.\n\nSecond.",
  "chars": 32,
  "hiddenContent": {
    "mode": "keep",
    "total": 0,
    "found": {
      "comments": 0,
      "cssHidden": 0,
      "hiddenAttr": 0,
      "offscreen": 0,
      "invisibleChars": 0,
      "attributes": 0
    },
    "instructionLike": []
  }
}
FieldTypeAlways presentIn the example
textstringyesTitle First paragraph. Second.
charsnumberyes32
hiddenContentobjectyes4 fields: mode, total, found, instructionLike

From an MCP client

catalog.call {
  "slug": "html-strip",
  "params": {
    "html": "<h1>Title</h1><p>First paragraph.</p><p>Second.</p>"
  }
}

On the hosted connector at https://agent402.tools/mcp, catalog.call runs html-strip free (rate-limited, no wallet). Local install: npx -y [email protected].

Errors and behavior

Paid call (JavaScript agent)

import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const client = new x402Client();
client.setSpendControls?.({ maxAmountPerPayment: "$0.001" }); // refuse any quote above this tool's price
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);

const res = await payFetch("https://agent402.tools/api/html-strip", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    "html": "<h1>Title</h1><p>First paragraph.</p><p>Second.</p>"
  }),
});

No wallet? Pay with compute

Fetch a challenge, solve the sha256 puzzle (16 leading zero bits, a fraction of a second of CPU), and resend with the X-Pow-Solution header:

import { createHash } from "node:crypto";
const lz = (b) => { let t = 0; for (const x of b) { if (!x) { t += 8; continue; } t += Math.clz32(x) - 24; break; } return t; };
const c = await (await fetch("https://agent402.tools/api/pow/challenge?slug=html-strip")).json();
let n = 0;
while (lz(createHash("sha256").update(c.challenge + ":" + n).digest()) < c.difficulty) n++;
await fetch("https://agent402.tools/api/html-strip", { method: "POST", headers: { "X-Pow-Solution": c.token + ":" + n, "Content-Type": "application/json" }, body: JSON.stringify({"html":"<h1>Title</h1><p>First paragraph.</p><p>Second.</p>"}) });

Part of these workflows

HTML strip to text is one step in this skill pack, each sold as a single call:

Related tools

Hidden text scan

FREE w/ compute · or $0.001 · POST /api/hidden-text-scan

Check an email or web page for text a person reading it would not see but an AI reading it would: HTML comments.

HTML frames (render contract, frame check)

from $0.02 · POST /api/html-frames

Freeze frames of an animation under the render contract: the page defines window.renderAt(t).

HTML links

FREE w/ compute · or $0.001 · POST /api/html-links

Enumerate every <a href> in an HTML string with its anchor text and rel attribute.

HTML meta (from string)

FREE w/ compute · or $0.001 · POST /api/html-meta

Extract <title>, <meta description>, OpenGraph/Twitter cards, canonical URL, and JSON-LD blocks from an HTML string.

HTML select

FREE w/ compute · or $0.001 · POST /api/html-select

Run a CSS selector against an HTML string and return the matches (text, attrs, and optionally outerHTML for each).

HTML table to JSON/CSV

FREE w/ compute · or $0.001 · POST /api/html-table

Extract a <table> from an HTML string as JSON rows (header-keyed) or CSV.