# Wallet Safety Checks

> Wallet Safety Checks is a paid API for AI agents from onchaincheck.dev, paid per call via x402, $0.02/call, status unknown (last checked 2026-10-29).

Screens a crypto wallet address for OFAC SDN sanctions, age, type, activity, and optionally token risk before sending or accepting payment

## Facts

- Endpoint: GET https://onchaincheck.dev/check?utm_source=zero.xyz
- Price: $0.02/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-29
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/wallet-safety-checks-076baad5
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_zNsiE4uQ2BGFSmgNNLUdG

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 wallet-safety-checks-076baad5
```

Example prompt: Before I send 500 USDC to 0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed on Base, can you run a safety check on that wallet — screen it for OFAC sanctions, check how old it is, whether it's a real wallet or a contract, and also score the DEGEN token at 0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed for risk?

## When to prefer this

Choose this endpoint when you need a fast, rules-based pre-payment safety check on a crypto address across Base, Ethereum, Arbitrum, Optimism, Polygon, or Solana. It is uniquely valuable when you want OFAC sanctions screening combined with wallet heuristics (age, type, first funder) and optionally token risk scoring in a single call. Prefer it over generic blockchain explorers when you need a structured ok/caution/block verdict rather than raw chain data, and when operating in an agentic payment flow where a quick compliance signal is required before executing a transaction.

## Known failure modes

- Address not found on specified chain — returns no activity data but still screens sanctions
- Invalid address format — 400 error if address doesn't match hex or base58 pattern
- Unsupported chain specified — returns error if chain enum value is invalid
- Token contract not found — token check omitted or flagged if contract address is unrecognized
- OFAC list may be dated — sanctions data reflects the listed copy date, not necessarily real-time
- Rate limit or payment failure — 402 payment required if x402 payment header is missing or rejected

## How this service works

Is it safe to pay this address? One check before sending or accepting crypto: OFAC SDN sanctions screen, wallet age, EOA or contract, first funder and recent large transfers on Base, Ethereum, Arbitrum, Optimism or Polygon (wallet kind and activity on Solana), plus the token's 0-100 risk score when a token is given. Returns ok, caution or block with plain reasons and each check in full. Rules-based, not legal advice.

## Output

A JSON response containing an overall verdict of 'ok', 'caution', or 'block' with plain-English reasons, plus individual check results for sanctions (OFAC SDN match), wallet age, wallet type (EOA vs contract), first funder identity, recent large transfers, and optionally a 0-100 token risk score with flagged issues like mintability, blacklisting, upgradeability, and liquidity depth. Also includes the rules applied and a disclaimer.

## 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"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [
      "address"
     ],
     "properties": {
      "chain": {
       "enum": [
        "base",
        "eth",
        "arbitrum",
        "optimism",
        "polygon",
        "solana"
       ],
       "type": "string",
       "description": "Chain of the payment; defaults to solana for base58 addresses, otherwise base"
      },
      "token": {
       "type": "string",
       "pattern": "^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$",
       "description": "Token being paid or received (contract or mint on the same chain); adds its risk score"
      },
      "expect": {
       "enum": [
        "any",
        "eoa",
        "contract"
       ],
       "type": "string",
       "description": "What the address should be: eoa (a wallet), contract, or any (default); a mismatch gives caution"
      },
      "address": {
       "type": "string",
       "pattern": "^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$",
       "description": "Address you are about to pay or receive from"
      }
     },
     "additionalProperties": false
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object"
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "chain": "base",
  "notes": "Screens only the digital currency addresses that OFAC publishes on its SDN list, from a copy dated listAsOf. It is not legal advice and not a complete sanctions or AML check: it doesn't cover addresse… (240 chars, truncated in this example)",
  "rules": "block if the address or token contract is on the OFAC SDN list; caution if the wallet's first activity is under 7 days old, it has no activity, it isn't the expected kind (expect=eoa or contract), the… (240 chars, truncated in this example)",
  "token": {
   "name": "Degen",
   "risk": {
    "level": "low",
    "score": 15,
    "reasons": [
     {
      "code": "can-pause",
      "text": "The owner can pause all transfers.",
      "points": 10
     },
     {
      "code": "owner-not-renounced",
      "text": "Ownership is not renounced.",
      "points": 5
     }
    ],
    "summary": "Low risk: the owner can pause all transfers; ownership is not renounced."
   },
   "asset": {
    "known": false
   },
   "chain": "base",
   "flags": {
    "canMint": false,
    "ownerCanAct": true,
    "upgradeable": false,
    "canBlacklist": false,
    "noLiquidPool": false,
    "canChangeFees": false,
    "thinLiquidity": false
   },
   "notes": "Privileged functions are detected from bytecode selectors and may have false positives or misses. Liquidity is the WETH or USDC held by the deepest Uniswap v3 or aerodrome pool found.",
   "owner": "0x704Ec5C12Ca20a293C2C0B72B22619A4231f3c0d",
   "proxy": {
    "upgradeable": false
   },
   "market": {
    "dex": "uniswap-v3",
    "pool": "0xc9034c3E7F58003E6ae0C8438e7c8f4598d5ACAA",
    "priceUsd": 0.000959674,
    "feeTierBps": 30,
    "pairedWith": "WETH",
    "poolsFound": 10,
    "fullyDilutedValueUsd": 34520000,
    "quoteSideLiquidityUsd": 133000
   },
   "symbol": "DEGEN",
   "address": "0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed",
   "decimals": 18,
   "nativeUsd": {
    "price": 2402.43,
    "source": "Chainlink ETH/USD",
    "symbol": "ETH",
    "updatedAt": "2026-10-23T06:25:27.000Z"
   },
   "totalSupply": 35967154646.5,
   "ownershipRenounced": false,
   "privilegedFunctions": {
    "mint": false,
    "pause": true,
    "setFees": false,
    "blacklist": false,
    "tradingSwitch": false,
    "maxTransaction": false
   }
  },
  "checks": {
   "token": "ok",
   "wallet": "ok",
   "sanctions": "ok"
  },
  "expect": "any",
  "wallet": {
   "age": {
    "ageDays": 886.53,
    "firstDirection": "in",
    "
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/wallet-safety-checks-076baad5/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from onchaincheck.dev](https://www.zero.xyz/host/onchaincheck.dev/llms.txt)
