Text statistics
POST /api/text-statsCharacters, words, sentences, paragraphs, average word length, reading time, and an LLM token estimate for any text.
Input
| Field | Type | Description |
|---|---|---|
text * | string | Text to analyze (max 500KB) |
Example output
{
"characters": 1200,
"words": 210,
"sentences": 14,
"paragraphs": 4,
"readingTimeMinutes": 1.1,
"estimatedTokens": 300
}
Try it - see the 402 challenge (free)
curl -i -X POST https://agent402.tools/api/text-stats \
-H "Content-Type: application/json" \
-d '{"text":"Some long document…"}'
The response is HTTP 402 Payment Required with exact payment requirements. Any x402 v2 client pays automatically and retries:
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();
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://agent402.tools/api/text-stats", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"text": "Some long document…"
}),
});
No wallet? Pay with compute
This is a pure-CPU tool, so an agent without a wallet can pay with proof-of-work instead of USDC: fetch a challenge, solve the sha256 puzzle (16 leading zero bits - a fraction of a second of CPU, no money, no AI tokens), 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=text-stats")).json();
let n = 0;
while (lz(createHash("sha256").update(c.challenge + ":" + n).digest()) < c.difficulty) n++;
await fetch("https://agent402.tools/api/text-stats", { method: "POST", headers: { "X-Pow-Solution": c.token + ":" + n, "Content-Type": "application/json" }, body: JSON.stringify({"text":"Some long document…"}) });
Part of these workflows
This tool is one step in 7 curated multi-tool workflows - agents can fetch the whole sequence as an MCP prompt or call https://agent402.tools/api/skill-packs/{slug}/prompt.
- Text hygiene - Turn a wall of dirty text - chat logs, scraped pages, user-generated content, log dumps - into something safe to store, search, and pipe into the next step. Measure first, redact PII before anything else touches the data, then dedupe, sort, extract entities, surface keywords, and grade the readability of what's left.
- RAG corpus prep - Take a raw document and turn it into a vector-DB-ready JSONL dataset, deterministically. Measures the corpus, token-counts it with the real OpenAI BPE, chunks at the right token boundary, attaches entities + keywords as metadata, emits NDJSON, then validates every record against a JSON Schema before you ingest it. Seven pure-CPU tools, free-tier eligible - the canonical 'prep my docs for embeddings' workflow done as deterministic tool calls instead of a hand-rolled Python script.
- WCAG accessibility audit - Run a deterministic WCAG 2.x audit of an HTML page from a string and a fg/bg color pair. Checks language attribute (3.1.1), document title (2.4.2), heading order (1.3.1), link-text presence (2.4.4), color contrast (1.4.3), and reading grade level (3.1.5 AAA). Seven pure-CPU tools, no headless browser needed - the canonical accessibility-first-pass workflow done as a single round-trip of tool calls.
- Convert anything to markdown - Convert anything at a URL - HTML, PDF, or an image - to clean markdown. The 'I have a URL but it might be any content-type, give me markdown either way' workflow: HEAD-detect the content-type, branch to the right deterministic extractor (article extract for HTML, pdf-to-markdown for PDFs, OCR for images), and report token/word stats on the output so the caller can budget the result against an LLM context window.
- Regex tester - Test a regular expression against text and get match results plus text statistics - the quick validation loop for pattern development.
- Text analysis - Full text analysis - word/sentence stats, keyword extraction, and token count in one pass.
- Subtitle pipeline - Audio URL → finished subtitles in one call: transcribe the audio, emit the transcript as SRT/WebVTT/JSON cues, and report the text statistics - length, reading time, word count.
Related tools
Slugify
POST /api/slugifyTurn any text into a URL-safe slug (lowercase, hyphenated, diacritics stripped).
Case convert
POST /api/caseConvert text between camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, Title Case, lower, UPPER.
Keyword extraction
POST /api/keywordsTop keywords and two-word phrases by frequency (stopwords removed). Cheap, deterministic signal for routing, tagging, an…