Tools · finance
Token verdict (EVM + Solana)
Should an agent touch this token? One call: a 0-100 safety score, grade, verdict and the reasons, plus price, liquidity and pair age — for an ERC-20 on Base and six more EVM chains, or a Solana mint (send its base58 address). Rule-based, the rules published in every answer. Pay-per-call via x402.
$0.009 per call, paid in USDC on Base or Solana with x402 — no account, no API key. POST https://fiatdock.com/v1/token/verdict (or GET with the same fields as query parameters) · MCP tool token_verdict. An answer the tool cannot produce is refused with 4xx/5xx and is not charged.
Inputs
| Field | Type | Description | Example |
|---|---|---|---|
token | string | Token address: an ERC-20 contract (0x…) or a Solana mint (base58). Omit the whole body to get USDC on Base | "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" |
chain | one of base, ethereum, polygon, arbitrum, optimism, bsc, avalanche, solana | Chain. Default: solana for a base58 mint, base for a 0x address | "base" |
Example
Request body
{"token":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"base"}
Answer (the published example)
{"network":"base","token":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","name":"USD Coin","symbol":"USDC","safetyScore":100,"grade":"A","verdict":"low_risk","summary":"Low risk by these rules: no critical flag; the issuer keeps control powers, as a trusted issuer-run token does.","reasons":[],"positives":["listed as trusted by the GoPlus scanner","deep liquidity ($12,400,000 in its deepest pair)","traded for 780 days","11,138,766 holders"],"trusted":true,"issuerControls":["proxy_contract"],"scanVerdict":"caution","risks":[{"level":"caution","flag":"proxy_contract","detail":"upgradeable proxy — logic can change"}],"market":{"priceUsd":1,"priceChange24hPct":0,"liquidityUsd":12400000,"volume24hUsd":51000000,"fdvUsd":null,"marketCapUsd":null,"dex":"uniswap","pairUrl":"https://dexscreener.com/base/0x0000000000000000000000000000000000000001","pairAgeHours":18720,"firstPairAgeHours":18720,"pairListCut":false},"holders":{"count":11138766,"topHolderPct":6.12},"method":"Start at 100. Each critical flag -50, each caution flag -10. On a token the scanner lists as trusted, or an issuer-run token at its canonical address (USDC, USDBC, USDT, DAI, PYUSD, EURC, CBBTC, CBETH, WSTETH, USDG, FDUSD), the issuer's control powers are reported but not scored: an upgradeable proxy, minting, a blacklist, pausing transfers, reclaiming ownership, setting the tax, freezing accounts, closing the mint, changing its metadata, changing the transfer fee, changing the transfer hook, changing the default account state, changing balances (on Solana, a permanent delegate); every other flag (a honeypot, a counterfeit, a malicious authority, a high tax) is scored on any token. A symbol that is the ticker of a well-known Base or Solana token, on another contract, is a critical flag. No DEX pair -15; liquidity under $1,000 -20, under $10,000 -10, unreported -5; the token's oldest DEX pair under 24 h old -10, under 7 days -5 (not applied to a trusted or issuer-run token, nor when DexScreener's list of 30 pairs is full, since its oldest pair is then not the token's); a name or symbol with link or claim bait -10. Score clamped to 0-100. Grade A >= 90, B >= 75, C >= 60, D >= 40, else F. Verdict: critical_risk when any critical flag stands, else high_risk under 40, medium_risk under 75, low_risk from 75.","pageUrl":"https://fiatdock.com/token/base/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","source":"GoPlus Security (token security) + DexScreener","asOf":"2026-10-16T00:00:00.000Z","note":"Rule-based risk signals from an on-chain security scan and DEX data — not investment advice."}
Call it
curl
# 1) ask: an unpaid call answers 402 with the exact price (free)
curl -i -X POST https://fiatdock.com/v1/token/verdict -H 'content-type: application/json' -d '{"token":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"base"}'
# 2) pay: any x402 client signs that 402 and resends — see Node or Python below
Node
// npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const pay = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:*", client: new ExactEvmScheme(privateKeyToAccount(process.env.AGENT_PRIVATE_KEY)) }],
});
const r = await pay("https://fiatdock.com/v1/token/verdict", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({"token":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"base"}),
});
console.log(r.status, await r.json());
Python
# pip install "x402[httpx,evm]"
import asyncio, json, os
from eth_account import Account
from x402 import x402Client
from x402.http.clients import x402HttpxClient
from x402.mechanisms.evm.exact import register_exact_evm_client
async def main():
client = register_exact_evm_client(x402Client(), Account.from_key(os.environ["AGENT_PRIVATE_KEY"]))
async with x402HttpxClient(client) as http:
r = await http.post("https://fiatdock.com/v1/token/verdict", json=json.loads("{\"token\":\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\"chain\":\"base\"}"))
print(r.status_code, r.json())
asyncio.run(main())
MCP (Claude, Cursor, any MCP client)
{"mcpServers":{"fiatdock":{"command":"npx","args":["-y","fiatdock-mcp"],"env":{"AGENT_PRIVATE_KEY":"0x<your agent wallet key>"}}}}
// then call the tool "token_verdict" — the package pays each call from that wallet
The wallet needs USDC on Base. Prefer no install? The remote server https://fiatdock.com/mcp answers the 402 as tool output for an agent that signs its own payments.
Related tools
- Token safety check — $0.0045
- Token report (price + safety) — $0.0045
- Stablecoin supply and peg — $0.002
- Perp market + funding (Hyperliquid, Binance, Bybit) — $0.001
- Prediction markets (Polymarket) — $0.0045
- Best DeFi yields by chain and token (DefiLlama) — $0.001
Machine-readable: OpenAPI · tools.json · llms.txt · /.well-known/x402