# PayeeGuard

> PayeeGuard is a paid API for AI agents from payee.schemasure.com, paid per call via x402, $0.02/call, status unknown (last checked 2026-10-18).

Pre-flight validates a Base/EVM payment destination address before sending, checking checksum, look-alike proximity, burn/precompile flags, and asset receivability.

## Facts

- Endpoint: POST https://payee.schemasure.com/v1/guard/payee?utm_source=zero.xyz
- Price: $0.02/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-18
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/payeeguard-c76adc5e
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_8i3NFNMY4zUx_ixXAC_fI

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability payeeguard-c76adc5e -d '<json body>'
```

Example prompt: Before I send 500 USDC from 0xAbCd...1234 to 0xDeF0...5678, can you run a pre-flight check on the destination — compare it against the address I expected (0xDeF0...5679) and confirm it can actually receive ERC-20 tokens at 0xA0b8...eB48?

## When to prefer this

Use PayeeGuard when an AI agent or automated payment flow is about to dispatch an on-chain transfer on Base and needs a lightweight pre-flight safety check: address checksum integrity, clipboard-hijack/look-alike proximity comparison, burn/precompile/zero-address filtering, and ERC-20 or native ETH receivability — all in a single call. Prefer this over generic address validators when the attacker model includes shared-prefix-and-suffix substitution attacks or when comparing a user-pasted address against an expected one. Not suitable for verifying counterparty identity, KYC, or off-chain payment rails.

## Known failure modes

- Address fails regex pattern — must be a valid 0x-prefixed 40-hex-character string
- Normalizing address casing before submission destroys checksum evidence, producing false results
- Asset address provided as its own payee triggers self-referential flag rather than receivability answer
- Bytecode analysis inconclusive — endpoint returns 'unknown' for receivability rather than a definitive answer
- Network unavailability of Base RPC may cause timeouts
- Payment of $0.01 USDC via x402 required per call — missing payment header causes 402 rejection

## How this service works

Pre-flight a Base payment destination before you send. Verifies the EIP-55 checksum, measures distance from an address you expect — catching a mistyped digit and the shared prefix-and-suffix shape of a ground look-alike — flags the zero address, burn sinks and precompiles, refuses a token offered as its own payee, and reports whether the destination can receive the asset. Returns unknown rather than guessing when bytecode does not decide it. Not a judgement of the counterparty.

## Output

Returns a structured validation report covering: EIP-55 checksum pass/fail, exact or case-only match against expected address, edit distance and look-alike (shared prefix/suffix) proximity score, flags for zero address, burn sinks, and precompiles, self-send detection when sender is provided, and an asset receivability assessment (native ETH or ERC-20). Returns 'unknown' rather than guessing when on-chain bytecode is ambiguous.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "from": {
   "type": "string",
   "pattern": "^0[xX][0-9a-fA-F]{40}$",
   "description": "The sender, when you have one. Enables the self-send check."
  },
  "asset": {
   "type": "string",
   "default": "native",
   "description": "\"native\" for ETH, or an ERC-20 contract address. Defaults to \"native\". The asset decides which receivability question is asked, and they have different answers."
  },
  "address": {
   "type": "string",
   "pattern": "^0[xX][0-9a-fA-F]{40}$",
   "description": "The destination you are about to send to. Send it exactly as you hold it, casing included: the casing is the checksum, and normalising it before you ask destroys the evidence this endpoint checks."
  },
  "expected_address": {
   "type": "string",
   "pattern": "^0[xX][0-9a-fA-F]{40}$",
   "description": "The address you believe the destination should be. Supplying it enables the comparison checks: exact match, case-only difference, small edit distance, and the shared prefix-and-suffix shape of a ground look-alike."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/payeeguard-c76adc5e/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from payee.schemasure.com](https://www.zero.xyz/host/payee.schemasure.com/llms.txt)
