Keyword extraction
POST /api/keywordsTop keywords and two-word phrases by frequency (stopwords removed). Cheap, deterministic signal for routing, tagging, and dedup.
Input
| Field | Type | Description |
|---|---|---|
text * | string | Text to analyze (max 500KB) |
limit | number | Max keywords (default 15) |
Example output
{
"keywords": [
{
"term": "request",
"count": 4
},
{
"term": "payment",
"count": 4
},
{
"term": "agent",
"count": 3
}
],
"phrases": [
{
"term": "x402 protocol",
"count": 2
},
{
"term": "payment terms",
"count": 2
}
]
}
Try it - see the 402 challenge (free)
curl -i -X POST https://agent402.tools/api/keywords \
-H "Content-Type: application/json" \
-d '{"text":"The x402 protocol lets an agent pay for a single request. A server answers with payment terms, the agent signs a stablecoin authorization, and the request is retried with the payment attached. Payment settles on chain, so the server needs no account and the agent needs no subscription. The x402 protocol prices each request on its own, and payment terms travel with the request itself.","limit":10}'
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";
import { metaTitle, metaDescription } from "./seo-meta.js";
const client = new x402Client();
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://agent402.tools/api/keywords", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"text": "The x402 protocol lets an agent pay for a single request. A server answers with payment terms, the agent signs a stablecoin authorization, and the request is retried with the payment attached. Payment settles on chain, so the server needs no account and the agent needs no subscription. The x402 protocol prices each request on its own, and payment terms travel with the request itself.",
"limit": 10
}),
});
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=keywords")).json();
let n = 0;
while (lz(createHash("sha256").update(c.challenge + ":" + n).digest()) < c.difficulty) n++;
await fetch("https://agent402.tools/api/keywords", { method: "POST", headers: { "X-Pow-Solution": c.token + ":" + n, "Content-Type": "application/json" }, body: JSON.stringify({"text":"The x402 protocol lets an agent pay for a single request. A server answers with payment terms, the agent signs a stablecoin authorization, and the request is retried with the payment attached. Payment settles on chain, so the server needs no account and the agent needs no subscription. The x402 protocol prices each request on its own, and payment terms travel with the request itself.","limit":10}) });
Part of these workflows
This tool is one step in 4 curated multi-tool workflows - agents can fetch the whole sequence as an MCP prompt or call https://agent402.tools/api/skill-packs/{slug}/prompt.
- Content grade - Grade a page's content quality - extract the readable content then analyze keyword density.
- Feed watch - Monitor an RSS/Atom feed in one call: parse the feed, read the top story in full, extract the keywords driving the cycle, and diff the item list against your last run to isolate what's new.
- Text analysis - Full text analysis - word/sentence stats, keyword extraction, and token count in one pass.
- 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.
Related tools
Slugify
POST /api/slugifyTurn any text into a URL-safe slug (lowercase, hyphenated, diacritics stripped).
try in playground →Case convert
POST /api/caseConvert text between camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, Title Case, lower, UPPER.
try in playground →Text statistics
POST /api/text-statsCharacters, words, sentences, paragraphs, average word length, reading time, and an LLM token estimate for any text.
try in playground →