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 transaction from that call's PAYMENT-RESPONSE (or Payment-Receipt) header and a verdict of "good" or "bad", and only the wallet the ledger records as having paid for that exact call can write it - so a rating here is always a real customer about a real purchase. One verdict per settlement transaction (sending another replaces yours, it never stacks). A "bad" verdict requires a reason of at least ten characters and is logged for a human with the sha256 of the bytes that call actually served, so the complaint names a specific answer rather than a bad day. Your words are stored for the operator and are never published; the public tally is counts only. Requires an EIP-3009 payment from the same wallet; the $0.001 is the settlement floor, not a charge for complaining, and every refusal is free.
Input
| Field | Type | Description |
|---|---|---|
tx * | string | Settlement transaction of the call you are rating, as carried in that response's PAYMENT-RESPONSE (x402) or Payment-Receipt (MPP) header. |
verdict * | string | "good" (it delivered what it promised) or "bad" (it did not). |
reason | string | What happened, in your own words. Optional on "good", required on "bad" (10 characters minimum, 1000 maximum). Stored for the operator, never published. |
Example output
{
"recorded": true,
"replaced": false,
"item": "crypto-price",
"verdict": "good",
"settlementTx": "0x2f1fecade9bd945e7817c11e5a34cafe6b349dd8c92a7587efed1de476bddfeb",
"settledAt": "2026-09-03T15:16:06.000Z",
"amountUsd": 0.01,
"responseSha256": "7d2a9b1c4e6f8a0b2c4d6e8f0a1b3c5d7e9f1a3b5c7d9e1f3a5b7c9d1e3f5a7b",
"note": "responseSha256 is sha256 over the exact JSON bytes that call returned. It identifies the answer your verdict is about."
}
Try it - see the 402 challenge (free)
curl -i -X POST https://agent402.tools/api/feedback \
-H "Content-Type: application/json" \
-d '{"tx":"0x2f1fecade9bd945e7817c11e5a34cafe6b349dd8c92a7587efed1de476bddfeb","verdict":"good"}'
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/feedback", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"tx": "0x2f1fecade9bd945e7817c11e5a34cafe6b349dd8c92a7587efed1de476bddfeb",
"verdict": "good"
}),
});
Related tools
x402 market pulse
GET /api/x402-market-pulseLive cross-provider x402 market sentiment. topProviders: the top x402 sellers ecosystem-wide, ranked by REAL on-chain ac…
try in playground →x402 quote
GET /api/x402-quoteProbe any URL and decode its HTTP 402 payment requirements (price, asset, network, pay-to) into clean JSON - what an age…
try in playground →USDC balance
GET /api/usdc-balanceRead the USDC balance of any address on Base, Polygon, Arbitrum, Optimism, Ethereum, Monad, Celo, Avalanche, or Sei. Rea…
try in playground →