Token Health Score
A single 0–100 read on how healthy a token is, recomputed continuously from six independent dimensions. Each dimension is scored and carries its own confidence, so you get one number to rank on plus the breakdown to explain it.
The six dimensions
| Dimension | What it assesses |
|---|---|
| Security | Validation status, mint/freeze authority risk, rug and manipulation signals |
| Liquidity | Depth and stability of the token’s liquidity |
| Distribution | Supply concentration — including how much sits in coordinated bundles |
| Momentum | Trade and price momentum |
| Trader quality | The skill of the wallets actually trading it |
| Behavior | Behavioral health of the trading crowd |
How the composite works
The composite is a confidence-weighted blend of the six dimensions: each contributes in proportion to both its weight and how much data backs it. The two consequences worth knowing:
- Missing data doesn’t drag the score. A dimension with little signal contributes little — it widens uncertainty rather than pulling the composite toward a false “neutral.”
- Every dimension reports its own confidence. Read
composite_confidenceand the per-dimension confidences to know how much to trust the number for a given token.
Dimension weights are operator-tuned — security and distribution carry the most, momentum/trader-quality/behavior the least — and are not part of the public contract. Build on composite_score, the per-dimension scores, their confidences, and top_signals; don’t reverse-engineer the weighting.
The score object
| Field | Type | Description |
|---|---|---|
composite_score | number | Overall health, 0–100 (higher = healthier) |
composite_confidence | number | How much data backs the composite, 0–1 |
{dimension}_score | number | Per-dimension score, 0–100 — for security, liquidity, distribution, momentum, trader_quality, behavior |
{dimension}_confidence | number | Per-dimension confidence, 0–1 |
top_signals | string[] | Human-readable drivers behind the score |
last_updated_ms | number | When the score was last recomputed |
REST
L2 GET /v1/token/{mint}/score
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/token/EPjFWd.../score"{
"mint": "EPjFWd...",
"composite_score": 72.4,
"composite_confidence": 0.81,
"security_score": 88.0, "security_confidence": 0.95,
"liquidity_score": 64.0, "liquidity_confidence": 0.90,
"distribution_score": 58.0, "distribution_confidence": 0.86,
"momentum_score": 70.0, "momentum_confidence": 0.60,
"trader_quality_score": 81.0,"trader_quality_confidence": 0.55,
"behavior_score": 69.0, "behavior_confidence": 0.50,
"top_signals": ["Low bundled supply", "CEX-validated liquidity", "Improving trader quality"],
"last_updated_ms": 1709654400000
}Served on the numbered /v1 tier (Layer 2) and on Conyr’s public/extension surface. The response shape is stable.
Stream
Planned A live token:{mint}:score channel (pushing the score on every recompute) is on the roadmap. Until it ships, poll the REST endpoint.
A low composite_confidence means thin data, not a bad token — treat the score cautiously and lean on the dimensions whose confidence is high. top_signals is the explainable surface: the same role evidence plays for Bundles. For the raw security inputs behind the security dimension, see Token Security & Validation.