Skip to main content
Returns the on-chain reputation score for a wallet, computed from its activity across 9 chains (Ethereum, Polygon, Arbitrum, Linea, Gnosis, Blast, Mantle, Berachain, Unichain), ENS identity, wallet age, and participation in reward programs. The score is independent of any specific point system — it reflects the wallet’s real on-chain history. Scores are cached for 30 days and refreshed daily by the scoring engine.

GET /api/score

Request

GET https://api.rewards.so/api/score?address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045
Authorization: Bearer rw_your_api_key

Query parameters

ParameterTypeRequiredDescription
addressstringYes0x address (lowercase)
forcebooleanNoSet to true to bypass the 30-day cache and fetch a fresh score

Response 200

{
  "id": "uuid",
  "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
  "finalScore": 78,
  "breakdown": {
    "age_factor": 0.95,
    "activity_factor": 0.87,
    "wallet_age_days": 1842,
    "total_txs": 312,
    "chains_active": 5,
    "last_tx_days_ago": 2
  },
  "bonuses": {
    "ens": 5,
    "multichain": 3,
    "rewards": 8
  },
  "penalties": {
    "recency": 0,
    "humanity": 0,
    "bot": 0
  },
  "dataSources": {
    "etherscan": true,
    "rewards": true
  },
  "cached": true,
  "cachedAt": "2026-04-21T08:00:00.000Z"
}

Response fields

FieldTypeDescription
finalScorenumberReputation score from 0 to 100
breakdown.age_factornumberWallet age factor (0–1). Reaches 1.0 at 4+ years
breakdown.activity_factornumberOn-chain activity factor (0–1). Reaches 1.0 at 2000+ txs
breakdown.wallet_age_daysnumber | nullAge of the wallet in days
breakdown.total_txsnumberTotal transactions across all tracked chains
breakdown.chains_activenumberNumber of chains with at least one transaction
breakdown.last_tx_days_agonumber | nullDays since the last transaction
bonuses.ensnumber+5 if the wallet has a primary ENS or Base name
bonuses.multichainnumber+3 if active on 3+ chains
bonuses.rewardsnumber0–10 based on percentile rank across reward programs
penalties.recencynumber-5 if no activity in the last 180 days
penalties.humanitynumber0–30 penalty for bot-like temporal patterns
penalties.botnumber0–30 penalty for correlated blacklist signals
dataSources.etherscanbooleanWhether on-chain data was available
dataSources.rewardsbooleanWhether rewards program data was available
cachedbooleantrue if the score was served from cache
cachedAtstring | nullISO timestamp of when the score was cached

Errors

StatusMessageCause
400Missing addressNo address query parameter
401Missing API keyNo Authorization header
401Invalid API keyKey not found
403This API key does not have read permissionsKey lacks read permission
503Score service unavailableScoring backend unreachable and no cached score

Scoring formula

rawScore = age_factor × activity_factor × 100
         + ens_bonus       (0 or +5)
         + multichain_bonus (0 or +3)
         + rewards_bonus    (0–10)
         - recency_penalty  (0 or -5)

finalScore = clamp(rawScore - bot_penalty - humanity_penalty, 0, 100)
A wallet with no activity gets a score near 0. A long-lived, multi-chain wallet with ENS and active reward program participation scores close to 100.

Code examples

curl "https://api.rewards.so/api/score?address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045" \
  -H "Authorization: Bearer rw_your_api_key"