Skip to main content
POST
Get loan information

Body

application/json
assetTypes
integer<int32>[]
Required range: x >= 0
borrowers
string[]

loan borrower

collateralIdentifiers
string[]
collateralMints
string[]
excludeCollateralIdentifiers
string[]
excludeCollateralMints
string[]

Filters on loan_collateral.asset_mint, complementing exclude_collateral_identifiers (which filters on asset_identifier). For plain SPL collateral the two columns are equal; for LP/pool collateral asset_identifier is the pool_id, so excluding by mint alone won't catch those rows. Set both to cover both cases.

excludePrincipalMints
string[]
filterType
integer<int32> | null

filter type enum

Required range: x >= 0
includePnl
boolean

When true, /loans/info runs the PnL pipeline against the page's loans in parallel with the list-side pricing pass and stamps a LoanPnlDetails onto each LoanSummaryItem. Off by default so the dropdown/filter-edit calls that don't render PnL stay cheap.

lenders
string[]

loan lender

loanAddresses
string[]

loan address

loopVaultPrincipalCollateralPairs
object[]
orderFundingTypes
integer<int32> | null
Required range: x >= 0
page
integer<int64> | null
Required range: x >= 0
pageSize
integer<int64> | null
Required range: x >= 0
principalMints
string[]

principal

sortSide
integer<int32>

Sort direction: 0 = ascending, 1 = descending.

Required range: x >= 0
sortType
integer<int32>

Sort key (see LoanInfoSorting discriminants).

Required range: x >= 0

Response

List of loan data

aggregate
object
required

Filter-scoped aggregate over the full matched loan set. USD fields use the request's pinned oracle snapshot. APYs are returned in fractional form (0.085 = 8.5%), not cbps.

dailyInterestUsd, dailyCollateralYieldUsd, and dailyPrincipalYieldUsd are role-neutral primitives. The FE composes role-specific composites:

  • Borrower daily net carry: dailyCollateralYieldUsd − dailyInterestUsd
  • Lender daily net carry: dailyInterestUsd
  • Loop net daily yield: dailyCollateralYieldUsd − dailyInterestUsd − dailyPrincipalYieldUsd (loops borrow yield-bearing principals like JLP/mSOL where the borrowed asset itself appreciates — that appreciation is a real cost on the debt leg captured by dailyPrincipalYieldUsd).

interestEarnedAllTimeUsd is currently always 0 on this endpoint — closed loans have interest_outstanding = 0 so a SUM-by-mint approach can't recover the realized interest. Lender lifetime interest should be sourced from /strategy/infos (which uses strategy.cumulative_interest_accrued). Borrower lifetime interest is not currently computable; revisit by parsing loan_events_v1.action_metadata for RepayPrincipal events if needed.

pnlUsd is computed as collateralUsd − principalUsd − interestAccruedUsd − Σ netInflowUsd where net inflow is the borrower's net dollar contribution from account_balance_changes (cached event-time USD). Reflects realized + unrealized PnL combined.

collateralMints
string[]
required
items
object[]
required

Per-loan items (each flattens the loan snapshot + USD/risk fields).

pageInfo
object
required

Pagination envelope shared across paginated listing endpoints (/loans/info, /strategy/infos, /loop/info/v2, /lending_vaults/user/v2). totalItems / totalPages are filter-scoped, not page-scoped.

principalMints
string[]
required
snapshotTs
integer<int64>
required