Skip to main content
Request for Verification: 402Status: Live, buying daily

Paid is on chain.Delivered is not.

x402 proves that an agent paid. Nothing in x402 proves that the API delivered. vet402 buys from x402 APIs itself and publishes the result of each purchase, so you can check a seller before your agent pays it.

Independent measurements of how AI agents pay with stablecoins over x402, including USDC where that is the pinned asset. Check a seller before paying on its own page. Counts for each chain are on the chain pages.

vet402 check

Public, no account

Example result

The latest settled purchase in the public export of the last day.

Endpoint
GET sift.srv1996466.hstgr.cloud/v1/extract
L0
pass probed 2026-11-07 16:40 UTC
L1
1 of 1 settled, 1 delivered last 30 days
L2
no_declaration

Open this endpoint's record

Where the proof stops in an x402 purchaseThe agent sends a request. The API answers 402 Payment Required. The agent retries with payment. The API settles the payment on chain, which leaves a transaction. The API sends a response, which leaves no proof anywhere.Agentx402 APIChain1 request2 402 Payment Required3 retry, paid4 settletx on chainproof of payment5 response ?proof of delivery: none
Figure 1. Where the proof stops. Step 4 leaves a transaction. Step 5 leaves nothing, so vet402 records it.

The whole ledger

1,249 of 14,384 settled purchases did not count as delivered.

Whole ledger, read : 21,040 paid attempts, 14,384 settled, 13,135 delivered. Lowest share among chains with 100 or more settled, over settled purchases that are not held: Tempo, 113 of 164. 746 answered 4xx, held as inconclusive because a 4xx can come from the shape of vet402's request. Source (CC BY 4.0).

One purchase

402
Endpoint
sift.srv1996466.hstgr.cloud/v1/extract
Price
0.015 USDC
Chain
Base
Payment
settled, re-read on chain
HTTP after payment
200
Delivered
yes, 2xx
Against declaration
no_declaration
Transaction
0x4eba…95a8

Reproduce this line

curl -sL "https://vet402.com/api/v1/observatory/export.csv?days=1" | grep 90879fdb
Rule: the settled purchase with the latest time in the public export of the last day. It is 1 of 166 settled in 213 rows from 2026-11-08 15:30 to 2026-11-09 12:02 UTC. Everything vet402 bought from sift.srv1996466.hstgr.cloud.

Latest settled purchases

TimeHostChainHTTPDelivered
sift.srv1996466.hstgr.cloudBase200yes, 2xx
sift.srv1996466.hstgr.cloudBase200yes, 2xx
tariffmonkee.comBase200yes, 2xx
api.annalist.devBase200yes, 2xx
audit.liquidlogicx.comBase200yes, 2xx

Two ways in

For agent developers

The same facts, inside your agent. Three lines after the import.

npm i @vet402/sdk

import { createVouchClient } from "@vet402/sdk"

const vet = createVouchClient({})
const { resource } = await vet.resolve("https://api.example.com/v1/quote")
const d = await vet.getDecision(resource!.resource_id)
// pay when d.recommendation is "ALLOW" and d.degraded is false

No key needed up to 10 requests a minute.

Read the API reference

For x402 sellers

vet402 may already have bought from your API. Put your domain in the check above to see each purchase.

See
Each purchase, with its transaction and HTTP status.
Show
The receipt badge on your endpoint's record page.
Dispute
Any record, free, no account. Corrections log

How to dispute a record

What this is
x402 is how an agent pays an API. vet402 buys from those APIs itself and publishes whether each paid request came back with a successful answer. A 4xx or 5xx, an empty body or a 202 does not count. That shows who answers once paid. It does not check that the content is right.
What you give us
Nothing to look: no wallet, no account, no card. A free key only for score lookups and higher API limits.
What vet402 does not do
Guarantee a seller, refund, handle chargebacks, check identity (KYC), or hold your funds. A spending cap you set runs in your own process, in the SDK.

Customer count and revenue: not published. Counts on this page are read from observatory/state, export.csv and the decision document for the purchase line, at the time of the read. Methodology.

Where purchases settled

One row per chain with a settled purchase in the public ledger. L1 figures by chain.

Settled purchases by chain
ChainAssetSettled purchasesDeliveredSettled, not deliveredOf which held (4xx)
BaseUSDC11,45510,584871487
SolanaUSDC1,0771,0205747
CeloUSDC40840350
TempoUSDC.e364113251200
ArcUSDC27326496
Arbitrum OneUSDC24324031
StellarUSDC29629600
XRPLRLUSD166131351
BNB ChainUSD16852162
Avalanche C-ChainUSDC343222

Robinhood Chain (4663, mainnet): vet402 /rwa rebuilds a wallet's Stock Token holdings and trade history from public chain data, and shows what it could not parse. The purchase lane and the settlement index are not supported.

Network Working GroupRequest for Verification: 402Category: Independent MeasurementStatus: Live, buying dailyETHOnline 2026: payOrRefuse won Bazantic →
vet402x402 EconomyNovember 2026How the older score relates to L0–L2

