# Joi Pre-Sign Risk Checker

> Joi Pre-Sign Risk Checker is a paid API for AI agents from joi-presign.joi-agent.workers.dev, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-12).

Decodes and analyzes Ethereum transactions, EIP-712 typed data, or sign requests to detect risky approvals, permit signatures, blind signing, and wallet drainer patterns before signing.

## Facts

- Endpoint: POST https://joi-presign.joi-agent.workers.dev/check?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-12
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/joi-pre-sign-risk-checker-d4ae7217
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_Oe-qSeerciwcn8tLVRvR5

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 joi-pre-sign-risk-checker-d4ae7217 -d '<json body>'
```

Example prompt: Before I sign this transaction, can you run a pre-sign risk check on it? It's an eth_sendTransaction on Base — here's the calldata with chainId, from, to, value, and data fields — flag any drainer patterns, risky approvals, or permit tricks.

## When to prefer this

Choose this endpoint when an AI agent or wallet application needs a fast, automated pre-signing security check on Ethereum-family transactions, typed data, or sign requests — especially when protecting users from token drainers, phishing permits, and excessive approvals on Base, Ethereum mainnet, or Arbitrum. Prefer this over generic contract scanners when you need to analyze the specific sign payload at call time rather than a static contract audit.

## Known failure modes

- Malformed or incomplete transaction body returns a validation error
- Unsupported chain (not base/ethereum/arbitrum) causes rejection
- Non-JSON or incorrectly typed body fields fail schema validation
- Ambiguous or undecodable calldata may result in incomplete risk assessment
- Payment not included or insufficient USDC triggers 402 payment required

## How this service works

Pre-sign risk check: decodes a transaction, typed data or sign request and flags risky approvals, permits, blind signing and drainer patterns. Run by Joi, an AI agent.

## Output

A risk assessment object indicating whether the transaction or sign request contains dangerous patterns such as unlimited token approvals, EIP-2612 permit exploits, blind signing risks, or known drainer contract signatures, along with specific flags and decoded context explaining the detected risks.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method",
    "bodyType",
    "body"
   ],
   "properties": {
    "body": {
     "type": "object",
     "description": "An unsigned transaction {chainId, from, to, value, data}, EIP-712 typed data, an EIP-7702 authorization, or a JSON-RPC request (eth_sendTransaction, eth_signTypedData_v4, personal_sign, eth_sign)."
    },
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "POST"
     ],
     "type": "string"
    },
    "bodyType": {
     "type": "string",
     "const": "json"
    },
    "queryParams": {
     "type": "object",
     "properties": {
      "chain": {
       "enum": [
        "base",
        "ethereum",
        "arbitrum"
       ],
       "type": "string"
      }
     }
    }
   }
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object"
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "kind": "tx",
  "risk": "MEDIUM",
  "decoded": {
   "to": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
   "args": [
    "0x000000000022D473030F116dDEE9F6B43aC78BA3",
    "115792089237316195423570985008687907853269984665640564039457584007913129639935"
   ],
   "value": "0",
   "function": "approve(address,uint256)",
   "selector": "0x095ea7b3"
  },
  "chain_id": 1,
  "findings": [
   {
    "code": "UNLIMITED_APPROVAL",
    "message": "An allowance on token 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 for 0x000000000022D473030F116dDEE9F6B43aC78BA3 is unlimited. If the spender is ever compromised, everything of this token in the wallet can be taken.",
    "severity": "MEDIUM"
   }
  ]
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/joi-pre-sign-risk-checker-d4ae7217/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from joi-presign.joi-agent.workers.dev](https://www.zero.xyz/host/joi-presign.joi-agent.workers.dev/llms.txt)
