Get lending pairs
GET/v1/data/lending/pairs
Returns paginated leverage pair data with optional filters and sorting. Backed by the same origin route as /v1/data/lending/pairs/leverage, so it shares that endpoint's behaviour — including dropping pairs whose collateral leg has no remaining supply capacity (includeIlliquid=true keeps them).
Lista DAO fixed-term (brokered) debt side: when the short (debt) market is brokered, variableBorrowDisabledShort is true and termsShort[] lists the fixed-term loop options (each a MarketTerm). The pair has one loop option per term rather than a single variable-rate loop — use the per-term APR from termsShort[] in place of variableBorrowRateShort (which is 0/undefined for these pairs).
Credit desks: every row carries collateralDesk and debtDesk (see CreditDesk; null when the leg asset names no desk). Group strategies by collateralDesk — a stablecoin debt is not an exposure: a USDC-funded sUSDe loop is Ethena credit, not Circle credit.
Plain-text reference — GET /v1/data/lending/pairs
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
includeAMM | query | boolean | no | Include pairs with a Fluid smart (T2/T3/T4) vault on either leg. Excluded by default — the collateral or debt of those vaults is a two-token DEX LP; includeAMM=true opts in. Tokenized LP collateral (Lista …-SmartLP, Pendle LP) is an ordinary row and is not affected. Alias: includeAmm. The value is case-insensitive (true / 1); the parameter name is not. |
chainId | query | string | no | Filter by chain ID See the ChainId schema for the full set of supported chains. |
lender | query | string | no | Filter by lender key See the LenderId schema for the full set of accepted values. |
assetGroupLong | query | string | no | Filter by collateral asset group |
assetGroupShort | query | string | no | Filter by debt asset group |
collateralIssuers | query | string | no | CSV of issuer ids the collateral (long) asset must be issued by, e.g. sky, ethena. WHOSE CREDIT the asset is — not the money it is worth (USDe and USDC are both USD and are not the same credit), not the venue or curator that hosts it, not the chain or bridge it arrived over. OR-ed across the listed ids; there is no all mode, since an asset has at most one desk per axis. Assets with no issuer (WETH, BNB, AVAX) never match. Matches the asset's own desk OR its exposure desk by default; narrow with issuerMatch. |
debtIssuers | query | string | no | CSV of issuer ids the debt (short) asset must be issued by. Asked per LEG, never per pair. |
collateralAssetClasses | query | string | no | CSV of asset classes the collateral (long) asset must be of: stock, etf, pre-ipo, fund, credit, commodity, or the aliases stocks / equity (stock + etf + pre-ipo) and rwa (every class). Matches collateralAssetClass. Read verbatim off token-lists props.rwa (equity/stock → stock, equity/pre-ipo → pre-ipo, fund/etf → etf, other funds → fund, credit → credit, commodity → commodity), never from a ticker. An asset with no class (crypto) never matches; an unknown value is a 400 naming the valid ones. Forwarded to the origin and applied again by the 1delta API on the stamped rows, so an origin that ignores it cannot widen the answer (the page may then come back short of count). |
debtAssetClasses | query | string | no | CSV of asset classes the debt (short) asset must be of; same values. Matches debtAssetClass. Asked per LEG, like debtIssuers. |
collateralUnderlyingTickers | query | string | no | CSV of real-world tickers the collateral must track (collateralUnderlyingTicker, case-insensitive; equity classes only). ANDed with collateralAssetClasses. |
debtUnderlyingTickers | query | string | no | CSV of real-world tickers the debt asset must track (debtUnderlyingTicker). ANDed with debtAssetClasses. |
issuerMatch | query | any, direct, exposure, credit | no | Which desk the issuer filter matches. any (default) spans BOTH the asset's own desk and the desk its underlying resolves to — a PT over sUSDe is Pendle's INSTRUMENT and Ethena's CREDIT, so it answers to issuers=pendle and to issuers=ethena in one call, with no client-side union. direct = only that desk's own instruments. exposure = only wrappers whose underlying resolves to it. credit = only assets whose CREDIT DESK (see CreditDesk) is one of the ids: every asset has at most one, so under credit the issuers filter PARTITIONS the result (a PT-sUSDe answers to ethena and never to pendle). Applied per leg (collateralIssuers against collateralDesk, debtIssuers against debtDesk). credit is served by the 1delta API over the origin's any superset, scanning up to 20 origin pages; total is null (and truncated: true is set) when the scan stopped before the end. |
minApr | query | number | no | Minimum total APR |
minLeverage | query | number | no | Minimum max leverage |
minLiquidityUsd | query | number | no | Minimum liquidity in USD |
includeIlliquid | query | boolean | no | Keep pairs whose collateral leg has no remaining supply capacity (un-openable at any size). Off by default. |
sortBy | query | aprTotal, maxLeverage, totalDepositsUsdLong, totalDebtUsdShort | no | Sort field |
sortDir | query | asc, desc | no | Sort direction |
start | query | integer | no | Pagination start index |
count | query | integer | no | Page size |
Response 200
| Field | Type | Description |
|---|---|---|
success | True | |
data | object | |
data.start | integer | |
data.count | integer | Number of entries in items. |
data.items | object[] | The result set for this response. |
data.items[].chainId | string | EVM chain id, as a decimal string. See the ChainId schema. |
data.items[].lender | string | Protocol identifier. See the LenderId schema. |
data.items[].marketLongUid | string | Market UID of the collateral side |
data.items[].marketShortUid | string | Market UID of the debt side |
data.items[].collateralDesk | object | The CREDIT DESK of the collateral (long) asset — the strategy's exposure and what to group strategies by. null when the asset names no issuer. |
data.items[].debtDesk | object | The credit desk of the debt (short) asset — only whose money you OWE. A debt is not an exposure; never group strategies by it. |
data.items[].collateralAssetClass | stock, etf, pre-ipo, fund, credit, commodity, … (7 values) | WHAT KIND of real-world asset the collateral (long) asset is, from token-lists props.rwa; null = not a tokenized real-world asset. What collateralAssetClasses= matches. |
data.items[].debtAssetClass | stock, etf, pre-ipo, fund, credit, commodity, … (7 values) | The same for the debt (short) asset. What debtAssetClasses= matches. |
data.items[].collateralUnderlyingTicker | string | The real-world ticker the collateral tracks (TSLA); equity classes only. What collateralUnderlyingTickers= matches. |
data.items[].debtUnderlyingTicker | string | The real-world ticker the debt asset tracks; equity classes only. What debtUnderlyingTickers= matches. |
data.items[].marketNameLong | string | Display name of the collateral market/vault (e.g. the Euler eVault name). Disambiguates rows that share the collateral/debt token symbols and lender. |
data.items[].marketNameShort | string | Display name of the debt market/vault. For Euler this is the controller (debt) eVault — the primary way to tell otherwise-identical WETH→USDC rows apart. |
data.items[].curatorNameLong | string | Curator/brand of the collateral market (Euler: resolved from the vault governor). Null for lenders without a curator, or until the curator registry is seeded. Render as "curatorName + symbol", falling back to marketNameLong. |
data.items[].curatorNameShort | string | Curator/brand of the debt (controller) market. Same semantics as curatorNameLong. |
data.items[].assetLong | string | Collateral asset address |
data.items[].assetShort | string | Debt asset address |
data.items[].assetGroupLong | string | |
data.items[].assetGroupShort | string | |
data.items[].symbolLong | string | Collateral token symbol |
data.items[].nameLong | string | Collateral token name |
data.items[].symbolShort | string | Debt token symbol |
data.items[].nameShort | string | Debt token name |
data.items[].collateralFactorLong | number | Liquidation collateral factor for the long side |
data.items[].borrowCollateralFactorLong | number | Borrow-adjusted collateral factor for the long side |
data.items[].borrowFactorLong | number | Borrow factor for the long side |
data.items[].collateralDisabledLong | boolean | Whether collateral is disabled for the long asset |
data.items[].debtDisabledLong | boolean | Whether debt is disabled for the long asset |
data.items[].collateralFactorShort | number | Liquidation collateral factor for the short side |
data.items[].borrowCollateralFactorShort | number | Borrow-adjusted collateral factor for the short side |
data.items[].borrowFactorShort | number | Borrow factor for the short side |
data.items[].collateralDisabledShort | boolean | Whether collateral is disabled for the short asset |
data.items[].debtDisabledShort | boolean | Whether debt is disabled for the short asset |
data.items[].eModeConfigId | string | E-mode configuration ID |
data.items[].eMode | string | E-mode category |
data.items[].aprBase | number | Base APR (deposit - borrow + intrinsic, before rewards) |
Request
Responses
- 200
- 400
- 429
- 500
- 502
Pair data
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.