Price borrower risk from real onchain history
ChainScore turns a wallet's borrowing and repayment record into a 300 to 850 credit score, with calibrated default probability and a published backtest. Built for lenders and protocols that underwrite onchain. One API call per decision.
Or check any wallet right now, free:
Illustrative example. Score range 300 to 850
- 40,000
- Wallets analyzed in training
- 88%
- Of liquidations flagged in backtest
- 7 + Solana
- EVM networks, plus Solana
- 300 to 850
- Score range
Coverage we will state precisely
Where our data is thinner, the score says so: every response carries a data-completeness figure and names its degraded sources. We would rather tell you than have you find out.
Ethereum
Full coverage: Aave V2/V3, Compound V2, complete tx history.
Arbitrum
Full coverage: Aave V3, complete tx history.
Optimism
Full coverage: Aave V3, complete tx history.
Polygon
Full coverage: Aave V3, complete tx history.
Base
Full coverage: Aave V3, complete tx history.
Avalanche
Borrow detection live; tx-history features reduced. Data completeness is reported on every score.
Scroll
Borrow detection live; tx-history features reduced. Data completeness is reported on every score.
Solana
Separate scoring path on the site. Not yet available on the partner API.
A credit score should measure how you repay
Offchain bureaus do not score someone who has never used credit. ChainScore works the same way. We only rate wallets with a real borrowing record, because repayment is the behavior a credit score exists to measure.
If a wallet has never borrowed, the API says exactly that. No invented numbers. That honesty is what makes the score worth pricing against.
Has borrowed onchain
A full 300 to 850 score with calibrated default probability, factor breakdown, and integrity signals.
Never borrowed
An explicit no-borrow-history flag instead of a misleading score, so your underwriting logic can branch on it.
From wallet to underwriting signal in one call
- 01
Send a wallet
One API call with any address, or paste it here. No connection, no KYC, nothing offchain.
- 02
We read its lending history
Every borrow, repayment, and liquidation across Aave V2/V3 and Compound V2, plus wallet history, read from public chain data.
- 03
Get a score you can price with
A 300 to 850 score with calibrated default probability, factor breakdown, integrity checks, and a data-completeness figure on every response.
Four factor groups, straight from the model
These are the model's actual feature groups, not marketing categories. Every score response breaks its result down along the same four lines.
Lending History
Borrows, repayments, and prior liquidations across Aave and Compound. Repayment ratio and liquidation history carry the most weight, exactly as offchain.
Wallet History
Wallet age, activity depth, and consistency over time. Established borrowers with a long record earn more trust than fresh addresses.
DeFi Activity
Breadth of protocol usage: LP positions, staking, governance. Signals of a real participant rather than a throwaway wallet.
Portfolio & Identity
Holdings, stablecoin mix, token diversity, and identity markers like ENS. How the account manages risk between loans.
We publish the backtest, misses included
Would ChainScore have flagged the wallets that got liquidated? The retrospective answers with real holdout data: recall, false positives, calibration, and where the model is weakest. Zero lookahead, reproducible, updated with the model.
Most scoring products show you their wins. Underwriters need the whole confusion matrix.
- Borrower records ingested
- 250K+
- Liquidated wallets in the data
- 20K+
- Protocols covered
- Aave V2, V3 + Compound V2
- No KYC, nothing offchain
- Public data only
A versioned API built for underwriting
Authenticated scoring with hashed bearer keys, signed score-change webhooks for monitored wallets, per-key rate limits, and an OpenAPI 3.1 spec. Every response is versioned and carries its provenance: model version, as-of time, data completeness.
curl https://chainscore.dev/api/v1/score/0xd8dA...6045 \
-H "Authorization: Bearer cs_live_..."
{
"score": 712,
"grade": "B",
"calibratedPD": 0.041,
"factors": [...],
"integrity": { "flagged": false },
"dataCompleteness": 1,
"modelVersion": "v5-xgb-cal",
"asOf": "..."
}