We buy. We settle. We publish the measurements.

402

Abstract

vet402 buys from x402 endpoints, re-reads each payment on-chain, records what came back, checks it against the seller's output declaration when there is one, and publishes the results. A weaker tier of evidence is not rounded up into a stronger one: the settlements vet402 bound to its own signature and the ones matched on amount and payee alone are published as separate counts. See both counts.

What is x402?

x402 is a machine-payment protocol built on the HTTP 402 "Payment Required" status code. An API returns 402 with payment terms, the caller (often an AI agent) pays on-chain, and retries the request with proof of payment attached. There's no account, no invoice, and no human approving the transaction — which is what makes it fast for agent-to-agent commerce, and also what makes it blind: the provider sees the payment only after it has already settled.

More questionsLive measurementsScore a wallet

1.The problem this memo addresses

1.1

x402 settles payments finally and irreversibly. Proof of payment exists on-chain. Proof of delivery does not exist anywhere.

1.2

Registries can be written for cents: 98.7% of ERC-8004 reputation feedback on Ethereum has no verifiable transaction behind it. [ARXIV-2606]

1.3

As of 2026-04-21, the Visa and Artemis PDF reports raw x402 activity of $135.7M across 178.3M transactions, and the article reports wash-and-test-adjusted totals of $15.0M across 109.6M transactions. The gap between those two published totals is 38.5% of transactions and 88.9% of volume. [VISA-ARTEMIS-2026]

2.Verification levels

Four levels, in order of what they cost us to run and what they prove. A result never moves up a level: an L0 probe cannot report settlement, and an L3 opinion is never folded into an L0–L2 fact.

L0 Liveness

Does the endpoint answer correctly?

How: Probe, no purchase

Output: pass / fail / unverified

L1 Settle-through

Does the payment settle, and does a non-empty 2xx come back?

How: Real purchase

Output: n of m settled, n delivered

L2 Conformance

Does the response match the seller's own declaration?

How: Purchase + machine diff

Output: match / mismatch / no_declaration / not_checked

L3 Quality

Is the content any good?

How: Not built

Output: none: this site presents no L3 opinion

The L2 output words in that table are the ledger column l2_schema: match, mismatch, no_declaration, or not_checked. The decision document and the facts document store conform, mismatch, undeclared, or not_checked. conform is written when the re-read L2 value (l2_reading) of the latest delivery is match. mismatch is written when that re-read value is mismatch. An older mismatch row with no recorded reason is re-read first, and a cut body reads not_checked. In the other cases the decision word is not_checked when the current declaration names output (a required key or an example property), and undeclared when it does not.

2.1

The trust score this API returns today (0–100, banded ALLOW / WARN / BLOCK) predates these levels. The resource decision reads L0–L2 today. The score stays available to API and SDK callers. A score is never reported as an L0–L2 result. How the score is composed. Full definitions of pass / fail / unverified and the L1 purchase rules: observatory methodology.

3.What a verdict must carry

3.1

A published L0 fail shows each probe's time, method, HTTP status, latency and reason code. A published L1 failure also shows the amount vet402 signed for, the chain and, when there is one, the transaction. Response bodies are not published.

3.2

Unverifiable is not a verdict. vet402 says "unverified", never "bad". For a caller about to move money, a check that could not be completed does not read as ALLOW: the resource decision returns WARN with degraded: true or a 503, and the payee score returns a fail-closed BLOCK. The public page prints “not verifiable right now” and no number. Why the two answers differ.

3.3

Sellers can dispute any result for free. A dispute filed on the record form puts an active listing on a priority list that an L0 run probes before its ordinary queue, up to 50 a run and 5 from one site, with published fails that need a re-probe ahead of disputes. A listing whose URL has an unfilled path parameter is not put on that list. A listing probed in the past 60 minutes waits for a later run, and a dispute that no run reaches within 7 days leaves the list. The scheduled L0 run is at 10:30 UTC, and an L0 run at another time can measure the listing first. A signed dispute, which runs one fresh L0 probe of the endpoint when it is accepted, records it like any other probe. The publication gate is unchanged. One failing probe does not publish a fail, and one passing probe becomes the published verdict until the next probe. A dispute does not trigger a new L1 purchase. How to dispute a result. Corrections are logged publicly — the corrections log.

4.Implemented and live

Everything in this section is running right now and can be checked without asking us.

Figure 1. Endpoints at each level of evidence as of the 2026-11-09 (UTC) catalog snapshot. Bars are proportional to the first row. The first row is every endpoint on record and includes delisted ones (25,982). Active means vet402 has not closed the record. A record from the CDP x402 Bazaar stays active after it leaves the catalog; the latest full read of that catalog saw 32,562 listings. The L0 row counts active records whose latest probe returned a valid 402 (publishedPassActive); 56,118 of them were last probed more than 7 days ago, and a further 14,780 endpoints whose latest probe passed are delisted and are not in this row (publishedPass = 89,704 includes them). The two L1 rows count endpoints, active or not, with at least one paid attempt settled on-chain: first those where the seller named the transaction in its own settlement receipt, then those with no seller receipt, where none of the settled transfers was named by the seller and vet402's own settlements index found them, or Circle's Gateway API named the batch (settlement_source in the ledger export). Together they are the 8,777 endpoints of l1.endpointsSettled in /api/v1/observatory/state. Their own denominator is the 11,498 endpoints L1 has attempted a paid purchase against, not the first row — read as a share of those, the two L1 rows together are 76.3%.
implemented

