Rate a call you paid for

$0.001 per call · USDC via x402 · POST /api/feedback

Tell this server whether a call you paid for delivered what it promised. Send POST /api/feedback with the required fields tx and verdict and pay $0.001 per call over x402 with USDC on an EVM chain (the paying wallet is the identity). It returns a JSON object with recorded, replaced, item, verdict, settlementTx and 4 more.

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.

Category: Payments & x402 · Tags: feedback rating receipt reputation quality x402 · Also found as: rate review report-issue verdict

TRY IN PLAYGROUND →

Parameters

NameTypeRequiredDescription
txstringyesSettlement transaction of the call you are rating, as carried in that response's PAYMENT-RESPONSE (x402) or Payment-Receipt (MPP) header.
verdictstringyes"good" (it delivered what it promised) or "bad" (it did not).
reasonstringnoWhat happened, in your own words. Optional on "good", required on "bad" (10 characters minimum, 1000 maximum). Stored for the operator, never published.

Example request

curl -i -X POST https://agent402.tools/api/feedback \
  -H "Content-Type: application/json" \
  -d '{"tx":"0x2f1fecade9bd945e7817c11e5a34cafe6b349dd8c92a7587efed1de476bddfeb","verdict":"good"}'

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

Example response

{
  "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."
}
FieldTypeAlways presentIn the example
recordedbooleanyestrue
replacedbooleanyesfalse
itemstringyescrypto-price
verdictstringyesgood
settlementTxstringyes0x2f1fecade9bd945e7817c11e5a34cafe6b349dd8c92a7587efed1de476bddfeb
settledAtstringyes2026-09-03T15:16:06.000Z
amountUsdnumberyes0.01
responseSha256stringyes7d2a9b1c4e6f8a0b2c4d6e8f0a1b3c5d7e9f1a3b5c7d9e1f3a5b7c9d1e3f5a7b
notestringyesresponseSha256 is sha256 over the exact JSON bytes that call returned. It ide...

From an MCP client

catalog.call {
  "slug": "feedback",
  "params": {
    "tx": "0x2f1fecade9bd945e7817c11e5a34cafe6b349dd8c92a7587efed1de476bddfeb",
    "verdict": "good"
  }
}

The hosted connector at https://agent402.tools/mcp needs a payment for feedback; the stdio package pays it from a wallet or from AGENT402_CREDITS_KEY (wallet only for this tool). Local install: npx -y agent402-mcp.

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?.(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", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    "tx": "0x2f1fecade9bd945e7817c11e5a34cafe6b349dd8c92a7587efed1de476bddfeb",
    "verdict": "good"
  }),
});

Related tools

Feedback tally by tool

FREE w/ compute · or $0.001 · GET /api/feedback/summary

What paying buyers said about each tool on this server: good and bad counts and the number of distinct wallets behind th…

Verify x402 settlement

$0.004 · GET /api/x402-verify

Confirm a USDC payment actually settled: given a tx hash (and network), returns whether it succeeded and the USDC transf…

My usage (wallet-keyed purchase history)

$0.005 · POST /api/my-usage

Your own purchase history, keyed to the wallet that pays for the call - no wallet parameter, no signup: the x402 payment…

Build USDC transfer authorization

$0.003 · POST /api/transfer-authorization

Build the EIP-3009 transferWithAuthorization typed data for a gasless USDC transfer on Base/Polygon/Arbitrum/Optimism/Et…

Transaction status

$0.001 · GET /api/tx-status

Check the confirmation status of a transaction by hash on Base/Polygon/Arbitrum/Optimism/Ethereum/Monad/Celo/Avalanche/S…

x402 security audit

$0.01 · GET /api/x402-audit

Grade any x402 seller's payment-security posture from the outside - a read-only black-box check mapped to the 'Five Atta…