# presign-guard explain

> presign-guard explain is a paid API for AI agents from presign-guard.fizzl.eu, paid per call via x402, $0.03/call, status unknown (last checked 2026-10-11).

Returns a green/orange/red risk verdict plus a plain-language explanation (in English or Dutch) for a transaction, token approval, or typed-data signature before an AI agent or wallet signs it.

## Facts

- Endpoint: POST https://presign-guard.fizzl.eu/v1/check/explain?utm_source=zero.xyz
- Price: $0.03/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-11
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/presign-guard-explain-76a59c6b
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_EEpVERG_OMcmsaw6plgMh

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 presign-guard-explain-76a59c6b -d '<json body>'
```

Example prompt: Before you sign this Uniswap Permit2 transaction on Base (chainId 8453), check if it's safe and give me a plain-English explanation of what it does — the typed data payload is {typedData JSON} and the origin is app.uniswap.org.

## When to prefer this

Choose this endpoint over the bare /check endpoint when you need a human-readable explanation alongside the verdict — especially for end-user-facing flows, multilingual (Dutch/English) wallets, or when an AI agent needs to relay the rationale to a user in plain language. Use /check/explain any time the user needs to understand *why* a transaction is risky, not just the verdict.

## Known failure modes

- Missing required fields for the chosen type (e.g. no 'to' for transaction) — returns validation error
- Unsupported chainId — returns error indicating chain not supported
- Malformed calldata or typedData — returns parse error
- Insufficient credits or payment failure — returns 402 Payment Required
- Origin domain age check unavailable — orange verdict may not fire for new domains
- EIP-3009 mandate signature mismatch — returns red verdict with explanation

## How this service works

Pre-sign risk verdict plus a plain-language explanation in Dutch or English. Bulk: 100 checks for $0.80 via /v1/credits.

## Output

A structured response containing a risk verdict (green = safe, orange = caution, red = dangerous) and a plain-language explanation in the requested language (English or Dutch) describing what the action does and why it received that verdict. May include a risk grade and specific flags such as a newly registered origin domain or an out-of-mandate payment.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "to": {
   "type": "string",
   "description": "transaction: target contract"
  },
  "tx": {
   "type": "object",
   "description": "xrpl: the unsigned transaction JSON"
  },
  "data": {
   "type": "string",
   "description": "transaction: 0x-prefixed calldata"
  },
  "from": {
   "type": "string",
   "description": "optional: your wallet; an EVM transaction is then simulated"
  },
  "lang": {
   "enum": [
    "en",
    "nl"
   ],
   "type": "string",
   "description": "explain only: en or nl"
  },
  "type": {
   "enum": [
    "approval",
    "transaction",
    "signature",
    "message",
    "solana",
    "xrpl",
    "algorand"
   ],
   "type": "string",
   "description": "What is about to be signed"
  },
  "x402": {
   "type": "object",
   "description": "optional, EIP-3009 payments: the x402 accepts entry being paid"
  },
  "token": {
   "type": "string",
   "description": "approval: token contract"
  },
  "value": {
   "type": "string",
   "description": "transaction: native value in wei"
  },
  "amount": {
   "type": "string",
   "description": "approval: amount in base units (0 = revoke)"
  },
  "intent": {
   "type": "string",
   "maxLength": 500,
   "description": "optional: what the agent means to do, in one sentence"
  },
  "method": {
   "enum": [
    "personal_sign",
    "eth_sign"
   ],
   "type": "string",
   "description": "message: personal_sign (default) or eth_sign"
  },
  "origin": {
   "type": "string",
   "description": "optional: the site asking (URL or hostname)"
  },
  "chainId": {
   "enum": [
    1,
    10,
    56,
    137,
    8453,
    42161
   ],
   "type": "integer",
   "description": "EVM chain; required for approval, transaction and signature"
  },
  "mandate": {
   "type": "object",
   "description": "optional, EIP-3009 payments: the spending mandate paid under"
  },
  "message": {
   "type": "string",
   "maxLength": 16384,
   "description": "message: the text or 0x-hex to be signed"
  },
  "network": {
   "enum": [
    "xrpl:0",
    "xrpl:1"
   ],
   "type": "string",
   "description": "xrpl: xrpl:0 (default) or xrpl:1"
  },
  "spender": {
   "type": "string",
   "description": "approval: who gets the allowance"
  },
  "typedData": {
   "type": [
    "object",
    "string"
   ],
   "description": "signature: the eth_signTypedData_v4 payload"
  },
  "transaction": {
   "type": "string",
   "maxLength": 12000,
   "description": "solana: the base64 wire transaction; algorand: one base6
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/presign-guard-explain-76a59c6b/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from presign-guard.fizzl.eu](https://www.zero.xyz/host/presign-guard.fizzl.eu/llms.txt)
