SpendPreflight
All tools / ERC-8478 Payee Verification (Draft)

ERC-8478 Payee Verification (Draft)

Does an x402 payTo bind to the claimed ERC-8004 agent? Check the endpoint origin, registered wallet or signed delegation at one pinned registry block.

Read the request schema

Who it’s for

Payers, wallets and sellers checking an agent payment before signing.

Price

0.01 USDC per usable check; not-read is uncharged. Existing shared trial may apply.

Paid calls use x402 with USDC on Base. Read the quote before authorizing payment; examples below do not pay automatically.

Know the limits

Implements the ERC-8478 Draft, which may change. Base and Robinhood Chain (4663) registry reads. Public RPC availability and history are not guaranteed. Exactly nine outcomes; not-read and owner-only are never verified. Signed JSON attests to an observation, not reputation, safety or paid delivery. HTTPS and JSON data-URI registration files; unavailable IPFS transport or bounded event history stays not-read. Off-chain content is fetched now from a URI read at the pinned block. SpendPreflight is registered on Base as agent #1151628; the product page links its dated signed self-check.

In the draft author’s October 28, 2026 Robinhood Chain census, only 5 of 5,575 agents that answered with x402 payment requirements had payTo equal to their registered agentWallet. Most mismatches came from one shared-treasury operator; this is not evidence of fraud or an ecosystem-wide pass rate. Read the ERC-8478 Draft and measurement context.

Our registered payment identity

SpendPreflight's payout wallet (0xBf4164e07552e4c1b1B1597E72C7acAA3F0a1c58) is verifiably bound to its ERC-8004 identity on Base, agent #1151628. Registered November 2, 2026 Pacific (November 3 UTC); the live self-check returned verified-wallet on 2026-11-03T13:18:52.000Z at Base block 53461275.

Registration transaction on BaseScan · Dated live self-check: signed result and evidence

Dated live observation, not continuous monitoring, reputation, delivery, safety or permission to pay.

The ERC-8478 draft author’s October 28, 2026 Robinhood Chain census found 5 matching payment addresses among 5,575 agents returning x402 payment requirements (fewer than 0.1%), from 20,046 registered agents. Almost all mismatches came from one legitimate shared-treasury operator. This is a dated, single-chain observation, not an ecosystem-wide rate, ranking or evidence of fraud. Pinned census source and methodology.

A 30-second integration

Examples use placeholders. Plain requests to paid tools return a payment challenge, not a paid result. Free Lint can perform an unpaid public probe. Inspect the response status and evidence scope before using any result.

curl

curl -i https://api.spendpreflight.com/v1/payee-binding \
  -H 'Content-Type: application/json' \
  -d '{"requirement":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"10000","payTo":"0xBf4164e07552e4c1b1B1597E72C7acAA3F0a1c58"},"resource_url":"https://api.spendpreflight.com/v1/check"}'

MCP

Connect to https://api.spendpreflight.com/mcp. Call the existing tool:

{
  "name": "verify_payee_binding",
  "arguments": {
    "requirement": {
      "scheme": "exact",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "amount": "10000",
      "payTo": "0xBf4164e07552e4c1b1B1597E72C7acAA3F0a1c58"
    },
    "resource_url": "https://api.spendpreflight.com/v1/check"
  }
}

SDK / JavaScript

Use standard fetch alongside the SpendPreflight SDK; the example does not invent a dedicated exported method.

// Node.js SDK integration: use your explicitly budgeted fetch.
// Plain fetch below never signs or pays. There is no dedicated
// spendpreflight SDK helper for this operation.
const response = await fetch('https://api.spendpreflight.com/v1/payee-binding', {
  method: 'POST', headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({"requirement":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"10000","payTo":"0xBf4164e07552e4c1b1B1597E72C7acAA3F0a1c58"},"resource_url":"https://api.spendpreflight.com/v1/check"})
});
console.log(response.status, await response.text());

Frequently asked questions

What does a verified result mean?

verified-wallet or verified-delegation binds the resource origin and payee to the claimed agent at the stated registry block. It does not approve a purchase.

Which outcomes can I receive?

verified-wallet, verified-delegation, mismatch, invalid-delegation, endpoint-unlisted, owner-only, no-agent-wallet, no-identity, or not-read.

How do I name the identity?

Use requirement.extra.erc8004 with registry (eip155:chainId:address) and decimal agentId, or explicit registry and agentId fields. Conflicting identities are rejected. resource_url supplies the requested URL when requirement.resource is absent. Submit one accepts entry; never a list whose cheapest item could silently replace your selected payee.

What is checked in a delegation?

EIP-712 domain x402 Payee Delegation version 2, identity, current agent wallet, walletSetAt event, exact network/payTo/asset/origin or permitted wildcards, current-time window of at most 365 days, EOA recovery or ERC-1271 at the same block. Version 1 sunsets exactly February 1, 2027 UTC.

Are free summaries and monitoring included?

Free x402 Lint adds outcome-only lines for advertised identities. Basic and Pro monitoring re-check weekly from an existing unpaid observation and alert on changed outcomes, including unavailable evidence. No target payment is made.

Related tools

Free OFAC Address Check · Payee Screening · Listing Guard

Authoritative OpenAPI schemas · What this service stores · Practical guides