82trust / 100
Token Score
by Otto AI in Onchain & crypto
x402 APIPassing, checked just now
Token score by contract address: one 0-100 composite of a Base token market structure from seven weighted factors — USD liquidity, holder concentration and count, 24h volume, market age, pool breadth, price stability. Every sub-score, weight and raw input comes back, so the score can be recomputed. A factor whose data plane is unavailable is reported absent, never filled. Market structure, not a contract-security screen. $0.01 per call.
GET https://x402.ottoai.services/token-score
Last 30 days
All checks passedSome failedAll failedNot checked
- Uptime
- 100%
- Response time
- 65 ms typical, 65 ms slowest 5%
- Last check
- just now
- Next check
- in 29 min
How to call it
# See the payment challenge (nothing is charged)
curl -i -X GET "https://x402.ottoai.services/token-score?token=0x532f27101965dd16442e59d40670faf5ebb142e4"import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client().register(
"eip155:8453",
new ExactEvmScheme(privateKeyToAccount(process.env.AGENT_KEY)),
);
const pay = wrapFetchWithPayment(fetch, client);
// Not sure it's safe to pay? Preflight it first for $0.005:
// GET https://toolvet.app/api/v1/check?url=https%3A%2F%2Fx402.ottoai.services%2Ftoken-score
const res = await pay("https://x402.ottoai.services/token-score?token=0x532f27101965dd16442e59d40670faf5ebb142e4");
console.log(await res.json());Example input
{
"token": "0x532f27101965dd16442e59d40670faf5ebb142e4"
}Example output
{
"data": {
"band": "high",
"caveats": [
{
"affects": [
"score"
],
"code": "token_score_is_market_structure_...",
"plain": "This score measures market struc..."
}
],
"context": {
"absPriceChange24hPct": 6.8,
"distinctDexCount": 10,
"fdvUsd": 418200000,
"holderChange7dPercent": null,
"liquidityUsd": 1115151.5,
"marketCapUsd": 414220000,
"matchedPoolCount": 20,
"oldestPoolAgeDays": 118,
"pooledLiquidityUsd": 2343405.11,
"poolsReturned": 20,
"priceChange24hPct": -6.8,
"priceUsd": 0.04182,
"top10SupplyPercent": 33.4,
"totalHolders": 3420,
"turnover24h": 0.121,
"volume24hUsd": 284110.9
},
"coverage": {
"factorsPresent": 7,
"factorsTotal": 7,
"minWeightCoverage": 0.5,
"planesAnswered": [
"dex-price-base"
],
"planesUnavailable": [],
"weightCoverage": 1
},
"factors": [
{
"absenceReason": null,
"input": 2343405.11,
"inputUnit": "USD",
"key": "liquidity",
"measures": "USD liquidity summed across the ...",
"plane": "dex-pools-token",
"planeReadAt": "2026-09-01T11:58:06.000Z",
"present": true,
"score": 85.6,
"weight": 0.24
}
],
"formula": {
"bands": [
{
"band": "very-high",
"min": 80
}
],
"description": "Each factor maps its raw input o...",
"factors": [
{
"breakpoints": [
{
"score": 0,
"x": 0
}
],
"inputField": "context.pooledLiquidityUsd",
"inputUnit": "USD",
"key": "liquidity",
"measures": "USD liquidity summed across the ...",
"plane": "dex-pools-token",
"weight": 0.24
}
],
"method": "weighted-mean-of-piecewise-linea...",
"minWeightCoverage": 0.5
},
"generatedAt": "2026-09-01T12:00:00.000Z",
"methodology": "https://docs.useotto.xyz/acp-swa...",
"note": "A single 0-100 read on this toke...",
"score": 74.6,
"scoreWithheldReason": null,
"token": {
"address": "0x532f27101965dd16442e59d40670fa...",
"name": "Brett",
"network": "base",
"symbol": "BRETT"
}
},
"meta": {
"degraded": false,
"generatedAt": "",
"stalenessSec": 0,
"validUntil": ""
},
"status": "success"
}Security scan
- No findings. We scan names, descriptions and tool definitions for hidden instructions and other prompt-injection patterns.
Recent checks
| When | Result | HTTP | Time | Price |
|---|---|---|---|---|
| just now | Passed | 402 | 65 ms | $0.01 |
| 5 h ago | Passed | 402 | 66 ms | $0.01 |