# TradingLab Token Check

> TradingLab Token Check is a paid API for AI agents from tokencheck.402api.dev, paid per call via x402, $0.02/call, status unknown (last checked 2026-10-11).

Checks an ERC-20 token contract on Base mainnet for safety signals including liquidity, sell simulation, transfer taxes, and a buy/sell verdict for $0.02 USDC per call via x402.

## Facts

- Endpoint: GET https://tokencheck.402api.dev/v1/token-check?utm_source=zero.xyz
- Price: $0.02/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-11
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/tradinglab-token-check-d02ce363
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_VNQq2MOmt6e7dnetKOSln

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 tradinglab-token-check-d02ce363
```

Example prompt: Run a token safety check on the Base token at address 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 — I want to know if it's safe to buy, whether I can sell it, and if there are any transfer taxes or red flags.

## When to prefer this

Use this endpoint when you need a quick, affordable ($0.02) on-chain safety assessment of a specific Base mainnet ERC-20 token before trading, including sell simulation and transfer tax detection. Prefer this over manual on-chain analysis when you need a structured verdict with liquidity metrics in a single call. Best for DeFi bots, trading agents, or pre-swap safety gates operating on Base.

## Known failure modes

- HTTP 400: token query parameter missing or not a valid 0x-prefixed 40-hex-digit Base address
- HTTP 503: check failed or timed out (25-second timeout); payment is not charged on errors
- Token exists but has no tracked pools, resulting in limited verdict data
- Sell simulation may not detect wallet-level transfer blocks or owner-changeable tax switches set after measurement
- Cached results may not reflect very recent on-chain changes

## How this service works

Pay-per-call checks on Base, $0.02 USDC each via x402: a token safety check and an x402 seller check.

## Output

Returns a JSON report with a verdict ('ok', 'caution', or 'avoid'), array of reason strings explaining the verdict, pool-level details (venue, paired token, liquidity in USD, transfer tax status, sellability), an optional sell simulation showing round-trip loss percentage and fees on the deepest pool, block number, and measurement timestamp. Errors return a plain-English error string; payments are not settled on error responses.

## 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": [
      "token"
     ],
     "properties": {
      "token": {
       "type": "string",
       "pattern": "^0x[0-9a-fA-F]{40}$",
       "description": "ERC-20 token contract address on Base mainnet"
      }
     }
    },
    "discoverable": {
     "const": true
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "oneOf": [
      {
       "type": "object",
       "required": [
        "token",
        "verdict",
        "reasons",
        "pools",
        "measuredAt"
       ],
       "properties": {
        "block": {
         "type": "string"
        },
        "notes": {
         "type": "array",
         "items": {
          "type": "string"
         }
        },
        "pools": {
         "type": "array",
         "items": {
          "type": "object",
          "description": "venue, pairedWith, feePct, liquidityUsd, transferTax, sellable"
         }
        },
        "token": {
         "type": "object"
        },
        "cached": {
         "type": "boolean"
        },
        "ethUsd": {
         "type": [
          "number",
          "null"
         ]
        },
        "reasons": {
         "type": "array",
         "items": {
          "type": "string"
         }
        },
        "verdict": {
         "enum": [
          "ok",
          "caution",
          "avoid"
         ]
        },
        "measuredAt": {
         "type": "string"
        },
        "poolsOmitted": {
         "type": "integer"
        },
        "sellSimulation": {
         "type": [
          "object",
          "null"
         ],
         "description": "eth_simulateV1 buy-then-sell on the deepest pool: ok, roundTripLossPct, feesPct, error"
        }
       },
       "description": "HTTP 200: the token report"
      },
      {
       "type": "object",
       "example": {
        "error": "query parameter `token` must be a 0x-prefixed 40-hex-digit Base token address"
    
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "block": "52398867",
  "notes": [
   "16 smaller pool(s) omitted.",
   "5 pool(s) with under $1,000 measured liquidity omitted.",
   "Measured facts, not advice. The simulated sell shows a fresh wallet can sell right now; owner-changeable taxes, blacklists or trading switches can still change later."
  ],
  "pools": [
   {
    "venue": "aeroV2",
    "feePct": 0.3,
    "source": "tracked by TradingLab",
    "address": "0x6cDcb1C4A4D1C3C6d054b27AC5B77e89eAFb971d",
    "sellable": {
     "ok": true,
     "method": "on-chain quoter/reserves eth_call selling 0.1% of the pool's token balance into this pool (does not detect wallet-level transfer blocks or the tax itself)",
     "outUsd": 21791.869827,
     "amountIn": "27317.378708653002392855",
     "amountOut": "21791.869827"
    },
    "pairedWith": {
     "symbol": "USDC",
     "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
    },
    "transferTax": {
     "taxed": false,
     "method": "TradingLab taxcheck job at 2026-10-08T20:25:52.000Z: receipts of the pool's 3 most recent swaps",
     "samples": []
    },
    "liquidityUsd": 43758468,
    "liquidityMethod": "2 × the pool's USDC balance (balanceOf at block 52398867); for concentrated-liquidity pools this counts all reserves, not in-range depth"
   },
   {
    "venue": "aeroV2",
    "feePct": 1,
    "source": "tracked by TradingLab",
    "address": "0xbBf71AAD6E1F8D180D3B1D898528654c1d18b2fF",
    "sellable": {
     "ok": true,
     "method": "on-chain quoter/reserves eth_call selling 0.1% of the pool's token balance into this pool (does not detect wallet-level transfer blocks or the tax itself)",
     "outUsd": null,
     "amountIn": "2857.2894550549357344",
     "amountOut": "103557.570587184740374855"
    },
    "pairedWith": {
     "symbol": "fBOMB",
     "address": "0x74ccbe53F77b08632ce0CB91D3A545bF6B8E0979"
    },
    "transferTax": {
     "taxed": false,
     "method": "receipts of the pool's 2 most recent swap(s) found by eth_getLogs (Swap event) over the last 500 blocks: does part of a AERO transfer out of / payment into the pool go to the token contract or a burn address?",
     "samples": [
      "0x0bfd8e34e528e56ee56cd480722025c2f149d87152e1a6b2e209cc4b30f97b7d",
      "0x8ae22c6b10bdfd766ae7c09cc0c6ed2a55b001e4835524cd8e3597207f587608"
     ]
    },
    "liquidityUsd": 4664205,
    "liquidityMethod": "TradingLab registry estimate (pool added 2026-10-08, value refreshed by the registry job)"
   }
  ]
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/tradinglab-token-check-d02ce363/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from tokencheck.402api.dev](https://www.zero.xyz/host/tokencheck.402api.dev/llms.txt)
