chainverdict.xyz

Your agent asks.
Pays $0.001.
Gets a verdict.

Checks an autonomous agent runs before it moves money or trusts a counterparty — token safety, wallet profiling, settlement verification, identifier validation. Every answer arrives with its evidence: what was checked, when, how the answer was produced, and what it does not mean. Billing is per call in USDC — no keys, no accounts, no humans in the loop.

evidence on every answerno fake precisionEd25519-signedpublic methodologyUSDC · Base · x402no signupA-grade · attested daily ↗independent conformance 16/16 ↗
ONE PURCHASE, ON THE WIRE
→ GET /v1/token/verdict/0x4200…0006
← 402 Payment Required · $0.01 USDC
→ retry + X-PAYMENT (signed, no gas)
← 200 OK · score 84 · "hold"
   _evidence: checks[4] · live-chain @block · conf 0.6
   limitations: "heuristic, NOT a security audit"
SETTLED ON BASE IN ~2s
HOLD · 84/100

Rate card

Every endpoint answers unpaid requests with a 402 quote. Agents pay per call and get JSON back. Verdicts come stamped HOLD CAUTION AVOID — each one carrying an _evidence object with the checks performed, data sources, freshness, confidence and limitations. Read the full methodology before you pay for anything.

ENDPOINTWHAT YOU GETPRICE
GET /v1/token/verdict/{addr}Token safety verdict on Base — bytecode risk capabilities (mint, pause, blacklist, proxy), ownership status, ERC-20 metadata, 0–100 score.$0.01
GET /v1/wallet/dossier/{addr}Wallet profile — EOA/contract, balance, activity band, behavioural flags, as-of block.$0.01
GET /v1/data/gasLive Base gas oracle — base fee, priority fees, congestion level, estimated transfer cost. What agents check before transacting.$0.002
GET /v1/data/activity/{token}Recent transfer count, volume, and unique wallet activity for a token on Base — a real on-chain liquidity/interest signal.$0.005
GET /v1/data/supply/{token}Total, circulating and burned supply with burn percentage — computed live from the chain.$0.003
GET /v1/data/portfolio/{address}ETH + canonical token balances (USDC, WETH, cbBTC, EURC) in one call.$0.004
GET /v1/data/blockLatest Base block: number, timestamp, tx count, gas utilization.$0.001
GET /v1/security/email/{domain}Email-spoofing posture: live SPF / DMARC / DKIM record check. Is this counterparty's domain protected against impersonation?$0.01
GET /v1/security/tls/{domain}Live TLS certificate check — validity, issuer, expiry countdown. Catch expired or misissued certs before trusting an endpoint.$0.01
GET /v1/security/typosquat/{domain}Brand look-alike / homoglyph structural analysis — flags c0inbase, b1nance, metamask-support and similar phishing patterns.$0.005
GET /v1/verify/payment/{txhash}On-chain settlement verification on Base — decoded ERC-20 transfers, amounts, counterparties, confirmations.$0.02
GET /v1/verify/token/{addr|symbol}Canonical token check on Base (USDC, EURC, WETH, cbBTC, USDT) — anti-phishing for stablecoin payments.$0.005
GET /v1/validate/lei/{lei}ISO 17442 LEI checksum validation — entity identifiers used in EMIR/MiFID reporting.$0.002
GET /v1/validate/isin/{isin}ISO 6166 ISIN checksum validation for securities identifiers.$0.001
GET /v1/validate/iban/{iban}IBAN mod-97 checksum + per-country length rules, normalized BBAN.$0.001
GET /v1/validate/vat/{vat}EU VAT format for 27 registries + deterministic checksums (DE, IT, LU, PL, SI).$0.001
GET /v1/validate/bic/{bic}BIC/SWIFT structure check, decomposed bank / country / location / branch.$0.001
POST /v1/doc/html-to-markdownClean Markdown from raw HTML.$0.002
POST /v1/batch/validateValidate up to 500 IBAN/VAT/BIC/LEI/ISIN identifiers in one call. One payment instead of 500, for reconciliation and onboarding runs.$0.10
POST /v1/doc/diffStructured diff — lines, words, or chars — with change hunks.$0.002

Every answer carries its evidence

A verdict that sounds certain is dangerous without its limits attached, and a stale "clean" result is worse than no result at all. So the evidence is part of the response — inside the signature, so it can't be stripped or edited in transit.

