# Token Risk Check

> Token Risk Check is a paid API for AI agents from onchaincheck.dev, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-29).

Returns a 0-100 risk score with plain-language reasons, flags, and market data for any ERC-20 or SPL token on Base, Ethereum, Arbitrum, Optimism, Polygon, or Solana.

## Facts

- Endpoint: GET https://onchaincheck.dev/token?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-29
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/token-risk-check-347714ec
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_ObG46ZwDX49-n0MO8Jx2B

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 token-risk-check-347714ec
```

Example prompt: Can you run a rug check on the token at 0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed on Base and tell me the risk score, any danger flags like mint or pause powers, and what the liquidity looks like?

## When to prefer this

Use this endpoint when you need a fast, multi-chain, rules-based safety assessment of a specific token before trading, listing, or integrating it. It uniquely combines smart-contract risk flags (mint, freeze, blacklist, fee, pause, trading-switch, upgradeability) with live market data (price, liquidity, DEX pool) and a change-detection fingerprint in a single call. Prefer it over generic blockchain explorers when you need a structured, machine-readable risk score with plain reasons rather than raw contract data.

## Known failure modes

- Invalid or malformed token address returns a 400-level error
- Token not found on the specified chain returns an error or empty result
- Unrecognized chain enum value is rejected by schema validation
- Thin or absent onchain liquidity results in noLiquidPool or thinLiquidity flags being true, with limited market data
- Bytecode analysis may have false positives or misses for privileged function detection
- Stale fingerprint in since parameter may return no changes if nothing has shifted

## How this service works

Is this token safe? Rug check for any token on Base, Ethereum, Arbitrum, Optimism, Polygon or Solana: a 0-100 risk score with plain reasons (mint, freeze, blacklist, fee, pause or trading-switch powers, upgradeable code, holder concentration, thin or missing liquidity), the facts behind it, and USD price and liquidity. Each answer includes a fingerprint; sending it back as since returns what changed. Rules-based, not advice.

## Output

A JSON object containing: a 0-100 risk score with a level label (low/medium/high) and a plain-English summary; an array of reason objects each with a code, text description, and point contribution; boolean flags for canMint, canBlacklist, canChangeFees, canPause, tradingSwitch, upgradeable, noLiquidPool, thinLiquidity; owner address and ownership-renounced status; proxy/upgradeability details; market data including USD price, paired asset, DEX name, pool address, fee tier, quote-side liquidity USD, fully diluted value, and pools found; native asset price sourced from Chainlink; total supply and decimals; and a watch object with a fingerprint string and a changes field (null on first call, populated on subsequent calls using since).

## 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 the token is on; defaults to solana for base58 addresses, otherwise base"
      },
      "since": {
       "type": "string",
       "pattern": "^[A-Za-z0-9_-]{1,1000}$",
       "description": "watch.fingerprint from an earlier call; adds what changed since then"
      },
      "address": {
       "type": "string",
       "pattern": "^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$",
       "description": "Token contract (EVM) or mint (Solana) address"
      }
     },
     "additionalProperties": false
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object"
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "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
  },
  "watch": {
   "changes": null,
   "fingerprint": "eyJzIjoxNSwiciI6WyJjYW4tcGF1c2UiLCJvd25lci1ub3QtcmVub3VuY2VkIl0sImEiOnsib3duZXIiOiIweDcwNEVjNUMxMkNhMjBhMjkzQzJDMEI3MkIyMjYxOUE0MjMxZjNjMGQiLCJpbXBsZW1lbnRhdGlvbiI6bnVsbCwicHJveHlBZG1pbiI6bnVsbH0sImwi… (240 chars, truncated in this example)"
  },
  "market": {
   "dex": "uniswap-v3",
   "pool": "0xc9034c3E7F58003E6ae0C8438e7c8f4598d5ACAA",
   "priceUsd": 0.00095954,
   "feeTierBps": 30,
   "pairedWith": "WETH",
   "poolsFound": 10,
   "fullyDilutedValueUsd": 34510000,
   "quoteSideLiquidityUsd": 133000
  },
  "symbol": "DEGEN",
  "address": "0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed",
  "decimals": 18,
  "nativeUsd": {
   "price": 2402.09,
   "source": "Chainlink ETH/USD",
   "symbol": "ETH",
   "updatedAt": "2026-10-23T06:08:55.000Z"
  },
  "totalSupply": 35967154646.5,
  "ownershipRenounced": false,
  "privilegedFunctions": {
   "mint": false,
   "pause": true,
   "setFees": false,
   "blacklist": false,
   "tradingSwitch": false,
   "maxTransaction": false
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/token-risk-check-347714ec/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)
