IRM rate curves
GET/v1/data/lending/irm
Return sampled borrow and deposit rate curves for one or more markets.
Each curve is a series of (utilization, borrowRate, depositRate) points spanning
0% to 100% utilization. Rates are APR % (e.g. 5.5 = 5.5% APR).
Supported protocols: aave, aave_v4, compound_v2, compound_v3, morpho (including Lista), euler_v2, silo, fluid, gearbox, dolomite.
Caching: IRM parameters are quasi-static and cached server-side for 1 hour. Computed curves are also cached (keyed by market UIDs + data-point count).
Plain-text reference — GET /v1/data/lending/irm
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
marketUids | query | string | yes | Comma-separated market UIDs, e.g. AAVE_V3:1:0xa0b8... |
dataPoints | query | integer | no | Number of curve sample points (1–20, default 20) |
Response 200
| Field | Type | Description |
|---|---|---|
success | True | |
data | object | Informational payload. null when the endpoint only builds calldata. |
data.count | integer | Number of markets returned |
data.items | object[] | The result set for this response. |
data.items[].marketUid | string | Unique market identifier (lenderKey:chainId:address) |
data.items[].protocol | aave, aave_v4, compound_v2, compound_v3, morpho, euler_v2, … (10 values) | IRM model type |
data.items[].lenderKey | string | |
data.items[].chainId | string | EVM chain id, as a decimal string. See the ChainId schema. |
data.items[].underlyingAddress | string | |
data.items[].marketName | string | |
data.items[].points | object[] | Sampled rate curve. Length = dataPoints + 1 (includes u=0 and u=1). |
data.items[].points[].utilization | number | Utilization ratio (0–1) |
data.items[].points[].borrowRate | number | Variable borrow rate (APR %, e.g. 7.67 = 7.67%) |
data.items[].points[].depositRate | number | Deposit/supply rate (APR %, e.g. 3.30 = 3.30%) |
actions | null |
Example response
{
"success": true,
"data": {
"count": 1,
"items": [
{
"marketUid": "SPARK:100:0x2a22f9c3b484c3629090feed35f17ff8f88f76f0",
"protocol": "aave",
"lenderKey": "SPARK",
"chainId": "100",
"underlyingAddress": "0x2a22f9c3b484c3629090feed35f17ff8f88f76f0",
"marketName": "Spark USDC.e",
"points": [
{
"utilization": 0.95,
"borrowRate": 7.67,
"depositRate": 3.3
}
]
}
]
}
}
Request
Responses
- 200
- 400
- 429
- 500
- 502
Rate curves per market
Validation error
Rate limited. Unauthenticated callers share a per-IP budget; send an x-api-key header to lift it. Retry with exponential backoff.
Unexpected server error. Safe to retry with backoff.
An upstream data source or protocol origin failed (error.code is ORIGIN_FAILED). error.details carries the per-origin status. This is also what a missing or malformed required parameter currently returns, rather than a 400.