# EIP-712 Typed Data Builder & Signer Recovery

> EIP-712 Typed Data Builder & Signer Recovery is a paid API for AI agents from x402-audit.tatschluizguilherme.workers.dev, paid per call via x402, $0.1/call, status unknown (last checked 2026-09-14).

Computes EIP-712 domainSeparator, hashStruct, and final digest from typed data, and optionally recovers the signer address via ecrecover — all offline with no RPC or API key

## Facts

- Endpoint: GET https://x402-audit.tatschluizguilherme.workers.dev/eip712
- Price: $0.1/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/eip-712-typed-data-builder-signer-recovery-68dd78ac
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_k8ncmZEGokThDrZryQSr7

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 eip-712-typed-data-builder-signer-recovery-68dd78ac
```

Example prompt: Can you compute the EIP-712 digest and recover the signer for this Permit2 message? Domain is {name:'Permit2', chainId:1, verifyingContract:'0x000000000022D473030F116dDEE9F6B43aC78BA3'}, the message has spender, nonce and deadline fields, and I have a 0x-prefixed 65-byte signature to verify against address 0xAbCd...

## When to prefer this

Choose this endpoint when you need pure offline EIP-712 cryptography — building digests, checking domainSeparators, or verifying signers — without any RPC call, blockchain connection, or API key. Ideal for relayers, Permit/Permit2 flows, off-chain vote verification, and debugging typed data that a wallet will sign. Prefer over on-chain alternatives when speed, privacy, and zero infrastructure dependency matter.

## Known failure modes

- Malformed domain or types JSON returns a 400-level error with a description of the parsing failure
- Invalid signature format (not 0x + 65 bytes) causes ecrecover to fail or return an error
- Mismatched expectedAddress results in recover.ok: false rather than an error
- Unsupported uintN size or invalid address format may produce a normalization error
- Deeply nested or circular struct definitions may cause a processing error

## How this service works

Pay-per-call on-chain API for AI agents and developers: wallet audits, token safety audits (honeypot detection), live gas prices, token prices, transaction receipts, balances, ENS resolution, block data, ERC-20 allowances, transaction simulation, swap quotes and multicall batches — all computed on-chain via public RPCs (no external market API). Pay per request in USDC on Base via the x402 exact scheme (EIP-3009 transferWithAuthorization). No API key, no signup, no subscription.

## Output

Returns normalized typed data, the computed domainSeparator (32-byte hex), hashStruct (32-byte hex), and the final EIP-712 digest (32-byte hex). If a signature was provided, also returns the recovered signer address (ecrecover result) and a recover.ok boolean indicating whether it matches the optional expectedAddress.

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "types": {
   "Permit": [
    {
     "name": "owner",
     "type": "address"
    },
    {
     "name": "spender",
     "type": "address"
    },
    {
     "name": "value",
     "type": "uint256"
    },
    {
     "name": "nonce",
     "type": "uint256"
    },
    {
     "name": "deadline",
     "type": "uint256"
    }
   ],
   "EIP712Domain": [
    {
     "name": "name",
     "type": "string"
    },
    {
     "name": "version",
     "type": "string"
    },
    {
     "name": "chainId",
     "type": "uint256"
    },
    {
     "name": "verifyingContract",
     "type": "address"
    }
   ]
  },
  "digest": "0x5c2f3e4d5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e",
  "domain": {
   "name": "USDC",
   "chainId": "8453",
   "version": "2",
   "verifyingContract": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"
  },
  "message": {
   "nonce": "0",
   "owner": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
   "value": "1000000",
   "spender": "0x1111111111111111111111111111111111111111",
   "deadline": "1900000000"
  },
  "network": "offline",
  "hashStruct": "0x8b3d9f2a1c4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b",
  "primaryType": "Permit",
  "requestedAt": "2026-08-05T09:00:00.000Z",
  "domainSeparator": "0x8a8268fd2a7b6f2c8ab62e4b0c2c2c9f4c3e2f1a0b9c8d7e6f5a4b3c2d1e0f1a2"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/eip-712-typed-data-builder-signer-recovery-68dd78ac/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402-audit.tatschluizguilherme.workers.dev](https://www.zero.xyz/host/x402-audit.tatschluizguilherme.workers.dev/llms.txt)
