Docs Menu

[Reference]

API Reference

A single endpoint runs a full scan: validation, market data, holder data, scoring, and the AI summary, returned as one JSON response.

[ Note ]

No authentication, API key, or rate limiting is enforced by Knovo itself. If you build a client that calls this endpoint programmatically at volume, add your own request throttling.

POST /api/analyze

/api/token/analyze is kept as an alias that re-exports the same handler for backward compatibility; both routes behave identically.

Request body

FieldTypeRequiredDescription
addressstringYesA token contract address. EVM: 0x followed by 40 hex characters. Solana: base58, 32-44 characters.
POST /api/analyze
Content-Type: application/json

{
  "address": "0x71C9c4b4Fa4A2b9e9f9c2e8B3A1D6C5F4E3D2A1B"
}

Success response: 200

Returns { data: TokenAnalysisResult }. Fields are grouped by section below; all money values are plain numbers in USD unless noted.

token

FieldTypeDescription
addressstringThe resolved base token address
symbolstringToken symbol, or "Unknown" if unavailable
namestringToken name, or "Unknown" if unavailable
chainstringDexscreener chain id, e.g. "ethereum", "solana", "base"

liquidityBreakdown

FieldTypeDescription
dexNamestringFormatted DEX name for the primary pair
pairAddressstringThe primary trading pair's address
baseToken / quoteTokenstringSymbols of the primary pair
priceUsdnumber | nullCurrent token price in USD
marketCapUsdnumber | nullMarket cap, falling back to FDV when market cap is unavailable
liquidityUsdnumberUSD liquidity in the primary pool
liquidityBase / liquidityQuotenumberPool-side liquidity in base/quote token units
chainLiquidityUsdnumberCombined liquidity across all pairs on the same chain
chainTopDexName / chainTopPairAddressstringDeepest DEX/pair on that chain
volume24h, volumeM5, volumeH1, volumeH6numberTrading volume over each window
priceChange24h, priceChangeM5, priceChangeH1, priceChangeH6numberPercent price change over each window
poolAgeHoursnumber | nullHours since the pair was created

activityAnalysis

FieldTypeDescription
buysM5 / sellsM5 / buysH1 / sellsH1 / buysH6 / sellsH6 / buys24h / sells24hnumber | nullTransaction counts per window
summarystringOne-line human summary of 24h buy/sell counts

holderDistribution

null when holder data isn't available (unsupported chain, missing MORALIS_API_KEY, or a failed lookup).

FieldTypeDescription
holderCountnumberTotal known holders
topHolderPercentnumber% of supply held by the single largest wallet
top10Percentnumber% of supply held by the top 10 wallets combined
supplynumber | nullTotal supply, when resolvable

analystReport

FieldTypeDescription
whatHappenedstringFactual recap of the market snapshot
whyItMattersstringThe AI-generated (or fallback) risk summary
whatToVerifyNextstring[]Suggested follow-up checks, including active penalties if any
finalVerdictstringTop risk reason plus a note on what the score reflects

Top-level fields

FieldTypeDescription
riskScorenumber0-100 score; see Risk Score Methodology
riskVerdictstringReserved for a future short-label verdict. Currently always an empty string.
launchIntelligenceobject | nullReserved for future launch-forensics data. Currently always null.
scoreBreakdownobjectPer-component points; see Risk Score Methodology
scorePenaltiesstring[]Penalty labels that applied to this scan
summarystringThe same value as analystReport.whyItMatters
dataAvailabilitystring[]Notes about data that couldn't be fetched, e.g. "On-chain holder data unavailable"

Example response

{
  "data": {
    "token": {
      "address": "0x71C9...4a2B",
      "symbol": "EXAMPLE",
      "name": "Example Token",
      "chain": "ethereum"
    },
    "launchIntelligence": null,
    "liquidityBreakdown": {
      "dexName": "Uniswap V3",
      "pairAddress": "0xabc...123",
      "baseToken": "EXAMPLE",
      "quoteToken": "WETH",
      "priceUsd": 0.00042,
      "marketCapUsd": 4200000,
      "liquidityUsd": 312000,
      "liquidityBase": 5000000,
      "liquidityQuote": 62,
      "chainLiquidityUsd": 312000,
      "chainTopDexName": "Uniswap V3",
      "chainTopPairAddress": "0xabc...123",
      "volume24h": 118500,
      "volumeM5": 620,
      "volumeH1": 8100,
      "volumeH6": 41000,
      "priceChange24h": -3.42,
      "priceChangeM5": 0.1,
      "priceChangeH1": -0.8,
      "priceChangeH6": -2.1,
      "poolAgeHours": 432.5
    },
    "activityAnalysis": {
      "buysM5": 3,
      "sellsM5": 1,
      "buysH1": 41,
      "sellsH1": 29,
      "buysH6": 210,
      "sellsH6": 188,
      "buys24h": 812,
      "sells24h": 749,
      "summary": "The pair recorded about 812 buys and 749 sells in the last 24 hours."
    },
    "holderDistribution": {
      "holderCount": 4981,
      "topHolderPercent": 3.2,
      "top10Percent": 24.6,
      "supply": 1000000000
    },
    "analystReport": {
      "whatHappened": "EXAMPLE is currently trading primarily on Uniswap V3 with about $312,000 of visible liquidity, 118,500 in 24h volume, and a -3.42% move over the last day. Estimated market cap sits near $4,200,000.",
      "whyItMatters": "Knovo Score is 82/100. Liquidity, maturity, and market structure all look comparatively strong.",
      "whatToVerifyNext": [
        "Track whether liquidity stays stable as volume rotates through the pool.",
        "Watch for abrupt price and activity shifts across the primary trading pair."
      ],
      "finalVerdict": "Liquidity, maturity, and market structure all look comparatively strong. Score reflects liquidity, holder concentration, activity, and market structure."
    },
    "riskScore": 82,
    "riskVerdict": "",
    "scoreBreakdown": {
      "liquidity": 16,
      "marketCap": 10,
      "holders": 18,
      "activity": 12,
      "pressure": 7,
      "volatility": 10,
      "pool": 5,
      "security": 10
    },
    "scorePenalties": [],
    "summary": "Knovo Score is 82/100. Liquidity, maturity, and market structure all look comparatively strong.",
    "dataAvailability": []
  }
}

Error responses

StatusCauseBody
400address missing from the request body{ "error": "Token contract address is required." }
400address doesn't match the EVM or Solana pattern{ "error": "Enter a valid token contract address (EVM 0x... or Solana base58)." }
404no Dexscreener pair found for the address{ "error": "No token data found for this contract address." }
500an unexpected error during processing{ "error": "<message or fallback text>" }

Example request

curl -X POST https://www.knovo.xyz/api/analyze \
  -H "Content-Type: application/json" \
  -d '{"address":"0x71C9c4b4Fa4A2b9e9f9c2e8B3A1D6C5F4E3D2A1B"}'
  • See Risk Score Methodology for how riskScore and scoreBreakdown are computed.
  • See Data Sources for what each upstream provider contributes and what happens when a key is missing.