ComparableRate
One comparable venue/term. Three rates are kept deliberately apart: aprPct is what the venue advertises (0 notional / top of book), aprAtAmountPct is that rate at the requested size, effectiveAprPct is the size-priced rate normalized to the requested horizon — and is what rank sorts on.
1-based position in the ranking. 0 on the reference item.
EVM chain id, as a decimal string. See the ChainId schema.
Raw lender key — stable, use it for keying and deeplinks. Per-market lenders (Morpho Blue, Silo, Euler) encode a hashed market id here, so it is NOT presentable.
Display name from the lender registry, falling back to the raw key when none is registered. This is what a UI should render.
The market the rate belongs to: the debt market for a borrow quote, the collateral market for a supply quote.
Possible values: [fixed, float]
Which repayment rule priced this quote.
Possible values: [variable, lista, midnight, term, exactly, teller, fixedTerm, userSet, zeroInterest]
Sticker rate, APR %. Includes intrinsic yield and reward APR (same composition as borrowAprShort / depositAprLong); a one-time origination fee is NOT in it — the horizon model amortizes that separately.
The rate at the requested size. Null when no amount was supplied. A utilization pool re-prices its whole balance to the post-action rate; an order book fills cheapest-first, so this is the VWAP of the tiers consumed.
Reward emissions folded into the headline (positive = subsidising a borrow). Large emissions can push a borrow rate NEGATIVE.
The rate WITHOUT reward emissions — the structural, sustainable cost. Show it next to a reward-inflated headline; emissions are transient.
Size-priced rate normalized to horizonDays. The ranking number.
Total cost over the horizon as a percent of principal.
horizon object
How the effective rate was arrived at — the caveats a UI must show next to a normalized number.
flat-forward: no maturity, today’s floating rate assumed to hold. early-exit: horizon shorter than the term, the venue’s exit rule applied. held-to-maturity: horizon matches the term (the clean case). rolled: horizon outlasts the term, a roll at today’s rate assumed.
Possible values: [flat-forward, early-exit, held-to-maturity, rolled]
Is the rate contractually fixed for the WHOLE horizon? False for floating pools and for a fixed term that has to be rolled to cover the horizon.
Exiting early means unwinding on an order book at the then-current price (Midnight/Term), so the realized cost can land either side of the quote. Not priced in — flagged.
Display-ready caveats, most important first.
Calendar maturity, unix seconds. Null for rolling menus and variable pools.
Remaining term in days for a position opened now.
Can this rate be taken right now? False for a Term repo between auction rounds, whose rate card still quotes the last round’s clearing rate.
last-clearing marks a historical print, not an obtainable quote — never render it as an actionable rate.
Possible values: [live, last-clearing]
depth object
Depth ceiling in token units of the priced leg — borrow liquidity for a pool, total book depth for an order book.
The requested amount exceeds fillable: this venue cannot fund the position at that size, and the row is demoted below every non-capped one.
Market utilization, as a fraction between 0 and 1.
collateral object
EVM contract address, lowercase or checksummed hex.
Group of economically equivalent assets, e.g. all USDC variants.
Token symbol, e.g. WETH.
Token decimals — divide raw amounts by 10 ** decimals.
URL of the logo image.
Market identifier, formatted lender:chainId:address.
debt object
EVM contract address, lowercase or checksummed hex.
Group of economically equivalent assets, e.g. all USDC variants.
Token symbol, e.g. WETH.
Token decimals — divide raw amounts by 10 ** decimals.
URL of the logo image.
Market identifier, formatted lender:chainId:address.
Highest leverage multiple reachable in this market.
Loan-to-value ratio, as a fraction between 0 and 1.
risk object
{
"rank": 0,
"chainId": "string",
"lender": "string",
"lenderName": "string",
"lenderLogoUri": "string",
"marketUid": "string",
"marketName": "string",
"curatorName": "string",
"eMode": "string",
"rateType": "fixed",
"rateModel": "variable",
"aprPct": 0,
"aprAtAmountPct": 0,
"rewardAprPct": 0,
"aprExRewardsPct": 0,
"effectiveAprPct": 0,
"costPct": 0,
"horizon": {
"basis": "flat-forward",
"locked": true,
"priceRisk": true,
"assumptions": [
"string"
]
},
"termId": "string",
"durationDays": 0,
"maturity": 0,
"termDays": 0,
"obtainable": true,
"obtainableReason": "string",
"quoteBasis": "live",
"depth": {
"fillable": 0,
"capped": true,
"liquidityUsd": 0,
"utilization": 0
},
"collateral": {
"address": "string",
"assetGroup": "string",
"symbol": "string",
"decimals": 0,
"logoUri": "string",
"marketUid": "string"
},
"debt": {
"address": "string",
"assetGroup": "string",
"symbol": "string",
"decimals": 0,
"logoUri": "string",
"marketUid": "string"
},
"maxLeverage": 0,
"ltv": 0,
"risk": {
"configScore": 0,
"maxTokenScore": 0
}
}