API ReferenceWallet Quality
Live

Wallet Quality

Is this wallet actually skilled, or just lucky and large? Wallet Quality answers that with a position-correct skill signal — the metric Conyr is built around and the one commodity APIs get wrong.

⚠️

Most providers report a per-exit win rate: profitable exits / total exits. A trader who scales out of one winner over five sells books five “wins.” On a real leaderboard whale we measured 44.6% per-exit vs 1.96% position-correct — a 22× distortion. The position-correct metrics below (gated on full-position exits) predicted forward profitability +10–14 points beyond raw past PnL in backtest.

The quality object

FieldTypeDescription
walletstringThe wallet
ratedbooleantrue when the wallet has ≥10 closed positions (enough sample to trust the behavioral metrics)
skill_scorenumberComposite 0–100 (see below)
position_win_rate_pctnumberThe differentiator — win rate over full, position-level outcomes
raw_exit_win_rate_pctnumberThe commodity per-exit rate, for contrast
win_rate_inflation_ptsnumberraw − position — how many points the commodity number overstates skill
disposition_indexnumberAvg hold on winners ÷ avg hold on losers (below 1 = cuts losers fast)
conviction_sizingnumberAvg entry size on winners ÷ on losers (>1 = sizes up when right)
profit_factornumberGross profit ÷ gross loss
runner_scorenumberTendency to let winners run (0–1)
roi_p10_pct / roi_p50_pct / roi_p90_pctnumberPer-position ROI distribution
avg_loss_roi_pct / loss_consistency_stddevnumberLoss size and how consistent losses are
big_wins / big_lossesnumberCount of outsized outcomes
realized_pnl_usdnumberTotal realized PnL over closed positions
performance_level · trader_type · exit_style · size_classstringTaxonomy (Labels)
closed_positionsnumberSample size
trade_badgesstring[]Behavioral badges

skill_score

A heuristic, explainable composite in [0, 100] — a weighted blend of the signals that backtested as predictive (weights are operator-tuned, not a calibrated probability):

skill_score = 100 × (
    0.40 · position_win_rate
  + 0.30 · profit_factor   (mapped 0.5→3.0 ⇒ 0→1)
  + 0.15 · disposition     (cuts losers faster ⇒ higher)
  + 0.15 · runner_score
)

REST

L2   GET /v1/wallet/{address}/quality

curl -H "Authorization: Bearer $API_KEY" \
  "https://api.conyr.ai/v1/wallet/7xKXtg.../quality"
{
  "wallet": "7xKXtg...",
  "rated": true,
  "skill_score": 71.4,
  "position_win_rate_pct": 38.2,
  "raw_exit_win_rate_pct": 61.0,
  "win_rate_inflation_pts": 22.8,
  "disposition_index": 0.82,
  "conviction_sizing": 1.6,
  "profit_factor": 2.1,
  "runner_score": 0.64,
  "roi_p10_pct": -38.0, "roi_p50_pct": 9.5, "roi_p90_pct": 220.0,
  "big_wins": 12, "big_losses": 4,
  "realized_pnl_usd": 48210.0,
  "performance_level": "PROFITABLE",
  "trader_type": "SWING_TRADER",
  "exit_style": "DCA_OUT",
  "size_class": "SHARK",
  "closed_positions": 184,
  "trade_badges": ["CONSISTENT_WINNER", "RUNNER_KEEPER"]
}

When rated is false (fewer than 10 closed positions) the behavioral metrics are present but not statistically meaningful — treat the wallet as unrated. The endpoint returns null for a wallet with no closed positions in the snapshot.