GET /api/score
Request
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
address | string | Yes | 0x address (lowercase) |
force | boolean | No | Set to true to bypass the 30-day cache and fetch a fresh score |
Response 200
Response fields
| Field | Type | Description |
|---|---|---|
finalScore | number | Reputation score from 0 to 100 |
breakdown.age_factor | number | Wallet age factor (0–1). Reaches 1.0 at 4+ years |
breakdown.activity_factor | number | On-chain activity factor (0–1). Reaches 1.0 at 2000+ txs |
breakdown.wallet_age_days | number | null | Age of the wallet in days |
breakdown.total_txs | number | Total transactions across all tracked chains |
breakdown.chains_active | number | Number of chains with at least one transaction |
breakdown.last_tx_days_ago | number | null | Days since the last transaction |
bonuses.ens | number | +5 if the wallet has a primary ENS or Base name |
bonuses.multichain | number | +3 if active on 3+ chains |
bonuses.rewards | number | 0–10 based on percentile rank across reward programs |
penalties.recency | number | -5 if no activity in the last 180 days |
penalties.humanity | number | 0–30 penalty for bot-like temporal patterns |
penalties.bot | number | 0–30 penalty for correlated blacklist signals |
dataSources.etherscan | boolean | Whether on-chain data was available |
dataSources.rewards | boolean | Whether rewards program data was available |
cached | boolean | true if the score was served from cache |
cachedAt | string | null | ISO timestamp of when the score was cached |
Errors
| Status | Message | Cause |
|---|---|---|
400 | Missing address | No address query parameter |
401 | Missing API key | No Authorization header |
401 | Invalid API key | Key not found |
403 | This API key does not have read permissions | Key lacks read permission |
503 | Score service unavailable | Scoring backend unreachable and no cached score |