FairScale

Score Endpoint

Complete human wallet analysis — score, tier, badges, actions, humanity signal, and 15 on-chain features grouped into five trust pillars.

Score Endpoint

GET /score

The flagship human-scoring endpoint. Returns everything you'd see on the FairScale dashboard in one call: a final fairscore (0–100), tier, badges, recommended actions, humanity signal, and the full on-chain feature fingerprint.

Most integrators only need this endpoint. The /fairScore, /walletScore, and /socialScore endpoints are single-number shortcuts for lightweight use cases.

Endpoint

GET https://api.fairscale.xyz/score?wallet=WALLET_ADDRESS
ParameterTypeRequiredDescription
walletstringYesSolana wallet address
twitterstringNoX/Twitter handle to bind to the wallet and enrich social score
HeaderRequiredDescription
fairkeyYesAPI key (or use x402 payment)

Cache: 15 minutes. Force recomputation with /newScore (same parameters).

Example Response

Verified against api.fairscale.xyz/score on 2026-04-17:

{
  "wallet": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
  "fairscore_base": 24.3,
  "social_score": 61.7,
  "peer_score": 0.0,
  "fairscore": 27.5,
  "verified_human": false,
  "tier": "silver",
  "badges": [
    { "id": "lst_staker",       "label": "LST Staker",       "description": "Holds Liquid Staking Tokens",   "tier": "gold" },
    { "id": "sol_maxi",         "label": "SOL Maxi",         "description": "Strong SOL holder",              "tier": "gold" },
    { "id": "no_dumper",        "label": "No Instant Dumps", "description": "Never panic sells",              "tier": "silver" },
    { "id": "social_connected", "label": "Social Connected", "description": "Verified Twitter account",       "tier": "bronze" },
    { "id": "active_tweeter",   "label": "Active Tweeter",   "description": "20+ tweets in 30 days",          "tier": "bronze" },
    { "id": "content_creator",  "label": "Content Creator",  "description": "60%+ original tweets",           "tier": "gold" },
    { "id": "positive_vibes",   "label": "Positive Vibes",   "description": "High sentiment & positivity",    "tier": "gold" }
  ],
  "actions": [
    { "id": "increase_lst",         "label": "Increase LST Holdings", "description": "Top scorers hold 50%+ of portfolio in LST", "priority": "medium", "cta": "Stake More →" },
    { "id": "hold_longer",          "label": "Hold Positions Longer", "description": "Diamond hands hold for 30+ days",           "priority": "medium", "cta": "Learn More →" },
    { "id": "diversify_platforms",  "label": "Try More Platforms",    "description": "Explore Jupiter, Raydium, Orca, and more",  "priority": "low",    "cta": "Discover DEXes →" }
  ],
  "timestamp": "2026-04-17T11:59:04.121417Z",
  "features": {
    "lst_percentile_score":    47.5,
    "major_percentile_score":  42.5,
    "native_sol_percentile":   98.37,
    "stable_percentile_score": 98.58,
    "tx_count":                0,
    "active_days":             0,
    "median_gap_hours":        24,
    "tempo_cv":                0,
    "burst_ratio":             0,
    "net_sol_flow_30d":        0,
    "median_hold_days":        0,
    "no_instant_dumps":        1,
    "conviction_ratio":        0,
    "platform_diversity":      0,
    "wallet_age_score":        0
  }
}

Top-Level Fields

FieldTypeDescription
walletstringEchoes the requested wallet
fairscorenumberFinal blended score, 0–100. 0.50 · base + 0.20 · social + 0.30 · peer
fairscore_basenumberRaw on-chain score from the neural network (features only)
social_scorenumberSocial reputation (X activity, tone, CTA/shill ratio, follower quality). 0 if no X handle linked.
peer_scorenumberPeer-review score from the FairScale vouch graph. 0 if no vouches received.
verified_humanbooleantrue if the wallet has a VeryAI ZK palm-scan humanity attestation
tierenumbronze · silver · gold · platinum · diamond
badgesBadge[]Earned behavioural badges (see below)
actionsAction[]Recommended next steps to improve the score
cachedbooleanPresent on cache-hit responses only. true if served from the 15-min cache.
timestampstringISO-8601 UTC scoring timestamp
featuresobjectOn-chain feature fingerprint — 15 fields, see Features

