Docs Menu

[Product]

Data Sources

Knovo doesn't maintain its own market or chain data. Every scan reads live from a small set of third-party APIs. This page covers what each one is used for, and what happens when a provider is unreachable or unconfigured.

Live in the current API response

Dexscreener

The primary market-data source. No API key required. lib/dexscreener.ts fetches every pair for the submitted address, falling back to a text search when no direct pair match exists, then sorts by liquidity (tiebreak: 24h volume) to pick the pair used for the rest of the scan.

  • Feeds: price, liquidity, market cap/FDV, volume, price change, and buy/sell counts across the 5m/1h/6h/24h windows.
  • Responses are cached for 30 seconds (Next.js fetch revalidation).
  • If Dexscreener is unreachable, the scan fails with a 404 (no pair found), since market data is required for scoring.

Moralis

Holder-distribution data. Requires MORALIS_API_KEY. lib/moralis.ts calls the Solana holder endpoints for Solana tokens, or the matching EVM endpoints otherwise; results are normalized by lib/holderAnalysis.ts into a top-holder % and top-10 %.

ChainDexscreener chain idMoralis chain param
Ethereumethereumeth
Basebasebase
BNB Chainbscbsc
Polygonpolygonpolygon
Arbitrumarbitrumarbitrum
Avalancheavax / avalancheavalanche
Solanasolanadedicated Solana endpoints
  • Responses are cached for 60 seconds.
  • Any other chain, a missing API key, or a failed request results in holderDistribution: null. The rest of the scan still completes normally, and dataAvailability notes the gap.

OpenAI

Generates the plain-English risk summary. Requires OPENAI_API_KEY; model is OPENAI_MODEL or defaults to gpt-5.4-mini. lib/openai.ts sends the already-computed score, breakdown, and penalties, and instructs the model to explain the number in two short sentences without inventing or changing it.

  • Missing key or a failed/empty response → Knovo falls back to a deterministic sentence: "Knovo Score is X/100. <top risk reason>."
  • The model never sees or influences the score calculation itself; it only explains a result it's handed.

In the codebase, not yet wired into scoring

A few modules exist for upcoming launch-forensics and contract-safety features. They are not currently called from /api/analyze, so they don't affect today's response or score.

GeckoTerminal

lib/geckoterminal.ts can search pools by query and sort by reserve. Present as an alternate/supplementary pool-search utility, not currently invoked by the live scan pipeline.

Block explorer analysis (Etherscan v2 API)

lib/explorer.ts can pull contract creation info, deployer address, source verification status, total supply, top holders, and LP burn/lock/deployer percentages via the Etherscan v2 multichain API (ETHERSCAN_API_KEY, covering Ethereum, BNB Chain, Polygon, Arbitrum, Base, and Avalanche). This is the intended data source for the security score component described in Risk Score Methodology once it's connected.

Launch detection

lib/launchDetection.ts combines Dexscreener pair metadata with explorer contract data to classify how a token likely launched: a manual DEX launch, a bonding-curve launch, a curve-to-LP migration, a fair launch, or unknown. This is what the reserved launchIntelligence response field is intended to carry once connected.

[ Note ]

These modules are functional in isolation but not part of the live request path today. If you're extending Knovo, wiring them into app/api/analyze/route.ts is the natural next step for launch-forensics and contract-safety scoring.