{
  "verdict": "caution",
  "_evidence": {
    "checksPerformed": ["Ownership and mint authority", "Proxy upgradeability",
                        "Holder concentration", "Transfer-restriction patterns"],
    "dataSources":     [{ "name": "Base mainnet RPC", "refresh": "per-request" }],
    "freshness":       { "basis": "live-chain", "maxUsefulAgeSeconds": 60,
                         "staleDataRisk": "A proxy can change its implementation
                                           after this check was performed." },
    "assurance":       { "level": "heuristic", "basis": "static analysis of contract
                                            state and holder distribution" },
    "semantics":       { "assuranceIsNotAProbability": "...NOT a calibrated probability...",
                         "signatureProvesIntegrityNotTruth": "...integrity is not truth..." },
    "humanApprovalRecommended": "unless_verdict_is_hold",
    "limitations": [
      "'caution' means a configured signal fired. It is NOT a finding of fraud,
       and 'hold' is NOT an endorsement or a recommendation to transact.",
      "Heuristic static analysis, not a security audit. A proxy contract can
       change its implementation after this check.",
      "Informational risk signal only; not regulated financial, legal or
       compliance advice."
    ]
  }
}

Deliberately not a score. Assurance is an ordinal label — deterministic, observed, exact-list-match, structural, heuristic — describing how the answer was produced. It is not a number, because a number would imply a calibration ChainVerdict has not performed. An IBAN checksum is deterministic because the arithmetic is certain; that still proves nothing about whether the account exists.

And a signature proves integrity, not truth. It shows this response came from ChainVerdict unaltered. A signed wrong answer is still wrong — and still signed. Both statements ship on every response and are documented at /v1/methodology, free to read so a buyer can audit how a verdict is produced before paying for one.

Call it in 30 seconds

Any x402 client works. With x402-fetch and a funded Base wallet:

import { wrapFetchWithPayment } from "x402-fetch";
const payFetch = wrapFetchWithPayment(fetch, account);
const res = await payFetch(
  "https://chainverdict.xyz/v1/token/verdict/0x4200000000000000000000000000000000000006"
);
console.log(await res.json()); // → verdict, score, reasons

Three services, one operator

ChainVerdict is one of three. All are payable per call over x402 with no account, all sign their responses, and all publish what their answers do not establish. Machine-readable manifest ↗

ServiceWhat it answersFrom
ChainVerdict
chainverdict.xyz
Checks before money moves: token safety, wallet profiling, settlement verification, identifier and domain posture. $0.001
TradeRails
trade.chainverdict.xyz ↗
Trade and logistics identifiers: GTIN/GS1, SSCC-18, ISO 6346 containers, IMO numbers, HS-code triage. The check digits are trivial arithmetic and priced at the floor — they exist as preflight steps in trade flows, not as products. $0.004
x402pulse
pulse.chainverdict.xyz ↗
Independent observation of third-party x402 endpoints — quality, uptime, price drift — and the anchored historical archive of all of it. $0.03

TradeRails — every endpoint trade.chainverdict.xyz

ENDPOINTWHAT YOU GETPRICE
GET /v1/gtin/validate?code=GTIN-8/12/13/14 structure and check digit, with the normalised GTIN-14.$0.004
GET /v1/gtin/checkdigit?body=Computes the missing GS1 mod-10 check digit for a partial code.$0.004
GET /v1/gtin/prefix?code=GS1 prefix lookup — issuing member organisation for a barcode.$0.004
GET /v1/sscc/validate?code=SSCC-18 logistics unit serial code validation.$0.004
GET /v1/container/validate?code=ISO 6346 shipping container number, owner code and check digit.$0.004
GET /v1/imo/validate?code=IMO vessel number checksum (ISO/IMO seven-digit scheme).$0.004
GET /v1/gs1/decode?data=Parses a GS1 element string into its Application Identifiers.$0.006
POST /v1/gs1/decodeSame decoder for payloads too long for a query string.$0.006
GET /v1/hs/classify?q=HS-code triage from a goods description — candidate headings with the reasoning, as a starting point for a customs broker, not a classification ruling.$0.05

x402pulse — every endpoint pulse.chainverdict.xyz

ENDPOINTWHAT YOU GETPRICE
GET /v1/verdict?url=Measured quality verdict on a third-party x402 endpoint — uptime, latency, 402 correctness, price stability, from the observation record.$0.03
GET /v1/rankingsCross-endpoint ranking of every observed x402 service by measured quality.$0.07
GET /v1/attest?url=Ed25519-signed attestation of an endpoint’s observed record, for a third party to cite.$0.12
GET /v1/feedThe current observation feed — every endpoint, latest probe, in one call.$0.15
GET /v1/archive/fullThe complete anchored archive since 7 August 2026, with the daily Merkle roots and their OpenTimestamps proofs.$0.50
GET /v1/status /v1/value /v1/feed/sample
/v1/methodology /v1/datasets/manifest /v1/archive/anchors
Free. Enough to check what is being observed, how, and whether the archive is what it claims — before paying for anything.free

33 paid endpoints across the three services (34 counting /v1/gs1/decode twice, once per method). Every one of them is published in the Coinbase x402 Bazaar discovery catalogue, and every price on this page is the price the live 402 quote returns — a test fails the build if those two ever disagree.

The archive

x402pulse has been probing third-party endpoints every ten minutes since 7 August 2026. Each day is reduced to a Merkle root, chained to the previous day, and timestamped into Bitcoin via OpenTimestamps.

Anyone can rebuild this software and start observing tomorrow. Nobody can produce a timestamp dated earlier than they created it. That is the difference between an archive and a claim — and it means the observation record can be checked without trusting the operator.

Check a receipt yourself

Paste any signed response into the verifier ↗. It checks the Ed25519 signature in your own browser against the published key and renders the evidence record. Nothing is sent anywhere — a verification tool you have to trust the server for is not a verification tool.

A valid signature proves a response came from the service unaltered. It does not prove the answer is correct. A signed wrong answer is still wrong, and still signed. That sentence ships inside every response and is meant literally.

Methodology OpenAPI llms.txt Quality attestation Independent conformance report (Cairn, 4 Sep 2026) MCP on Smithery x402 discovery Verify a receipt Archive Status
Operated by Alexander Balieu, independent professional established in Luxembourg. contact@chainverdict.xyz
Informational signals for automated decision support — not regulated financial, legal or compliance advice, and not a substitute for any screening or reporting obligation you may have. See methodology & limitations.