Badge

{ id: string; label: string; description: string; tier: "bronze"|"silver"|"gold"|"platinum" }

Action

{ id: string; label: string; description: string; priority: "high"|"medium"|"low"; cta: string }

Features

The features object returns 15 on-chain signals, all engineered to be comparable across wallets. Percentile-ranked fields are 0–100 (higher is stronger). Raw counts and durations use their natural units.

Portfolio Composition — "What does the wallet actually hold?"

FieldTypeUnitMeaning
native_sol_percentilenumberpercentileNative SOL holdings vs. the population
major_percentile_scorenumberpercentileBlue-chip token holdings (JUP, JTO, BONK, HNT, …)
stable_percentile_scorenumberpercentileStablecoin holdings (USDC, USDT)
lst_percentile_scorenumberpercentileLiquid staking token holdings (mSOL, jitoSOL, …)

Capital Flow — "Accumulating or exiting?"

FieldTypeUnitMeaning
net_sol_flow_30dnumberSOLInflow – outflow over the last 30 d

Holding Conviction — "Hold with conviction or flip fast?"

FieldTypeUnitMeaning
median_hold_daysnumberdaysMedian position hold time
conviction_rationumber0–1 ratioShare of positions held > 7 days
no_instant_dumpsnumber0 / 11 if the wallet never flipped a position in under 1 hour

Activity Tempo — "How often, how consistently?"

FieldTypeUnitMeaning
tx_countnumbercountTransactions in the 30 d window
active_daysnumbercountDistinct calendar days with activity
median_gap_hoursnumberhoursMedian time between consecutive transactions

Trading Behaviour — "Human-like or bot-like?"

FieldTypeUnitMeaning
tempo_cvnumbercoefficientVariance in inter-transaction gaps — humans irregular, bots metronomic
burst_rationumber0–1 ratioShare of trades within < 1 h of the previous — bot-likelihood indicator

Breadth — "One-trick pony or explorer?"

FieldTypeUnitMeaning
platform_diversitynumbercountDistinct protocols / platforms used
wallet_age_scorenumberpercentileWallet age rank — older wallets score higher

Trust Pillars (derived)

The dashboard groups these 15 features and the earned badges into five human-readable pillars. The API does not return pillars directly — they're derived from the features and badges you already get. The SDK ships a helper (client.insights.pillars) that reproduces the dashboard logic.

PillarQuestion it answersDriven by
EconomyCan they put capital where their mouth is?major_, stable_, native_sol_, lst_percentile_score
RiskWill they stick around or dump and run?median_hold_days, conviction_ratio, no_instant_dumps
ActivityAre they a real participant or a ghost?tx_count, active_days, median_gap_hours
DiversificationDo they explore or stick to one thing?platform_diversity, wallet_age_score
SocialDoes anyone actually know them?social_score, peer_score, linked X handle

Each pillar resolves to High / Medium / Low. See the SDK guide for the derivation helper.

Humanity Index (derived)

A 0–100 score expressing confidence that the wallet is operated by a human, not a bot or Sybil. Derived client-side:

  • If verified_human === true → score is 100, tier is verified_human. VeryAI has ZK-attested the wallet owner via palm scan.
  • Otherwise → a weighted combination of tempo_cv (timing variance — humans irregular, bots metronomic), burst_ratio (clustered trades), conviction_ratio, no_instant_dumps, and social signals produces a likely_human / unverified label.

The SDK helper client.insights.humanityIndex(score) returns { score, tier }.

Tiers

TierFairScoreMeaning
diamond85–100Elite long-term user
platinum70–84Highly trusted, active
gold55–69Solid track record
silver40–54Building reputation
bronze0–39Limited history / risk signals

Example Request

curl -X GET "https://api.fairscale.xyz/score?wallet=7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU" \
  -H "fairkey: YOUR_API_KEY"

With social linking:

curl -X GET "https://api.fairscale.xyz/score?wallet=WALLET&twitter=handle" \
  -H "fairkey: YOUR_API_KEY"

Errors

StatusMeaning
400Missing or invalid wallet
401Invalid / missing fairkey
402No fairkey and no x402 payment
429Rate limit exceeded
502Scoring engine unreachable

See Also