Plain-English description of every signal behind the numbers on this site, what they can and cannot prove, and how to dispute a rating.
quality.l30DaysTotalCalls and payer counts.0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913) transfer logs to each merchant's payTo address over a 7-day window.No private data, no scraping behind authentication, no payment interception. Everything used here is publicly readable by anyone.
Each scored merchant gets a wash-risk score from 0 (fully organic-looking) to 100, combining eight signals over its observed on-chain receipts:
Grades: A (<10), B (10–19), C (20–41), D (42–69), F (≥70). Organic-adjusted calls = claimed 30d calls × (1 − score/100). Wash-rank inflation = organic-adjusted rank − raw-volume rank: how many leaderboard positions the raw number buys beyond what organic-adjusted volume supports.
The letter grades in the Wash Report come from an additive wash-risk score, capped at 100. Each indicator has a severity from 0 to 1 that is multiplied by a fixed weight; weights deliberately sum past 100 so several strong tells saturate the score. Source: packages/scoring/src/wash-risk.ts in agentkit, methodology version 0.1.0.
| Indicator | Weight | Severity rule |
|---|---|---|
| Few distinct payers | 45 | 1 payer = 1.0; 2 = 0.9; 3–4 = 0.65; 5–9 = 0.35; 10+ = 0 |
| Self-dealing payout loops | 25 | share of revenue whose payer is reachable from the merchant's own payouts |
| Revenue concentration | 20 | (HHI across payer clusters − 0.1) / 0.9, floored at 0 |
| Shared controlling key (Algorand rekey) | 20 | share of payers sharing an auth address; not applicable on Base |
| Fresh payer wallets | 15 | median wallet age at first payment: <1d = 1.0; <3d = 0.7; <7d = 0.4; <30d = 0.15 |
| Metronomic timing | 15 | needs ≥5 payments; max of (1 − CV/0.3 when CV < 0.3) and the share of identical-interval gaps when above 50% |
| Single-funder ring | 15 | share of payers funded by one wallet, counted only above 30% |
Levels: low <20, medium 20–44, high 45–69, critical ≥70. Where the claimed-vs-observed gap is the main driver (no on-chain receipts despite claimed calls) the row is shown as n/v rather than graded.
Separately, endpoints with enough data (at least 50 payments from at least 10 payer clusters) get an organic-revenue-quality (ORQ) score: a weighted geometric mean of eight sub-scores — funding graph 0.20, self-dealing 0.20, retention 0.15, temporal regularity 0.15, wallet fingerprint 0.10, amount distribution (including a Benford first-digit test) 0.08, concentration 0.07, cross-endpoint overlap 0.05 — with each sub-score floored at 0.02 so one zero caps rather than annihilates the result. ORQ grades: A ≥85, B ≥70, C ≥50, D ≥30, else F. A 90% confidence interval is computed by bootstrap, resampling whole payers (not individual payments) so each payer's timing structure is preserved; the interval is widened if needed to contain the observed score. Most endpoints today are below the data floor and receive only the wash-risk score above.
The integrity report and the per-merchant audit use a second, simpler method alongside the ORQ score: every payer wallet of a merchant is traced to its funders, and its volume is placed in one of five classes.
Shares are volume-weighted over the traced payers (up to 40 per merchant, 1,000 recent transfers per address). A merchant-funded payer is not proof of intent: a merchant may fund its own customers' agents for testing or promotion. The aggregate report names no merchant; the paid audit returns the per-payer evidence for one payTo. The same method was applied to Base using x402scan and Blockscout data. Free report: blocksigner.org/provenance/integrity; audit: /commission/washaudit?payTo=.
x402 payments frequently settle through a facilitator, which may batch or defer transfers. In that architecture, few or no direct on-chain USDC transfers to the merchant's payTo address is normal and legitimate. Where a high score is driven mainly by missing on-chain receipts or a near-zero visible payer set — rather than by positive wash signals like metronomic timing or self-dealing loops — we display n/v (not verifiable): insufficient on-chain visibility (batch settlement possible) instead of a letter grade. The raw score is preserved in the open-data JSON for transparency, flagged with the same caveat.
Wrapper Watch flags endpoints whose public listing exhibits signatures consistent with reselling a first-party API from a domain the brand does not control. Signals, each contributing points to a 0–100 likelihood score:
prompt/query/url field), consistent with forwarding to an upstream API.*.railway.app, *.vercel.app) while referencing premium first-party data.Thresholds: flagged at ≥45; high confidence ≥70; medium ≥50. Every flag means “suspected — verification recommended”, and the resale-authorization status of every flagged endpoint is unknown to us. Brand pages exist so the one party who can verify authorization — the brand's own API/trust team — can review the evidence quickly.
payTo wallet may include non-x402 USDC receipts; we cannot always separate them.If you operate a listed endpoint or represent a named brand and believe a rating or flag is wrong — or you can demonstrate authorization — open an issue at github.com/apeirontrade/provenance-site/issues. Provide the endpoint URL and any evidence you can share. We correct errors and annotate verified authorizations in the next weekly build, and will publish the correction alongside the original.
This site publishes independent statistical analysis of public blockchain data and public API-registry listings, in the tradition of independent ratings and consumer-protection research. Statements about named endpoints are limited to (a) verifiable public facts (listings, prices, on-chain transfer patterns) and (b) clearly-labelled statistical opinions derived from them (“consistent with”, “suspected”, “verification recommended”). No statement on this site asserts, and none should be read as asserting, that any named party has committed fraud, breached a contract, or violated any law.