CreditGraph reads a wallet's borrowing history across lending protocols — repayments, collateral ratios maintained under stress, liquidations survived and suffered — and returns underwriting signals with the positions behind them.
POST /v1/credit/profile
{ "chain": "ethereum", "address": "0x91cd…8ee0",
"lookback_days": 540 }
→ 200 OK
{
"tier": "B+",
"signals": {
"repayment_events": 47,
"repayment_ratio": 0.98,
"liquidations_suffered": 1,
"min_health_factor_90d": 1.34,
"collateral_stability": "disciplined",
"protocol_concentration": 0.62
},
"thin_file": false,
"as_of_block": 20914773
}
No composite number is invented where the history does not support one. A wallet with too little activity comes back as thin_file: true rather than a confident bad grade.
protocol adapters, EVM and Solana lending markets
default lookback, configurable to full history
off-chain data required to produce a profile
tiers are derived from your own portfolio outcomes, not ours
Figures describe the current production deployment and are restated each quarter. Ask for the latest measurement report before you cite them.
Over-collateralised lending works because the collateral does the underwriting. The moment you want thinner collateral, longer duration or an undercollateralised line, you need a view of the borrower — and the borrower is an address with no credit bureau behind it.
The history is public and almost nobody reads it properly. A wallet that has maintained a health factor above 1.3 through two drawdowns and repaid forty-seven times is a materially different risk from one that has never been stressed, and both look identical on a balance snapshot.
Every borrow, repay, deposit, withdrawal and liquidation is reconstructed per protocol from raw events — not from a protocol's own subgraph, so a subgraph outage or a schema change does not silently truncate a borrower's history.
Behaviour is read against market conditions. Maintaining collateral through a 30% two-day drawdown counts; maintaining it in a flat month tells you very little, and the signals weight the two differently.
You get the components — repayment ratio, minimum health factor, concentration, liquidation record — and optionally a tier fitted to your own realised losses. We would rather hand you the inputs to your credit policy than a grade you have to trust blindly.
| Field | Type | Meaning |
|---|---|---|
| tier | string | Optional letter grade. Only returned once fitted to a portfolio; absent by default. |
| repayment_ratio | float 0–1 | Value repaid over value borrowed across the lookback window. |
| min_health_factor_90d | float | Tightest collateral position held in the last 90 days. Below 1.1 means repeatedly near liquidation. |
| liquidations_suffered | integer | Count of liquidation events against this address, with links to each. |
| protocol_concentration | float 0–1 | Herfindahl measure across protocols. High means one protocol failure takes the borrower with it. |
| thin_file | boolean | True when history is too sparse to support a signal. Treat as unknown, not as bad. |
On-chain history is evidence of past behaviour by a key, not proof of identity or of future capacity to repay.
thin_file alone will reject the newest half of the market — that is a policy choice, and it should be a deliberate one.The most useful first evaluation is a backfill of loans you have already resolved. Point-in-time replay makes that a fair test rather than hindsight.