Check ERC-20 token risk on Base and Ethereum using public on-chain data.
Checks a token contract for privileged functions (mint, blacklist, pause, fees, trading switch), upgradeable proxies, owner and renounce status, and DEX liquidity in USD with owner, pool and burned supply shares. Every flag cites its evidence and the response lists what was not checked. Not financial advice.
$0.005 per call in USDC on Base via x402, or pay by card with prepaid credits (5 credits) · 1 free call per caller · no signup ·
GET https://freetier-agent-api.pages.dev/api/token-risk
Use token-risk before an agent buys, lists or recommends an ERC-20 token. It reads public chain data only: it does not simulate buys/sells (no honeypot test) and does not return price history or market data.
| Name | Type | Description |
|---|---|---|
address required | string | token contract address 0x... |
chain | string (base | ethereum) |
{
"address": "0x4ed4e862860bed51a9570b96d89af5e1b0efefed",
"chain": "base",
"isContract": true,
"name": "Degen",
"symbol": "DEGEN",
"decimals": 18,
"totalSupply": 35957026406.6835,
"owner": "0x704ec5c12ca20a293c2c0b72b22619a4231f3c0d",
"ownerRenounced": false,
"proxy": null,
"liquidity": {
"pools": [
{
"dex": "uniswap-v2",
"pool": "0x7c327d692b72f60b28aecedbcc1ba784712fe7b2",
"quote": "WETH",
"quoteBalance": 0.0208,
"tokenBalance": 53144.7496,
"quoteSideUsd": 48
},
{
"dex": "uniswap-v3-500",
"pool": "0xb0037fffffb6e514f88458bc698102865bca910a",
"quote": "WETH",
"quoteBalance": 0.0161,
"tokenBalance": 49896.7891,
"quoteSideUsd": 37
}
],
"approxLiquidityUsd": 489006,
"ethUsd": 2323.21697782,
"poolSharePct": 0.78,
"burnedPct": 0,
"ownerSharePct": 0.52
},
"riskScore": 16,
"verdict": "no_major_red_flags_found",
"flags": [
{
"key": "pause",
"severity": "medium",
"label": "Transfers can be paused",
"evidence": {
"selectors": [
"0x8456cb59",
"0x3f4ba83a"
]
}
},
{
"key": "ownerActive",
"severity": "low",
"label": "Contract has an active owner (not renounced)",
"evidence": {
"owner": "0x704ec5c12ca20a293c2c0b72b22619a4231f3c0d"
}
}
],
"scoreMeaning": "Sum of flag weights (high 30, medium 12, low 4), capped at 100. Measures what an owner/admin can do to holders and how thin liquidity is; it is not a scam pr...",
"notChecked": [
"honeypot sell simulation",
"source-code verification"
],
"checkedAtBlock": 53038058,
"rpc": "https://base-rpc.publicnode.com",
"method": "Deterministic heuristics over public on-chain data via JSON-RPC (bytecode selector scan, EIP-1967/1167 proxy slots, owner(), DEX factory lookups, Chainlink E...",
"disclaimer": "Automated heuristic check of public on-chain data. Not financial advice; a clean result does not mean a token is safe.",
"sources": [
{
"name": "Public JSON-RPC endpoints (publicnode, Tenderly, Blast, base.org, with failover; batched): eth_call, eth_getCode, eth_getStorageAt; Uniswap v2/v3, Aerodrome ...",
"url": "https://www.publicnode.com/"
}
]
}
curl -s "https://freetier-agent-api.pages.dev/api/token-risk?address=0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed&chain=base"
Buy a credit pack on Gumroad (1,000 credits $3), then send your license key. The X-Credits-Remaining response header shows your balance; failed calls are not charged.
curl -s "https://freetier-agent-api.pages.dev/api/token-risk?address=0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed&chain=base" \ -H 'X-License-Key: YOUR-LICENSE-KEY'
// npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY); // wallet with USDC on Base
const fetchWithPayment = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});
const res = await fetchWithPayment("https://freetier-agent-api.pages.dev/api/token-risk?address=0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed&chain=base");
console.log(await res.json());
# pip install "x402[httpx,evm]" eth-account
import asyncio, os
from eth_account import Account
from x402 import x402Client
from x402.http.clients import x402HttpxClient
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client
async def main():
client = x402Client()
register_exact_evm_client(client, EthAccountSigner(Account.from_key(os.environ["EVM_PRIVATE_KEY"])))
async with x402HttpxClient(client) as http:
r = await http.get("https://freetier-agent-api.pages.dev/api/token-risk?address=0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed&chain=base")
print(r.json())
asyncio.run(main())
A bare request without parameters returns the HTTP 402 payment challenge (x402 v2 in the PAYMENT-REQUIRED header, v1 in the body). Invalid input gets a 400 before any payment.
Failed calls are never charged. Failed calls are never charged: the payment is verified first, the request runs, and the payment is settled only if it succeeded. Errors (4xx/5xx) are not settled, and invalid input is rejected before any payment or free call.
Independent monitoring of this endpoint: 402index service page (health, 30-day uptime, p50 latency).
token_risk at https://freetier-agent-api.pages.dev/mcp (Streamable HTTP; in-band x402 payment via _meta["x402/payment"], or card credits via the X-License-Key header)Agent Extraction API by FreeTier Kits · Terms · llms.txt · /.well-known/x402 · MCP: https://freetier-agent-api.pages.dev/mcp · Contact: tec@mail.grokbot.com
This site and its texts were written with AI assistance and reviewed for accuracy; example outputs are real responses from the API.