Feedback tally by tool
GET /api/feedback/summaryWhat paying buyers said about each tool on this server: good and bad counts and the number of distinct wallets behind them, over a window you choose. Send GET /api/feedback/summary with no required fields (2 optional) 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 windowDays, tools, totals and note.
Every verdict counted here was written by the wallet that paid for that specific call, one per settlement transaction, so the numbers cannot be inflated by anyone who did not buy. Counts only - no payer addresses and no review text, ever. Bad counts are published beside good ones, including ours.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
days | number | no | Window in days, 1-3650 (default 90). |
slug | string | no | Limit the tally to one tool slug. |
Example request
curl -i "https://agent402.tools/api/feedback/summary?days=90"
Without payment this returns HTTP 402 Payment Required with the exact price for feedback-summary; any x402 v2 or MPP client pays it and retries.
Example response
{
"windowDays": 90,
"tools": [
{
"slug": "crypto-price",
"good": 14,
"bad": 1,
"total": 15,
"raters": 9
},
{
"slug": "research",
"good": 3,
"bad": 0,
"total": 3,
"raters": 3
}
],
"totals": {
"good": 17,
"bad": 1,
"total": 18,
"tools": 2
},
"note": "Counts only. Every verdict was written by the wallet that paid for that call, one per settlement transaction. `raters` is distinct wallets: ten verdicts from one wallet is one opinion. Who said what, and their words, are never published."
}
| Field | Type | Always present | In the example |
|---|---|---|---|
windowDays | number | yes | 90 |
tools | array of objects | yes | 2 items in the example |
totals | object | yes | 4 fields: good, bad, total, tools |
note | string | yes | Counts only. Every verdict was written by the wallet that paid for that call,... |
From an MCP client
catalog.call {
"slug": "feedback-summary",
"params": {
"days": 90
}
}
On the hosted connector at https://agent402.tools/mcp, catalog.call runs feedback-summary free (rate-limited, no wallet). Local install: npx -y agent402-mcp.
Errors and behavior
- Every field is optional. An input the tool rejects returns an HTTP 4xx whose body carries
error,tool,expected,requiredandexample. - A paid call that ends in any status of 400 or above is not charged over x402, MPP or a prepaid credits key: settlement is cancelled when the tool fails. The exception is a Tempo push credential, a transfer the buyer sent before the call: it settles before the tool runs, so if the tool then fails the payment is recorded as a refund owed to the paying wallet.
- Free tier: no outbound network call leaves the server for this tool, so proof-of-work (16 leading zero bits of sha256) pays for it.
- A
POSTwith a JSON body to /api/feedback/summary is served as this GET, with the body as the input. - An
Idempotency-Keyheader makes a retried paid call replay the first 200 instead of charging again (an answer larger than 1 MB is not replayed).
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?.(false); // keep your own spending ceiling in code
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://agent402.tools/api/feedback/summary?days=90");
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=feedback-summary")).json();
let n = 0;
while (lz(createHash("sha256").update(c.challenge + ":" + n).digest()) < c.difficulty) n++;
await fetch("https://agent402.tools/api/feedback/summary?days=90", { method: "GET", headers: { "X-Pow-Solution": c.token + ":" + n } });
Related tools
Rate a call you paid for
POST /api/feedbackTell this server whether a call you paid for delivered what it promised. Bound to the receipt: give it the settlement tr…
B20 activation check
GET /api/b20-activation-checkIs B20 live on Base mainnet? Queries the Activation Registry precompile for base.b20_asset and base.b20_stablecoin (or a…
B20 feature id
POST /api/b20-feature-idPure-CPU helper: turn a B20 feature string (e.g. base.b20_asset) into its bytes32 feature id and ready-to-send isActivat…
B20 payment memos
GET /api/b20-memosPayment memos attached to B20 transfers: pairs each Memo(address,bytes32) log with its Transfer at the previous log inde…
New B20 tokens
GET /api/b20-new-tokensRecently deployed B20 tokens on Base: scans the factory's B20Created logs over a block window, locates each new token by…
B20 token info
GET /api/b20-token-infoERC-20 metadata plus B20 signals for any Base address: name, symbol, decimals, total supply, best-effort paused/cap, byt…