The x402 Observatory

Each endpoint vet402 has read from the public discovery catalog, and whether its payment wall answers a valid 402. The catalog is read in runs roughly two hours apart; endpoints are probed on a rolling schedule. 21.9% of 131,758 active records carry a probe from the last 7 days (page read 2026-11-09T14:41:08.227Z). The response at https://vet402.com/api/v1/observatory/state carries its own retrievedAt. This page reuses that shared read for up to 300 seconds. The table shows L0 (payment-wall check) and L1 (real purchases whose transfer vet402 re-read on-chain, whether the seller's receipt or vet402's own index named the transaction) in separate cells; they are never mixed.

Open the observatory

implemented

Wallet control, proved by signature

Prove control of a wallet by signature, get a public verification page and an SVG badge.

Verify a payee

implemented

vet402's own agent identity

Registered on Celo mainnet as ERC-8004 agent #9907 and as agent #194 in the Self Agent ID registry, so an agent can look up who publishes these reports before it relies on them.

Read the registration file

implemented

Drop-in middleware, REST API and MCP tool

An x402 middleware package, a REST API, and an MCP tool that answers the question a spending agent should ask before it pays.On npm: npm i @vet402/sdk, @vet402/middleware, @vet402/mcp-server. @vet402/* is the canonical scope; @vouchscore/* is the former name, same publisher. Unscoped vouch-sdk and @getvouch/sdk are unrelated.

API reference

implemented

Public accuracy ledger

The misfire rates vet402 already has a sample for are published: the L0 false-fail and false-pass rates against re-measurement ship as l0 on /api/v1/accuracy. The verdict-outcome rates wait for a sample — until enough issued verdicts have resolved, the page below says so instead of printing a number. What is printed goes up whether or not the numbers flatter us.

Measured accuracy

implemented

Impact ledger

Real purchases made and published with evidence — settled and failed alike — plus catalog coverage and a hash-anchored ledger (daily prev-hash chain; on-chain anchoring ships behind a flag, OFF by default), synthesized from the sections above into one page for grant reviewers and integrators.

View impact

5.Status of this work

Live work is in section 4. This section is only what has not shipped, and this page will not describe it as though it had.

building

Writing to the Validation Registry

Verification records will be written to the ERC-8004 Validation Registry, which is nearly unused so far and holds nothing from vet402.Why it has not happened yet, stated plainly: the registry is written in one direction only. An agent’s owner names a validator and opens the request; the validator answers it. A validator cannot open a request about someone else’s agent — validationRequest reverts with Not authorized, which is what our fourteen attempts between 2026-08-21 and 2026-09-03 did. So this is not a build problem. In the 750,000 blocks of Base we read on 2026-09-03 (roughly 17 days) the whole registry received two events, from one validator, about one agent, and none named us. We can answer the first request the day someone sends one; until then the honest number is zero.

Progress is posted as it lands, on X @vet402_com and GitHub.

A.Access tiers

Usage-based. The free tier is enough to wire a check into an x402 flow and see real results before committing to anything.

Free$0

1,000 lookups / month

REST, MCP and x402 middleware, TypeScript SDK

Pro$49/mo

50,000 lookups / month

Everything in Free, plus score history and priority support

Scale$199/mo

500,000 lookups / month

Everything in Pro, at the highest rate limit

Get a free API key

Paid tiers are upgraded from Billing once a key exists. No card is required to start. Already have a key? Open Billing.

B.References

[ARXIV-2606]
98.7% of ERC-8004 reputation feedback on Ethereum has no verifiable transaction behind it. The paper reports this per chain; §1.2 quotes the Ethereum figure, which is the lowest of the three it measures. arXiv:2606.26028
[VISA-ARTEMIS-2026]
As of 2026-04-21, the Visa and Artemis PDF reports raw x402 activity of $135.7M across 178.3M transactions, and the article reports wash-and-test-adjusted totals of $15.0M across 109.6M transactions. The gap between those two published totals is 38.5% of transactions and 88.9% of volume. $135.7M and 178.3M are in the PDF. $15.0M and 109.6M are in the article and in the archived copy. The two rates are that gap, not a rate printed in either document. Visa and Artemis, Agentic Payments from the Ground Up, July 2026 (archived copy). The PDF is Agentic Payments report (PDF). The PDF states the raw totals and dates them as Artemis Analytics data as of April 21, 2026. The live article page returned HTTP 500 on earlier checks and answered HTTP 200 again when rechecked on 2026-09-29.