# Pay Guard – x402 Pre-Payment Safety Check

> Pay Guard – x402 Pre-Payment Safety Check is a paid API for AI agents from seenly-pay-guard.vercel.app, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-22).

Validates a planned x402 micropayment before execution by checking wallet-domain trust, price limits, asset/network correctness, URL safety, lookalike domains, and wash-trading flags.

## Facts

- Endpoint: GET https://seenly-pay-guard.vercel.app/api/guard?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-22
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/pay-guard-x402-pre-payment-safety-check-946f1201
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_WTXRGU3rU3S6pEqlIBAjd

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 pay-guard-x402-pre-payment-safety-check-946f1201
```

Example prompt: Before you pay that x402 challenge from api.example.com — payTo 0xABC...123, amount 10000 USDC atomic units on Base — run it through Pay Guard with my max price cap of $0.05 and tell me if it's safe to proceed.

## When to prefer this

Use Pay Guard when your AI agent is about to execute an x402 micropayment and you need a fast, deterministic, non-LLM safety layer that combines domain trust, price enforcement, network validation, and phishing/wash-trade detection in a single call. Prefer this over manual checks or generic URL scanners when operating in the x402 protocol ecosystem specifically, where the 402 challenge structure (payTo, amount, asset, network, resource) is the native input format.

## Known failure modes

- Missing required challenge.payTo or amount fields returns a validation error
- Domain not found or unverifiable results in a warn or block verdict with a domain-check failure reason
- Amount exceeds max_price_usd cap triggers a block verdict
- Network or asset mismatch returns a warn or block with asset/network mismatch reason
- Invalid atomic unit format for amount may cause parsing errors
- Agentropolis wash-flag service unavailable may degrade wash-check sub-result

## How this service works

Score JSON, code, scrapes and LLM output for quality before your agent uses it: broken JSON auto-repair, schema checks, blocked-scrape and refusal detection. $0.03 per check via x402.

## Output

Returns a verdict of allow, warn, or block along with detailed sub-checks: whether the wallet address is verified for the seller domain, whether the requested amount stays within the agent's price cap, whether the asset and network match expectations, whether the resource URL or domain shows lookalike/phishing signals, and whether wash-trading flags have been raised by Agentropolis.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "asset": {
   "type": "string",
   "default": "USDC"
  },
  "payTo": {
   "type": "string",
   "description": "Shortcut: challenge.payTo at top level."
  },
  "amount": {
   "type": "string"
  },
  "domain": {
   "type": "string",
   "description": "Planned seller domain / host the agent intends to pay."
  },
  "network": {
   "type": "string",
   "default": "eip155:8453"
  },
  "challenge": {
   "type": "object",
   "required": [
    "payTo",
    "amount"
   ],
   "properties": {
    "asset": {
     "type": "string"
    },
    "payTo": {
     "type": "string"
    },
    "amount": {
     "type": "string",
     "description": "Atomic USDC units (6 decimals), e.g. \"10000\" = $0.01."
    },
    "network": {
     "type": "string"
    },
    "resource": {
     "type": "string",
     "description": "HTTPS resource URL from the 402."
    }
   },
   "description": "The x402 402 challenge / accept entry the agent received."
  },
  "requestKey": {
   "type": "string",
   "maxLength": 128
  },
  "max_price_usd": {
   "type": "number",
   "minimum": 0,
   "description": "Hard cap the agent will not exceed (USD)."
  },
  "listed_price_usd": {
   "type": "number",
   "minimum": 0,
   "description": "Optional expected listed price from the agent’s plan."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "kit": "seenly.pay-guard",
  "advice": "Safe to sign this 402 challenge under the stated plan.",
  "checks": {
   "wash": {
    "id": "wash",
    "status": "pass",
    "summary": "No wash flags; payment evidence present."
   },
   "price": {
    "id": "price",
    "status": "pass",
    "summary": "Challenge price $0.03 ≤ max $0.05."
   },
   "lookalike": {
    "id": "lookalike",
    "status": "pass",
    "summary": "Resource host matches planned domain."
   },
   "url_safety": {
    "id": "url_safety",
    "status": "pass",
    "summary": "Resource URL is https, no credentials, no IP literal."
   },
   "listed_price": {
    "id": "listed_price",
    "status": "pass",
    "summary": "Challenge price within listed range."
   },
   "asset_network": {
    "id": "asset_network",
    "status": "pass",
    "summary": "Asset/network OK (USDC on eip155:8453)."
   },
   "wallet_domain": {
    "id": "wallet_domain",
    "status": "pass",
    "summary": "payTo matches the domain’s verified Agentropolis wallet."
   }
  },
  "reasons": [],
  "verdict": "allow",
  "coverage": {
   "notes": [],
   "agentropolis": "full"
  },
  "check_version": "pay-guard-0.1.0"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/pay-guard-x402-pre-payment-safety-check-946f1201/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from seenly-pay-guard.vercel.app](https://www.zero.xyz/host/seenly-pay-guard.vercel.app/llms.txt)
