{"openapi":"3.1.0","info":{"version":"1.0.0","title":"Kamino Public API","description":"The Kamino API provides a comprehensive way to interact with Kamino without reading directly from the blockchain.\n\nThe API also provides the ability to fetch data that might not be available from just reading the chain.\n\nThe API is rate-limited for unauthenticated users. If you feel you need to make more requests or run into rate-limit issues, please reach out.\n"},"servers":[{"url":"https://api.dev.kamino.finance"}],"components":{"schemas":{"AddressBase58":{"type":"string","description":"Valid base58-encoded address","example":"VEG1EMtttdHunMbSza8uoms1R18VXmYSph2bBpHcSJd"},"Decimal":{"type":"string","description":"Decimal value represented as string","example":"1234.56789"},"SnapshotDateTime":{"type":"string","format":"date-time","description":"Timestamp when the snapshot was created (ISO 8601 format)","example":"2025-03-01T12:00:00.000Z"},"TransactionDateTime":{"type":"string","format":"date-time","description":"Timestamp when the transaction was executed (ISO 8601 format)","example":"2025-03-01T12:00:00.000Z"},"Apy":{"type":"string","description":"APY in decimal format (not percentage) represented as string. Multiply by 100 to get percentage (%) - 0.1 in API response is 10%.","example":"0.2","examples":["0.123","0","1","1.23","-0.5","999999.999999"]},"MarketMetricsResponse":{"type":"object","properties":{"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"timestamp":{"allOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"description":"Timestamp of the metrics snapshot","example":"2023-06-29T15:15:26.464Z"}]},"metrics":{"type":"object","properties":{"borrowTVL":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total borrowed value in USD","example":"1.000099969999999979181237244607594483571"}]},"depositTVL":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total deposited value in USD","example":"8.357187000999999979181237244607594483571"}]},"obligations":{"type":"integer","description":"Number of obligations","example":38}},"required":["borrowTVL","depositTVL","obligations"],"description":"Market metrics"}},"required":["market","timestamp","metrics"]},"Error":{"type":"object","properties":{"error":{"type":"string","description":"Error message for internal server failure","example":"An internal error occurred"}},"required":["error"],"description":"Internal server error response (500)","example":{"error":"An internal error occurred"}},"BorrowAndStakingApyResponse":{"type":"object","properties":{"createdOn":{"allOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"description":"Timestamp of the snapshot","example":"2023-10-17T15:00:06.009Z"}]},"borrowInterestApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Borrow interest APY","example":"0.027610992938039702"}]},"stakingApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Staking APY","example":"0.066527842899023711405366628964490454572"}]}},"required":["createdOn","borrowInterestApy","stakingApy"]},"ReserveMetricsResponse":{"type":"object","properties":{"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reserve public key"}]},"liquidityToken":{"type":"string","description":"Liquidity token symbol","example":"SOL"},"liquidityTokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Liquidity token mint address"}]},"maxLtv":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum loan-to-value ratio","example":"0.65"}]},"borrowApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Current borrow APY","example":"0.05450988511483601"}]},"supplyApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Current supply APY","example":"0.038266801210808055"}]},"totalSupply":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total supply amount"}]},"totalBorrow":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total borrow amount"}]},"totalBorrowUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total borrow in USD"}]},"totalSupplyUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total supply in USD"}]}},"required":["reserve","liquidityToken","liquidityTokenMint","maxLtv","borrowApy","supplyApy","totalSupply","totalBorrow","totalBorrowUsd","totalSupplyUsd"]},"LeverageMetricsResponse":{"type":"object","properties":{"avgLeverage":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Average leverage"}]},"totalBorrowed":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total borrowed amount"}]},"totalDeposited":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total deposited amount"}]},"totalBorrowedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total borrowed in USD"}]},"totalObligations":{"type":"string","description":"Total number of obligations"},"totalDepositedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total deposited in USD"}]},"tvl":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total Value Locked"}]},"updatedOn":{"type":"string","format":"date-time","description":"Last update timestamp"},"depositReserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Deposit reserve public key"}]},"borrowReserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Borrow reserve public key"}]},"tag":{"type":"string","description":"Tag (Multiply or Leverage)","example":"Multiply"}},"required":["avgLeverage","totalBorrowed","totalDeposited","totalBorrowedUsd","totalObligations","totalDepositedUsd","tvl","updatedOn","depositReserve","borrowReserve","tag"]},"ReserveAccountDataResponse":{"type":"object","properties":{"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Market public key"}]},"reserves":{"type":"array","items":{"type":"object","properties":{"pubkey":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reserve public key"}]},"data":{"type":"string","description":"Base64 encoded reserve account data"}},"required":["pubkey","data"]}}},"required":["market","reserves"]},"MarketsCollateralReservesResponse":{"type":"object","properties":{"collateralReserves":{"type":"array","items":{"$ref":"#/components/schemas/CollateralReserve"}}},"required":["collateralReserves"]},"CollateralReserve":{"type":"object","properties":{"lendingMarket":{"$ref":"#/components/schemas/AddressBase58"},"lendingMarketName":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"collateralReserve":{"$ref":"#/components/schemas/AddressBase58"},"collateralMint":{"$ref":"#/components/schemas/AddressBase58"},"borrowReserves":{"type":"array","items":{"$ref":"#/components/schemas/AddressBase58"}},"borrowReserveTerms":{"type":"array","items":{"$ref":"#/components/schemas/BorrowReserveTerms"},"description":"Elevation group terms per entry of borrowReserves, same order. Caps live on /reserves/batch/stats borrowCaps.debtAgainstCollateral. Absent on rows cached before the field existed."},"debtCategory":{"type":"string","description":"Readable debt asset category label","example":"Stablecoin assets"},"debtTag":{"type":"string","description":"Stable debt grouping, tab, and URL key","example":"stables"},"collateralCategory":{"type":["string","null"],"description":"Readable collateral asset category label, or null when uncategorized","example":"Crypto assets"},"collateralTag":{"type":["string","null"],"description":"Stable collateral tab key, or null when uncategorized","example":"crypto"},"collateralBackingDebtUsd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"USD value of this collateral attributed pro rata to the debt represented by borrowReserves, or null when portfolio market data is unavailable"},"debtAgainstCollateralUsd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"USD value of the debt represented by borrowReserves attributed pro rata against this collateral, or null when portfolio market data is unavailable"},"sizeUsd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Sum of collateralBackingDebtUsd and debtAgainstCollateralUsd, or null when either value is unavailable"},"slugs":{"type":"array","items":{"type":"string"}},"hidden":{"type":"boolean","description":"Whether the lending market is listed in resources hiddenMarkets","example":false}},"required":["lendingMarket","lendingMarketName","name","description","collateralReserve","collateralMint","borrowReserves","debtCategory","debtTag","collateralCategory","collateralTag","collateralBackingDebtUsd","debtAgainstCollateralUsd","sizeUsd","slugs","hidden"]},"BorrowReserveTerms":{"type":"object","properties":{"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Debt reserve these terms apply to, matching an entry of borrowReserves","example":"d4A2prbA2whesmvHaL88BH6Ewn5N4bTSU2Ze8P6Bc4Q"}]},"elevationGroup":{"type":"integer","description":"Elevation group a borrow of this debt against this collateral would auto-select, being the usable common group with the highest ltvPct. 0 when the pair has no usable group, in which case the terms below are the reserves own configuration.","example":2},"maxLtv":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum loan to value ratio for this collateral under elevationGroup","example":"0.87"}]},"liquidationLtv":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Liquidation loan to value ratio for this collateral under elevationGroup","example":"0.92"}]},"borrowFactor":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Borrow factor applied to this debt reserve under elevationGroup","example":"1"}]}},"required":["reserve","elevationGroup","maxLtv","liquidationLtv","borrowFactor"]},"MarketsMultiplyPairsResponse":{"type":"object","properties":{"multiplyPairs":{"type":"array","items":{"$ref":"#/components/schemas/MultiplyPair"}}},"required":["multiplyPairs"]},"MultiplyPair":{"type":"object","properties":{"lendingMarket":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Lending market the pair is configured under","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"collateralReserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reserve the Multiply position deposits","example":"EVbyPKrHG6WBfm4dLxLMJpUDY43cCAcHSpV3KYjKsktW"}]},"borrowReserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reserve the Multiply position borrows","example":"d4A2prbA2whesmvHaL88BH6Ewn5N4bTSU2Ze8P6Bc4Q"}]},"collateralMint":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}],"description":"Liquidity mint of collateralReserve, read from chain. Null when the pair can't be resolved on-chain.","example":"J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn"},"debtMint":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}],"description":"Liquidity mint of borrowReserve, read from chain. Null when the pair can't be resolved on-chain.","example":"So11111111111111111111111111111111111111112"},"elevationGroup":{"type":["integer","null"],"description":"Elevation group a deposit+borrow of this pair auto-selects, being the usable common group with the highest ltvPct. 0 when the pair has no usable group, in which case the values below are the reserves own configuration. Null when the pair can't be resolved on-chain.","example":2},"maxLeverage":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Maximum leverage, 1 / (1 - maxLtv / borrowFactor). Raw protocol ceiling, no safety factor. Values are for elevationGroup. Null when the pair can't be resolved on-chain.","example":"7.6923076923076923077"},"maxLtv":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Maximum loan to value ratio for this collateral. Decimal fraction, not bps. Raw protocol ceiling, no safety factor. Values are for elevationGroup. Null when the pair can't be resolved on-chain.","example":"0.87"},"liquidationLtv":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Liquidation loan to value ratio for this collateral. Decimal fraction, not bps. Raw protocol ceiling, no safety factor. Values are for elevationGroup. Null when the pair can't be resolved on-chain.","example":"0.92"},"borrowFactor":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Borrow factor applied to this debt, where 1 means no adjustment. Decimal fraction, not bps. Values are for elevationGroup. Null when the pair can't be resolved on-chain.","example":"1"},"flashLoanFee":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Flash loan fee of collateralReserve, paid when a Multiply open flash-borrows the collateral token (the SDK's preferred path; its debt-flash fallback pays the borrowReserve fee instead). 0 when flash loans are disabled on collateralReserve. Decimal fraction, not bps. Null when the pair can't be resolved on-chain.","example":"0.001"}},"required":["lendingMarket","collateralReserve","borrowReserve","collateralMint","debtMint","elevationGroup","maxLeverage","maxLtv","liquidationLtv","borrowFactor","flashLoanFee"]},"MarketsBatchMetadataResponse":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MarketMetadata"},"description":"Market metadata keyed by market public key. Unknown markets are omitted.","example":{"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF":{"reserves":["d4A2prbA2whesmvHaL88BH6Ewn5N4bTSU2Ze8P6Bc4Q"],"name":"SOL/BTC Market","description":"Primary market on mainnet","isCurated":false}}},"MarketMetadata":{"type":"object","properties":{"reserves":{"type":"array","items":{"$ref":"#/components/schemas/AddressBase58"},"description":"Public keys of all reserves in the market","example":["d4A2prbA2whesmvHaL88BH6Ewn5N4bTSU2Ze8P6Bc4Q"]},"name":{"type":"string","description":"Market name","example":"SOL/BTC Market"},"description":{"type":"string","description":"Market description","example":"Primary market on mainnet"},"isCurated":{"type":"boolean","description":"Whether this market is curated","example":false}},"required":["reserves","name","description","isCurated"]},"MarketChartsResponse":{"type":"object","properties":{"history":{"type":"array","items":{"$ref":"#/components/schemas/MarketChartsHistoryPoint"}}},"required":["history"]},"MarketChartsHistoryPoint":{"type":"object","properties":{"timestamp":{"$ref":"#/components/schemas/SnapshotDateTime"},"totalBorrowed":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}]},"totalSupplied":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}]},"obligations":{"type":["integer","null"]}},"required":["timestamp","totalBorrowed","totalSupplied","obligations"]},"ReserveChartsResponse":{"type":"object","properties":{"borrowCurve":{"type":"array","items":{"$ref":"#/components/schemas/BorrowRateCurvePoint"}},"history":{"type":"array","items":{"$ref":"#/components/schemas/ReserveChartsHistoryPoint"}}},"required":["borrowCurve","history"]},"BorrowRateCurvePoint":{"type":"object","properties":{"utilizationRateBps":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Utilization rate in basis points","example":"8000"}]},"borrowRateBps":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Nominal annual borrow rate in basis points, before the interest-rate-basis adjustment and fixed host interest. See /reserves/{reservePubkey}/stats for those inputs and the formula.","example":"500"}]}},"required":["utilizationRateBps","borrowRateBps"]},"ReserveChartsHistoryPoint":{"type":"object","properties":{"timestamp":{"$ref":"#/components/schemas/SnapshotDateTime"},"supplyApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Mean base supply APY across raw snapshots in the UTC hour or day bucket","example":"0.0412"}]},"borrowApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Mean base borrow APY across raw snapshots in the UTC hour or day bucket","example":"0.0621"}]},"totalSupply":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Mean reserve supply in UI token units, or null when unavailable","example":"125000.5"},"totalSupplyUsd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Mean reserve supply in USD, or null when unavailable","example":"250001"},"totalBorrow":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Mean reserve borrow in UI token units, or null when unavailable","example":"50000.2"},"totalBorrowUsd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Mean reserve borrow in USD, or null when unavailable","example":"100000.4"},"availableLiquidityCapped":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Mean cap-aware available liquidity in UI token units across raw snapshots in the UTC bucket, or null when unavailable","example":"50000"},"availableLiquidityCappedUsd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Mean cap-aware available liquidity in USD, using each snapshot token price, or null when unavailable","example":"100000"},"utilization":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Mean of per-snapshot borrowTvl / depositTvl in the UTC bucket, excluding zero deposit TVL, or null when unavailable","example":"0.4"}},"required":["timestamp","supplyApy","borrowApy","totalSupply","totalSupplyUsd","totalBorrow","totalBorrowUsd","availableLiquidityCapped","availableLiquidityCappedUsd","utilization"]},"ReservesBatchStatsResponse":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ReserveStats"},"description":"Reserve stats keyed by reserve public key. Unknown reserves are omitted."},"ReserveStats":{"type":"object","properties":{"token":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reserve liquidity token mint address"}]},"collateralMintAddress":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reserve collateral token mint address"}]},"rateType":{"type":"string","enum":["variable","fixed","maturity"],"description":"Reserve borrow rate type","example":"variable"},"fixedTerm":{"type":["object","null"],"properties":{"termSeconds":{"type":"integer","description":"Fixed debt term duration in seconds","example":2592000},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Current fixed-rate borrow APY","example":"0.0616"}]}},"required":["termSeconds","apy"],"description":"Fixed-term borrow details, or null for variable and maturity reserves"},"debtMaturityTimestamp":{"type":["string","null"],"format":"date-time","description":"Debt maturity timestamp, or null when the reserve has no configured maturity","example":"2026-08-28T00:00:00.000Z"},"status":{"type":"string","enum":["Active","Obsolete","Hidden"],"description":"On-chain reserve visibility status","example":"Active"},"interestRateBasis":{"type":"string","enum":["legacy","trueApr"],"description":"How the reserve interprets its rate config (borrow rate curve, hostFixedInterestRateBps, reward emissions). `legacy`: nominal slot-year rates accrued per slot over 63,072,000 slots, so the realized annual rate is the configured rate times 500 / recentSlotDurationInMs (see /slots/duration). `trueApr`: wall-clock rates accrued per second over 31,536,000 seconds, no slot adjustment. To plot the curve from /reserves/{reservePubkey}/charts borrowCurve: factor = basis === `trueApr` ? 1 : 500 / recentSlotDurationInMs; borrowApr(u) = (curveRate(u) + hostFixedInterestRateBps / 10000) * factor; supplyApr(u) = u * curveRate(u) * factor * (1 - protocolTakeRatePct / 100). Static per reserve config; reserves in one market can differ.","example":"trueApr"},"hostFixedInterestRateBps":{"type":"integer","description":"Fixed host interest added on top of the curve or fixed borrow rate, in basis points of the nominal annual rate in the reserve interestRateBasis. Paid entirely to the host: included in borrow APR, excluded from supply APR. 0 when not configured.","example":50},"protocolTakeRatePct":{"type":"integer","description":"Share of borrow interest taken by the protocol as an integer percentage from the reserve config. Depositors keep (100 - protocolTakeRatePct) / 100 of the curve interest; this is the raw config value, not the depositor keep-ratio.","example":10},"supplyApy":{"type":"object","properties":{"current":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Current base APY","example":"0.0412"}]},"avg7d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Mean of hourly bucket mean base APYs over the last 7 days, or null when no history is available","example":"0.0398"},"avg14d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Mean of hourly bucket mean base APYs over the last 14 days, or null when no history is available","example":"0.0395"},"avg30d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Mean of hourly bucket mean base APYs over the last 30 days, or null when no history is available","example":"0.039"},"avg60d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Mean of hourly bucket mean base APYs over the last 60 days, or null when no history is available","example":"0.0387"},"avg90d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Mean of hourly bucket mean base APYs over the last 90 days, or null when no history is available","example":"0.0384"},"avg180d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Mean of hourly bucket mean base APYs over the last 180 days, or null when no history is available","example":"0.0381"}},"required":["current","avg7d","avg14d","avg30d","avg60d","avg90d","avg180d"]},"borrowApy":{"type":"object","properties":{"current":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Current base APY","example":"0.0412"}]},"avg7d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Mean of hourly bucket mean base APYs over the last 7 days, or null when no history is available","example":"0.0398"},"avg14d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Mean of hourly bucket mean base APYs over the last 14 days, or null when no history is available","example":"0.0395"},"avg30d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Mean of hourly bucket mean base APYs over the last 30 days, or null when no history is available","example":"0.039"},"avg60d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Mean of hourly bucket mean base APYs over the last 60 days, or null when no history is available","example":"0.0387"},"avg90d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Mean of hourly bucket mean base APYs over the last 90 days, or null when no history is available","example":"0.0384"},"avg180d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Mean of hourly bucket mean base APYs over the last 180 days, or null when no history is available","example":"0.0381"}},"required":["current","avg7d","avg14d","avg30d","avg60d","avg90d","avg180d"]},"underlyingApy":{"type":["object","null"],"properties":{"current":{"$ref":"#/components/schemas/Apy"},"sourceType":{"type":"string","description":"Source of the underlying yield; new source types can be added without notice. `lst`: median staking yield over the last 10 epochs. `lst-combined`: restaked LST, own 10-epoch mean plus the median of each configured underlying LST. `yield-feed`: latest hourly snapshot from the token's yield provider (principal tokens, RWAs, JLP, USDe/sUSDe)."},"sourceMint":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}],"description":"Mint whose yield series produced this value. Differs from `token` when the reserve token inherits another token's yield (sUSDe reports the USDe mint). Null for `lst-combined`. For history use `/v2/underlying-yields/{token}/history`, not this field."},"observedAt":{"type":"string","format":"date-time","description":"Observation time of the source value. LST values are epoch-based and lag one to two days; yield-feed values are hourly snapshots no older than 48 hours."}},"required":["current","sourceType","sourceMint","observedAt"],"description":"Native yield of the reserve liquidity token itself: LST staking yield, principal-token implied yield, or the yield of an RWA / yield-bearing token. Excludes lending interest, farm incentives, season rewards and pair-specific rewards. Null when the token is not yield-bearing or no fresh source is available; a missing source is never reported as 0. Already included in supplyApyBreakdown.total."},"underlyingYieldExpected":{"type":"boolean","description":"True when the reserve token earns its own yield (staking, pool or yield-feed token). underlyingApy null with true means the yield source is unavailable; null with false means the token has no underlying yield.","example":true},"supplyApyBreakdown":{"type":"object","properties":{"lending":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Base lending APY, equals supplyApy.current"}]},"incentives":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Sum of supplyRewardApys[].apy"}]},"seasonRewards":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Anonymous season campaign APY. Currently always 0: season campaigns are over. Kept so the total formula stays stable if campaigns return."}]},"underlying":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"underlyingApy.current, or 0 when underlyingApy is null"}]},"total":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Sum of the four components"}]}},"required":["lending","incentives","seasonRewards","underlying","total"],"description":"Components of the supply APY shown in the Kamino UI for an anonymous viewer, all in decimal APY units. total = lending + incentives + seasonRewards + underlying. underlying is 0 when underlyingApy is null."},"borrowApyBreakdown":{"type":"object","properties":{"borrow":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"equals borrowApy.current (the fixed-rate APY for fixed-term reserves)"}]},"incentives":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Sum of borrowRewardApys[].apy"}]},"seasonRewards":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Anonymous season campaign APY. Currently always 0: season campaigns are over. Kept so the total formula stays stable if campaigns return."}]},"total":{"$ref":"#/components/schemas/Apy"}},"required":["borrow","incentives","seasonRewards","total"],"description":"Components of the borrow APY shown in the Kamino UI for an anonymous viewer, decimal units. total = borrow - incentives - seasonRewards."},"utilization":{"type":"object","properties":{"current":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Current utilization as a ratio of total borrow to total supply","example":"0.825"}]},"avg30d":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Mean of hourly bucket per-snapshot utilization ratios over the last 30 days, or null when no history is available","example":"0.81"},"avg90d":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Mean of hourly bucket per-snapshot utilization ratios over the last 90 days, or null when no history is available","example":"0.79"},"avg180d":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Mean of hourly bucket per-snapshot utilization ratios over the last 180 days, or null when no history is available","example":"0.77"},"avg365d":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Mean of hourly bucket per-snapshot utilization ratios over the last 365 days, or null when no history is available","example":"0.74"}},"required":["current","avg30d","avg90d","avg180d","avg365d"],"description":"Current reserve utilization and historical averages"},"autoDeleverage":{"type":"object","properties":{"reserve":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether this reserve is subject to auto-deleveraging after its deposit or borrow limit is crossed. Effective only when the market flag is also enabled."},"marginCallPeriodSecs":{"type":"integer","description":"Time in seconds that must pass before deleveraging liquidations start after the limit is crossed. Only relevant when auto-deleveraging is enabled.","example":259200},"thresholdDecreaseBpsPerDay":{"type":"integer","description":"Rate at which the deleveraging LTV threshold decreases, in bps per day. Only relevant when auto-deleveraging is enabled.","example":100},"bonusIncreaseBpsPerDay":{"type":"integer","description":"Rate at which the deleveraging liquidation bonus increases, in bps per day. Only relevant when auto-deleveraging is enabled.","example":50},"minBonusBps":{"type":"integer","description":"Starting bonus for deleveraging liquidations, in bps","example":10}},"required":["enabled","marginCallPeriodSecs","thresholdDecreaseBpsPerDay","bonusIncreaseBpsPerDay","minBonusBps"]},"market":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Market-wide auto-deleveraging gate. Reserve-level auto-deleveraging only applies when this is enabled."},"individualMarginCallPeriodSecs":{"type":"integer","description":"Time in seconds that must pass before deleveraging liquidations start for obligations individually marked for auto-deleveraging","example":86400}},"required":["enabled","individualMarginCallPeriodSecs"]}},"required":["reserve","market"],"description":"On-chain auto-deleveraging configuration of the reserve and its lending market"},"supplyRewardApys":{"type":"array","items":{"type":"object","properties":{"rewardToken":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reward token mint address"}]},"farm":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Farm address that distributes the reward"}]},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Current reward APY component","example":"0.011"}]},"tokensPerSecond":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Reward token emission rate in UI token units per second","example":"0.00165"}]}},"required":["rewardToken","farm","apy","tokensPerSecond"]},"description":"Current supply-side farm reward APY components"},"borrowRewardApys":{"type":"array","items":{"type":"object","properties":{"rewardToken":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reward token mint address"}]},"farm":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Farm address that distributes the reward"}]},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Current reward APY component","example":"0.011"}]},"tokensPerSecond":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Reward token emission rate in UI token units per second","example":"0.00165"}]}},"required":["rewardToken","farm","apy","tokensPerSecond"]},"description":"Current borrow-side farm reward APY components"},"pairIncentives":{"type":"array","items":{"type":"object","properties":{"side":{"type":"string","enum":["supply","borrow"],"description":"This reserve's role in the incentivized collateral/debt pair"},"collateralReserve":{"$ref":"#/components/schemas/AddressBase58"},"collateralToken":{"$ref":"#/components/schemas/AddressBase58"},"debtReserve":{"$ref":"#/components/schemas/AddressBase58"},"debtToken":{"$ref":"#/components/schemas/AddressBase58"},"farm":{"$ref":"#/components/schemas/AddressBase58"},"rewardToken":{"$ref":"#/components/schemas/AddressBase58"},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Current pair-specific reward APY on eligible pair debt, as a decimal fraction"}]},"tokensPerSecond":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Reward token emission rate in UI token units per second"}]},"stakedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total eligible pair debt in USD used as the APY denominator"}]},"readMoreUrl":{"type":["string","null"],"format":"uri","description":"HTTPS link with more information about the incentive, or null when none is configured"}},"required":["side","collateralReserve","collateralToken","debtReserve","debtToken","farm","rewardToken","apy","tokensPerSecond","stakedUsd","readMoreUrl"]},"description":"Live pair-specific incentives whose eligibility depends on the counterparty asset. Rows are present only while the configured farm is active, funded, emitting and staked. These APYs are not included in supplyApyBreakdown.total or borrowApyBreakdown.total. Derive collateral \"Up to\" APY as max(apy) over supply rows and estimated net borrow APY as borrowApy.current - apy."},"pointsPrograms":{"type":"array","items":{"type":"object","properties":{"side":{"type":"string","enum":["supply","borrow"],"description":"Reserve action that earns points"},"key":{"type":"string","description":"Stable partner identifier, for example solstice"},"name":{"type":"string","description":"Display name of the points program"},"description":{"type":"string","description":"Display copy explaining how this reserve action earns points"},"iconUrl":{"type":"string","format":"uri","description":"HTTPS URL of the points program icon"},"learnMoreUrl":{"type":"string","format":"uri","description":"HTTPS URL with more information about the points program"}},"required":["side","key","name","description","iconUrl","learnMoreUrl"]},"description":"Partner points programs for this reserve and side. These programs have no numeric APY and are not included in supplyApyBreakdown.total or borrowApyBreakdown.total."},"liquidityAvailable":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Available reserve liquidity in UI token units"}]},"liquidityAvailableUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Available reserve liquidity in USD"}]},"actualAvailableLiquidity":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum cap-aware reserve liquidity available for borrowing across cross mode and configured elevation groups, in UI token units. This does not include obligation-specific collateral or LTV constraints."}]},"actualAvailableLiquidityUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum cap-aware reserve liquidity available for borrowing across cross mode and configured elevation groups, in USD. This does not include obligation-specific collateral or LTV constraints."}]},"utilizationLimitBlockBorrowingAbovePct":{"type":"integer","description":"Utilization percentage above which new borrowing is blocked. A value of 0 disables the limit.","example":95},"borrowCaps":{"type":"object","properties":{"utilization":{"type":"object","properties":{"limitPct":{"type":"integer","description":"Utilization percentage above which new borrowing is blocked. A value of 0 disables the limit.","example":95},"currentPct":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Current reserve utilization as a percentage","example":"82.5"}]}},"required":["limitPct","currentPct"]},"netWithdrawal":{"type":["object","null"],"properties":{"capacity":{"$ref":"#/components/schemas/Decimal"},"currentTotal":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount used in the current interval in UI token units. Read as 0 once the interval has elapsed."}]},"intervalLengthSeconds":{"type":"integer"},"lastIntervalStartTimestamp":{"type":"string","format":"date-time"}},"required":["capacity","currentTotal","intervalLengthSeconds","lastIntervalStartTimestamp"],"description":"Net withdrawal cap for reserve debt, or null when the cap is not configured"},"globalDebt":{"type":"object","properties":{"capacity":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Configured cap in UI token units, or null when uncapped"},"currentTotal":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount currently counted against the cap in UI token units"}]}},"required":["capacity","currentTotal"],"description":"Global reserve debt cap and current total borrow"},"debtOutsideElevationGroup":{"type":"object","properties":{"capacity":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Configured cap in UI token units, or null when uncapped"},"currentTotal":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount currently counted against the cap in UI token units"}]}},"required":["capacity","currentTotal"],"description":"Debt cap and current debt outside elevation groups"},"debtAgainstCollateral":{"type":"array","items":{"type":"object","properties":{"capacity":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Configured cap in UI token units, or null when uncapped"},"currentTotal":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount currently counted against the cap in UI token units"}]},"collateralReserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Collateral reserve whose elevation-group debt cap is represented"}]},"elevationGroup":{"type":"integer","exclusiveMinimum":0}},"required":["capacity","currentTotal","collateralReserve","elevationGroup"]}}},"required":["utilization","netWithdrawal","globalDebt","debtOutsideElevationGroup","debtAgainstCollateral"],"description":"Configured reserve borrowing caps and their current on-chain counters"},"totalSupply":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total reserve supply in UI token units"}]},"totalSupplyUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total reserve supply in USD"}]},"totalBorrow":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total reserve borrow in UI token units"}]},"totalBorrowUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total reserve borrow in USD"}]},"liqLTV":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Liquidation loan-to-value ratio","example":"0.8"}]},"maxLTV":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum loan-to-value ratio","example":"0.75"}]},"borrowFactor":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Borrow factor as a ratio","example":"1"}]},"depositLimit":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Reserve deposit limit in UI token units, or null when uncapped","example":"200000"},"borrowLimit":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Reserve borrow limit in UI token units, or null when uncapped","example":"150000"},"minLiquidationBonus":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Minimum liquidation bonus as a ratio","example":"0.02"}]},"maxLiquidationBonus":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum liquidation bonus as a ratio","example":"0.1"}]},"liquidationMaxDebtCloseFactorPct":{"type":"integer","description":"Market maximum debt close factor as an integer percentage","example":10},"insolvencyRiskUnhealthyLtvPct":{"type":"integer","description":"Market LTV threshold as an integer percentage; obligations above it can be fully liquidated instead of being capped by the debt close factor","example":95},"limits":{"type":"object","properties":{"depositWithdrawalCap":{"type":["object","null"],"properties":{"capacity":{"$ref":"#/components/schemas/Decimal"},"currentTotal":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount used in the current interval in UI token units. Read as 0 once the interval has elapsed."}]},"intervalLengthSeconds":{"type":"integer"},"lastIntervalStartTimestamp":{"type":"string","format":"date-time"}},"required":["capacity","currentTotal","intervalLengthSeconds","lastIntervalStartTimestamp"],"description":"Deposit withdrawal cap, or null when the cap is not configured"},"debtWithdrawalCap":{"type":["object","null"],"properties":{"capacity":{"$ref":"#/components/schemas/Decimal"},"currentTotal":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount used in the current interval in UI token units. Read as 0 once the interval has elapsed."}]},"intervalLengthSeconds":{"type":"integer"},"lastIntervalStartTimestamp":{"type":"string","format":"date-time"}},"required":["capacity","currentTotal","intervalLengthSeconds","lastIntervalStartTimestamp"],"description":"Debt withdrawal cap, or null when the cap is not configured"}},"required":["depositWithdrawalCap","debtWithdrawalCap"]},"proofOfReserves":{"type":"object","properties":{"verified":{"type":"boolean"},"address":{"$ref":"#/components/schemas/AddressBase58"}},"required":["verified","address"]},"oracle":{"type":["object","null"],"properties":{"priceChain":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the Scope price entry","example":"Fixed 1"},"oracleType":{"type":"string","description":"Scope oracle type of the entry, or Unknown when the type is newer than the API supports","example":"FixedPrice"},"provider":{"type":"string","description":"Price provider behind the entry. Currently one of Pyth, Switchboard, Chainlink, Redstone or Scope; new providers can be added without notice","example":"Scope"},"priceId":{"type":"integer","description":"Index of the entry in the Scope price feed","example":13},"nested":{"type":["object","null"],"properties":{"type":{"type":"string","description":"Composite Scope oracle type. Currently one of CappedFloored, MostRecentOf or CappedMostRecentOf; new composite types can be added without notice","example":"CappedFloored"},"source":{"type":["object","null"],"properties":{"name":{"type":"string","description":"Display name of the Scope price entry","example":"Fixed 1"},"oracleType":{"type":"string","description":"Scope oracle type of the entry, or Unknown when the type is newer than the API supports","example":"FixedPrice"},"provider":{"type":"string","description":"Price provider behind the entry. Currently one of Pyth, Switchboard, Chainlink, Redstone or Scope; new providers can be added without notice","example":"Scope"}},"required":["name","oracleType","provider"],"description":"Source entry of a CappedFloored oracle, or null for other types"},"sources":{"type":["array","null"],"items":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the Scope price entry","example":"Fixed 1"},"oracleType":{"type":"string","description":"Scope oracle type of the entry, or Unknown when the type is newer than the API supports","example":"FixedPrice"},"provider":{"type":"string","description":"Price provider behind the entry. Currently one of Pyth, Switchboard, Chainlink, Redstone or Scope; new providers can be added without notice","example":"Scope"}},"required":["name","oracleType","provider"]},"description":"Source entries of a MostRecentOf or CappedMostRecentOf oracle, or null for other types"},"cap":{"type":["object","null"],"properties":{"name":{"type":"string","description":"Display name of the Scope price entry","example":"Fixed 1"},"oracleType":{"type":"string","description":"Scope oracle type of the entry, or Unknown when the type is newer than the API supports","example":"FixedPrice"},"provider":{"type":"string","description":"Price provider behind the entry. Currently one of Pyth, Switchboard, Chainlink, Redstone or Scope; new providers can be added without notice","example":"Scope"}},"required":["name","oracleType","provider"],"description":"Entry that caps the price, or null when the price is not capped"},"floor":{"type":["object","null"],"properties":{"name":{"type":"string","description":"Display name of the Scope price entry","example":"Fixed 1"},"oracleType":{"type":"string","description":"Scope oracle type of the entry, or Unknown when the type is newer than the API supports","example":"FixedPrice"},"provider":{"type":"string","description":"Price provider behind the entry. Currently one of Pyth, Switchboard, Chainlink, Redstone or Scope; new providers can be added without notice","example":"Scope"}},"required":["name","oracleType","provider"],"description":"Entry that floors the price, or null when the price is not floored"}},"required":["type","source","sources","cap","floor"],"description":"Component entries of a composite Scope oracle, or null for a plain entry"}},"required":["name","oracleType","provider","priceId","nested"]},"description":"Scope entries combined into the reserve price, or empty when the reserve has no Scope price chain"},"twapChain":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the Scope price entry","example":"Fixed 1"},"oracleType":{"type":"string","description":"Scope oracle type of the entry, or Unknown when the type is newer than the API supports","example":"FixedPrice"},"provider":{"type":"string","description":"Price provider behind the entry. Currently one of Pyth, Switchboard, Chainlink, Redstone or Scope; new providers can be added without notice","example":"Scope"},"priceId":{"type":"integer","description":"Index of the entry in the Scope price feed","example":13},"nested":{"type":["object","null"],"properties":{"type":{"type":"string","description":"Composite Scope oracle type. Currently one of CappedFloored, MostRecentOf or CappedMostRecentOf; new composite types can be added without notice","example":"CappedFloored"},"source":{"type":["object","null"],"properties":{"name":{"type":"string","description":"Display name of the Scope price entry","example":"Fixed 1"},"oracleType":{"type":"string","description":"Scope oracle type of the entry, or Unknown when the type is newer than the API supports","example":"FixedPrice"},"provider":{"type":"string","description":"Price provider behind the entry. Currently one of Pyth, Switchboard, Chainlink, Redstone or Scope; new providers can be added without notice","example":"Scope"}},"required":["name","oracleType","provider"],"description":"Source entry of a CappedFloored oracle, or null for other types"},"sources":{"type":["array","null"],"items":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the Scope price entry","example":"Fixed 1"},"oracleType":{"type":"string","description":"Scope oracle type of the entry, or Unknown when the type is newer than the API supports","example":"FixedPrice"},"provider":{"type":"string","description":"Price provider behind the entry. Currently one of Pyth, Switchboard, Chainlink, Redstone or Scope; new providers can be added without notice","example":"Scope"}},"required":["name","oracleType","provider"]},"description":"Source entries of a MostRecentOf or CappedMostRecentOf oracle, or null for other types"},"cap":{"type":["object","null"],"properties":{"name":{"type":"string","description":"Display name of the Scope price entry","example":"Fixed 1"},"oracleType":{"type":"string","description":"Scope oracle type of the entry, or Unknown when the type is newer than the API supports","example":"FixedPrice"},"provider":{"type":"string","description":"Price provider behind the entry. Currently one of Pyth, Switchboard, Chainlink, Redstone or Scope; new providers can be added without notice","example":"Scope"}},"required":["name","oracleType","provider"],"description":"Entry that caps the price, or null when the price is not capped"},"floor":{"type":["object","null"],"properties":{"name":{"type":"string","description":"Display name of the Scope price entry","example":"Fixed 1"},"oracleType":{"type":"string","description":"Scope oracle type of the entry, or Unknown when the type is newer than the API supports","example":"FixedPrice"},"provider":{"type":"string","description":"Price provider behind the entry. Currently one of Pyth, Switchboard, Chainlink, Redstone or Scope; new providers can be added without notice","example":"Scope"}},"required":["name","oracleType","provider"],"description":"Entry that floors the price, or null when the price is not floored"}},"required":["type","source","sources","cap","floor"],"description":"Component entries of a composite Scope oracle, or null for a plain entry"}},"required":["name","oracleType","provider","priceId","nested"]},"description":"Scope entries combined into the reserve TWAP, or empty when the reserve has no Scope TWAP chain"}},"required":["priceChain","twapChain"],"description":"Scope oracle composition of the reserve price and TWAP, or null when the Scope metadata is unavailable"}},"required":["token","collateralMintAddress","rateType","fixedTerm","debtMaturityTimestamp","status","interestRateBasis","hostFixedInterestRateBps","protocolTakeRatePct","supplyApy","borrowApy","underlyingApy","underlyingYieldExpected","supplyApyBreakdown","borrowApyBreakdown","utilization","autoDeleverage","supplyRewardApys","borrowRewardApys","pairIncentives","pointsPrograms","liquidityAvailable","liquidityAvailableUsd","actualAvailableLiquidity","actualAvailableLiquidityUsd","utilizationLimitBlockBorrowingAbovePct","borrowCaps","totalSupply","totalSupplyUsd","totalBorrow","totalBorrowUsd","liqLTV","maxLTV","borrowFactor","depositLimit","borrowLimit","minLiquidationBonus","maxLiquidationBonus","liquidationMaxDebtCloseFactorPct","insolvencyRiskUnhealthyLtvPct","limits","proofOfReserves","oracle"]},"KaminoLiquidityTransactionsV2Response":{"type":"object","properties":{"transactions":{"type":"array","items":{"$ref":"#/components/schemas/KaminoLiquidityTransactionV2"}}},"required":["transactions"]},"KaminoLiquidityTransactionV2":{"type":"object","properties":{"createdOn":{"type":"string","format":"date-time","description":"Timestamp when the instruction was executed (ISO 8601 format)","example":"2025-03-01T12:00:00.000Z"},"timestamp":{"type":"integer","description":"Unix timestamp of the instruction in milliseconds","example":1740830400000},"transactionSignature":{"type":"string","description":"Transaction signature","example":"2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v"},"transactionName":{"type":"string","description":"Instruction display name","example":"Deposit"},"strategy":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Strategy address"}]},"tokenA":{"type":"string","description":"Token A symbol","example":"SOL"},"tokenAMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token A mint"}]},"tokenAAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token A amount"}]},"tokenAPrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token A price in USD"}]},"tokenB":{"type":"string","description":"Token B symbol","example":"USDC"},"tokenBMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token B mint"}]},"tokenBAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token B amount"}]},"tokenBPrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token B price in USD"}]},"usdValue":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Instruction value in USD"}]},"numberOfShares":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Number of strategy shares"}]},"sharePrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Share price in USD"}]},"solPrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"SOL price in USD"}]},"fullWithdraw":{"type":"boolean","description":"Whether the withdrawal closed the position, absent when unknown"},"latestPosition":{"type":"boolean","description":"Whether the instruction belongs to the current position in the strategy"}},"required":["createdOn","timestamp","transactionSignature","transactionName","strategy","tokenA","tokenAMint","tokenAAmount","tokenAPrice","tokenB","tokenBMint","tokenBAmount","tokenBPrice","usdValue","numberOfShares","sharePrice","solPrice","latestPosition"]},"ObligationAnalyticsHistoryResponse":{"type":"object","properties":{"market":{"$ref":"#/components/schemas/AddressBase58"},"obligation":{"$ref":"#/components/schemas/AddressBase58"},"frequency":{"type":"string","enum":["hour","day"]},"history":{"type":"array","items":{"$ref":"#/components/schemas/ObligationAnalyticsHistoryPoint"},"description":"Ascending bucket starts with decimal values rounded to 6 decimal places. The three APY components add up to net APY. Empty obligations have zero stats and null APYs. The final daily point may be the latest hourly snapshot from today or yesterday when that day has no returned daily row; finalized data typically lags by 1-2 hours."}},"required":["market","obligation","frequency","history"]},"ObligationAnalyticsHistoryPoint":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"UTC bucket start, rather than the source snapshot time."},"netValue":{"type":["string","null"],"example":"1234.56789","description":"Position equity in USD; null when source data is missing."},"deposit":{"type":["string","null"],"example":"1234.56789","description":"Deposited value in USD; null when source data is missing."},"borrow":{"type":["string","null"],"example":"1234.56789","description":"Borrowed value in USD; null when source data is missing."},"ltv":{"type":["string","null"],"example":"1234.56789","description":"Loan-to-value fraction; null when source data is missing."},"liquidationLtv":{"type":["string","null"],"example":"1234.56789","description":"Liquidation loan-to-value fraction; null when source data is missing."},"baseApy":{"type":["string","null"],"example":"1234.56789","description":"Lending interest net of borrow cost as a signed fraction of equity. Null when either source part is missing, equity is zero or negative, or there are no positions."},"farmRewardsApy":{"type":["string","null"],"example":"1234.56789","description":"Reserve and pair farm rewards as a signed fraction of equity. Null when either source part is missing, equity is zero or negative, or there are no positions."},"assetYieldApy":{"type":["string","null"],"example":"1234.56789","description":"The tokens' own yield as a signed fraction of equity; borrowing yield-bearing tokens contributes negatively. Null when either source part is missing, equity is zero or negative, or there are no positions."}},"required":["timestamp","netValue","deposit","borrow","ltv","liquidationLtv","baseApy","farmRewardsApy","assetYieldApy"]},"KlendDepositPositionHistoryResponse":{"type":"array","items":{"$ref":"#/components/schemas/KlendDepositPositionHistoryItem"}},"KlendDepositPositionHistoryItem":{"type":"object","properties":{"createdOn":{"type":"string","format":"date-time","description":"Snapshot timestamp"},"tokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Deposited liquidity token amount"}]},"usdAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value of the deposit"}]},"apy":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Supply APY at the snapshot"}]},"cumulativeInterestEarned":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Lifetime interest earned in liquidity tokens"}]},"cumulativeInterestEarnedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Lifetime interest earned in USD"}]},"cumulativeInterestEarnedSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Lifetime interest earned in SOL"}]}},"required":["createdOn","tokenAmount","usdAmount","apy","cumulativeInterestEarned","cumulativeInterestEarnedUsd","cumulativeInterestEarnedSol"]},"InterestRateEarnedResponse":{"type":"object","properties":{"totalFeesEarnedObligation":{"$ref":"#/components/schemas/TotalFeesObligation"},"historicalFeesObligation":{"$ref":"#/components/schemas/HistoricalFeesObligation"}},"required":["totalFeesEarnedObligation","historicalFeesObligation"]},"TotalFeesObligation":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/TotalInterestFees"},"description":"Total interest fees earned per obligation","example":{"uy9LQEjELMp8r3qpb7fJhu2Y32ydAxTEo74VAEZ6EHQs":{"ts":1762128000000,"solFees":"0.00001610553929183891699891935039215032176993","usdFees":"0.003058858072628656437082436052718601394968"}}},"TotalInterestFees":{"type":"object","properties":{"ts":{"type":"number","description":"Timestamp in milliseconds","example":1762128000000},"solFees":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total fees in SOL","example":"0.00001610553929183891699891935039215032176993"}]},"usdFees":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total fees in USD","example":"0.003058858072628656437082436052718601394968"}]}},"required":["ts","solFees","usdFees"]},"HistoricalFeesObligation":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/TokenInterestFees"}},"description":"Historical breakdown of interest fees earned over time"},"TokenInterestFees":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/InterestFees"},"description":"Historical fees breakdown by reserve. Key is the reserve address.","example":{"d4A2prbA2whesmvHaL88BH6Ewn5N4bTSU2Ze8P6Bc4Q":{"ts":1760745600000,"solFees":"0","usdFees":"0","nativeFees":"0"}}},"InterestFees":{"type":"object","properties":{"ts":{"type":"number","description":"Timestamp in milliseconds","example":1762128000000},"solFees":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Fees in SOL","example":"0.00001610553929183891699891935039215032176993"}]},"usdFees":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Fees in USD","example":"0.003058858072628656437082436052718601394968"}]},"nativeFees":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Fees in native token units","example":"0"}]}},"required":["ts","solFees","usdFees","nativeFees"]},"InterestRatePaidResponse":{"type":"object","properties":{"totalFeesPaidObligation":{"allOf":[{"$ref":"#/components/schemas/TotalFeesObligation"},{"description":"Total interest fees paid per obligation"}]},"historicalFeesObligation":{"allOf":[{"$ref":"#/components/schemas/HistoricalFeesObligation"},{"description":"Historical breakdown of interest fees paid over time"}]}},"required":["totalFeesPaidObligation","historicalFeesObligation"]},"MarketConfigResponseV2":{"type":"object","properties":{"name":{"type":"string","description":"Market name","example":"SOL/BTC Market"},"isPrimary":{"type":"boolean","description":"Whether this is a primary market","example":true},"description":{"type":"string","description":"Market description","example":"Primary market on mainnet"},"lendingMarket":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Lending market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"lookupTable":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Lookup table address","example":"FGMSBiyVE8TvZcdQnZETAAKw28tkQJ2ccZy6pyp95URb"}]},"isCurated":{"type":"boolean","description":"Whether this market is curated","example":false},"isVisibleInUi":{"type":"boolean","description":"Whether clients should show this market in their UI (false while it is tracked ahead of launch)","example":true}},"required":["name","isPrimary","description","lendingMarket","lookupTable","isCurated","isVisibleInUi"]},"PnlResponse":{"type":"object","properties":{"usd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"PnL in USD","example":"25.21"}]},"sol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"PnL in SOL","example":"1.0"}]},"invested":{"type":"object","properties":{"usd":{"$ref":"#/components/schemas/Decimal"},"sol":{"$ref":"#/components/schemas/Decimal"}},"required":["usd","sol"],"description":"Invested amounts"},"truncatedHistory":{"type":"boolean","description":"Set when the obligation transaction history exceeded the computation cap and older transactions were dropped from the PnL calculation"},"accountingVersion":{"type":"number","enum":[2],"description":"PnL accounting version"},"status":{"type":"string","enum":["complete","partial","unavailable"],"description":"Accounting completeness"},"reasons":{"type":"array","items":{"type":"string"},"description":"Reasons for partial or unavailable accounting"}},"required":["usd","sol","accountingVersion","status","reasons"]},"KlendPnlHistoryResponse":{"type":"object","properties":{"history":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"number","description":"Timestamp in milliseconds since Unix epoch; events sharing one are served as their final state"},"type":{"type":"string","enum":["deposit","withdraw","borrow","repay","liquidate","create","repay-and-withdraw","deposit-and-withdraw","rollover-fixed-term-borrow","mark-to-market"],"description":"Cash flow type, or mark-to-market for a periodic or current valuation"},"pnl":{"type":"object","properties":{"usd":{"$ref":"#/components/schemas/Decimal"},"sol":{"$ref":"#/components/schemas/Decimal"}},"required":["usd","sol"]},"investment":{"type":"object","properties":{"usd":{"$ref":"#/components/schemas/Decimal"},"sol":{"$ref":"#/components/schemas/Decimal"}},"required":["usd","sol"],"description":"Net capital invested at this point"},"positionValue":{"type":"object","properties":{"usd":{"$ref":"#/components/schemas/Decimal"},"sol":{"$ref":"#/components/schemas/Decimal"}},"required":["usd","sol"]}},"required":["timestamp","type","pnl","investment","positionValue"]}},"totalPnl":{"type":"object","properties":{"usd":{"$ref":"#/components/schemas/Decimal"},"sol":{"$ref":"#/components/schemas/Decimal"}},"required":["usd","sol"],"description":"Current PnL; start and end do not affect it"},"invested":{"type":"object","properties":{"usd":{"$ref":"#/components/schemas/Decimal"},"sol":{"$ref":"#/components/schemas/Decimal"}},"required":["usd","sol"],"description":"Current net capital invested; start and end do not affect it"},"truncatedHistory":{"type":"boolean","description":"True when the computation cap dropped older transactions or periodic points"},"accountingVersion":{"type":"number","enum":[2],"description":"PnL accounting version"},"status":{"type":"string","enum":["complete","partial","unavailable"],"description":"Accounting completeness"},"reasons":{"type":"array","items":{"type":"string"},"description":"Reasons for partial or unavailable accounting"}},"required":["history","totalPnl","invested","truncatedHistory","accountingVersion","status","reasons"]},"ObligationMetricsHistoryResponse":{"type":"object","properties":{"obligation":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Obligation public key","example":"3HdrCvoJ91bwgVTejdDXfguo6S2A9jjUkBR5fasq4WhB"}]},"history":{"type":"array","items":{"$ref":"#/components/schemas/ObligationMetrics"},"description":"Historical metrics for the obligation"}},"required":["obligation","history"]},"ObligationMetrics":{"type":"object","properties":{"timestamp":{"allOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"description":"Timestamp of the metrics snapshot","example":"2025-10-17T00:00:00.000Z"}]},"refreshedStats":{"$ref":"#/components/schemas/ObligationStats"},"deposits":{"type":"array","items":{"$ref":"#/components/schemas/Position"},"description":"Array of deposit positions"},"borrows":{"type":"array","items":{"$ref":"#/components/schemas/Position"},"description":"Array of borrow positions"},"tag":{"type":"integer","minimum":0,"maximum":6,"description":"Obligation type tag (0 = Vanilla, 1 = Multiply, 2 = Lending, 3 = Leverage, 4 = MultiplyFixedRate, 5 = LendingFixedRate, 6 = LeverageFixedRate)","example":0},"obligationSolValues":{"$ref":"#/components/schemas/ObligationSolValues"}},"required":["timestamp","refreshedStats","deposits","borrows","tag","obligationSolValues"]},"ObligationStats":{"type":"object","properties":{"leverage":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Leverage ratio of the obligation","example":"1.0580080950430842892"}]},"borrowLimit":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum borrow limit","example":"1.3496969599567630906"}]},"loanToValue":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Current loan-to-value ratio","example":"0.054827647647367082766"}]},"liquidationLtv":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Liquidation loan-to-value threshold","example":"0.75000000000000000001"}]},"netAccountValue":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Net account value","example":"1.7239138521696367095"}]},"userTotalBorrow":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total amount borrowed by the user","example":"0.10000095858274584538"}]},"userTotalDeposit":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total amount deposited by the user","example":"1.8239148107523825549"}]},"borrowUtilization":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Borrow utilization ratio","example":"0.074091415739685246983"}]},"borrowLiquidationLimit":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Borrow liquidation limit","example":"1.3679361080642869162"}]},"userTotalCollateralDeposit":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total collateral deposited by the user. Absent on some snapshots taken before November 2024, which predate the indexer recording it.","example":"1.8239148107523825549"}]},"userTotalLiquidatableDeposit":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total liquidatable deposit amount. Absent on snapshots taken up to early December 2024, which predate the indexer recording it.","example":"1.8239148107523825549"}]},"potentialElevationGroupUpdate":{"anyOf":[{"type":"number"},{"type":"array","items":{"type":"number"}}],"description":"Potential elevation group update indicator. Absent on snapshots taken before June 2024; snapshots from late May to August 2024 store a list of elevation group ids instead of a number.","example":0},"userTotalBorrowBorrowFactorAdjusted":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total borrow adjusted by borrow factor","example":"0.10000095858274584538"}]}},"required":["leverage","borrowLimit","loanToValue","liquidationLtv","netAccountValue","userTotalBorrow","userTotalDeposit","borrowUtilization","borrowLiquidationLimit","userTotalBorrowBorrowFactorAdjusted"],"description":"Refreshed obligation statistics"},"Position":{"type":"object","properties":{"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount in the position","example":"10000708.005624756258"}]},"mintAddress":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint address","example":"So11111111111111111111111111111111111111112"}]},"marketValueRefreshed":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Refreshed market value of the position","example":"1.8239148107523825549"}]},"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Address of the reserve backing the position. Absent on snapshots taken before reserve tracking was added to the indexer (2026-01-16).","example":"D6q6wuQSrifJKZYpR1M8R4YawnLDtDsMmWM1NbBmgJ59"}]}},"required":["amount","mintAddress","marketValueRefreshed"]},"ObligationSolValues":{"type":"object","properties":{"netValueSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Net value in SOL","example":"0.009469142566566941841900274495955292427975"}]},"collateralValueSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Collateral value in SOL","example":"0.01001842948854487210536205388880118310325"}]},"debtValueSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Debt value in SOL","example":"0.0005492869219779302633519230615141419874818"}]},"solPrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"SOL price in USD","example":"182.05596125"}]},"timestampSolPrice":{"allOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"description":"Timestamp of the SOL price","example":"2025-10-17T00:00:00.000Z"}]},"timestampObligation":{"allOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"description":"Timestamp of the obligation snapshot","example":"2025-10-17T00:00:00.000Z"}]}},"required":["netValueSol","collateralValueSol","debtValueSol","solPrice","timestampSolPrice","timestampObligation"],"description":"Obligation values denominated in SOL"},"KlendTransactionsResponseV2":{"type":"object","properties":{"transactions":{"type":"array","items":{"$ref":"#/components/schemas/KlendTransactionResponseV2"}},"truncated":{"type":"boolean","enum":[true]},"paginationToken":{"type":"string"}},"required":["transactions"]},"KlendTransactionResponseV2":{"type":"object","properties":{"createdOn":{"type":"string","format":"date-time"},"timestamp":{"type":"number"},"rolloverCount":{"type":"integer","exclusiveMinimum":0},"firstRolloverTimestamp":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^\\d+$"}],"description":"Oldest rollover in the run, in Unix milliseconds, matching timestamp"},"transactionSignature":{"type":"string"},"transactionName":{"type":"string"},"liquidityToken":{"type":"string"},"liquidityTokenMint":{"$ref":"#/components/schemas/AddressBase58"},"liquidityTokenAmount":{"$ref":"#/components/schemas/Decimal"},"liquidityTokenPrice":{"$ref":"#/components/schemas/Decimal"},"solPrice":{"$ref":"#/components/schemas/Decimal"},"liquidityUsdValue":{"$ref":"#/components/schemas/Decimal"},"isLiquidationWithdrawal":{"type":"boolean"},"obligation":{"$ref":"#/components/schemas/AddressBase58"},"obligationType":{"type":"string"},"transactionDisplayName":{"type":"string"},"isSecondPartOfCompositeIx":{"type":"boolean"},"amountBasis":{"type":"string","enum":["debt"]},"borrowFeeAmount":{"$ref":"#/components/schemas/Decimal"},"borrowFeeEstimated":{"type":"boolean"}},"required":["createdOn","timestamp","transactionSignature","transactionName","liquidityToken","liquidityTokenMint","liquidityTokenAmount","isLiquidationWithdrawal","obligation","obligationType","transactionDisplayName"]},"KlendAllMarketsUserTransactionsResponseV2":{"type":"array","items":{"$ref":"#/components/schemas/KlendAllMarketsUserTransactionsItem"}},"KlendAllMarketsUserTransactionsItem":{"type":"object","properties":{"market":{"$ref":"#/components/schemas/AddressBase58"},"obligations":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/KlendTransactionUserResponseV2"}}}},"required":["market","obligations"]},"KlendTransactionUserResponseV2":{"type":"object","properties":{"createdOn":{"type":"string","format":"date-time"},"rolloverCount":{"type":"integer","exclusiveMinimum":0},"firstRolloverTimestamp":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^\\d+$"}],"description":"Oldest rollover in the run, in Unix milliseconds, matching timestamp"},"transactionSignature":{"type":"string"},"transactionName":{"type":"string"},"liquidityToken":{"type":"string"},"liquidityTokenMint":{"$ref":"#/components/schemas/AddressBase58"},"liquidityTokenAmount":{"$ref":"#/components/schemas/Decimal"},"liquidityTokenPrice":{"$ref":"#/components/schemas/Decimal"},"solPrice":{"$ref":"#/components/schemas/Decimal"},"liquidityUsdValue":{"$ref":"#/components/schemas/Decimal"},"isLiquidationWithdrawal":{"type":"boolean"},"obligationType":{"type":"string"},"transactionDisplayName":{"type":"string"},"isSecondPartOfCompositeIx":{"type":"boolean"},"amountBasis":{"type":"string","enum":["debt"]},"borrowFeeAmount":{"$ref":"#/components/schemas/Decimal"},"borrowFeeEstimated":{"type":"boolean"},"timestamp":{"type":"string","description":"Unix timestamp in milliseconds encoded as a numeric string","example":"1757687976000"}},"required":["createdOn","transactionSignature","transactionName","liquidityToken","liquidityTokenMint","liquidityTokenAmount","isLiquidationWithdrawal","obligationType","transactionDisplayName","timestamp"]},"KlendUserTransactionsResponseV2":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/KlendTransactionUserResponseV2"}}},"KlendBulkTxResponse":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/KlendBulkTxResultItem"}},"paginationToken":{"type":"string","description":"Token for next page. Absent when no more results."}},"required":["result"]},"KlendBulkTxResultItem":{"type":"object","properties":{"ixs":{"type":"array","items":{}},"timestamp":{"type":"string","format":"date-time"},"signature":{"type":"string"},"obligation":{"type":"string"},"wallet":{"type":"string"},"rawJson":{"type":"string"}},"required":["ixs","timestamp","signature","obligation","wallet"]},"KlendBulkTxBody":{"type":"object","properties":{"start":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"end":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"instruction":{"type":"string","description":"Instruction name to filter by","example":"depositReserveLiquidityAndObligationCollateralV2"},"paginationToken":{"type":"string","example":"eyJsYXN0SWQiOiIxMjM0In0=","description":"Pagination token for next page"}},"required":["instruction"]},"KlendAllMarketsUserTransactionsResponseV3":{"type":"array","items":{"$ref":"#/components/schemas/KlendAllMarketsUserTransactionsItemV3"}},"KlendAllMarketsUserTransactionsItemV3":{"type":"object","properties":{"market":{"$ref":"#/components/schemas/AddressBase58"},"obligations":{"$ref":"#/components/schemas/KlendUserObligationsMapV3"},"withdrawQueueTransactions":{"type":"array","items":{"$ref":"#/components/schemas/KlendWithdrawQueueTransactionV3"}}},"required":["market","obligations","withdrawQueueTransactions"]},"KlendUserObligationsMapV3":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/KlendTransactionUserResponseV3"}}},"KlendTransactionUserResponseV3":{"type":"object","properties":{"createdOn":{"type":"string","format":"date-time"},"rolloverCount":{"type":"integer","exclusiveMinimum":0},"firstRolloverTimestamp":{"type":"string","pattern":"^\\d+$","description":"Oldest rollover in the run, in Unix milliseconds"},"transactionSignature":{"type":"string"},"transactionName":{"type":"string"},"liquidityToken":{"type":"string"},"liquidityTokenMint":{"$ref":"#/components/schemas/AddressBase58"},"liquidityTokenAmount":{"$ref":"#/components/schemas/Decimal"},"liquidityTokenPrice":{"$ref":"#/components/schemas/Decimal"},"solPrice":{"$ref":"#/components/schemas/Decimal"},"liquidityUsdValue":{"$ref":"#/components/schemas/Decimal"},"isLiquidationWithdrawal":{"type":"boolean"},"obligationType":{"type":"string"},"transactionDisplayName":{"type":"string"},"isSecondPartOfCompositeIx":{"type":"boolean"},"amountBasis":{"type":"string","enum":["debt"]},"borrowFeeAmount":{"$ref":"#/components/schemas/Decimal"},"borrowFeeEstimated":{"type":"boolean"},"timestamp":{"type":"string","pattern":"^\\d+$","description":"Unix timestamp in milliseconds"}},"required":["createdOn","transactionSignature","transactionName","liquidityToken","liquidityTokenMint","liquidityTokenAmount","isLiquidationWithdrawal","obligationType","transactionDisplayName","timestamp"]},"KlendWithdrawQueueTransactionV3":{"type":"object","properties":{"createdOn":{"type":"string","format":"date-time"},"timestamp":{"type":"number"},"transactionSignature":{"type":"string"},"transactionName":{"type":"string"},"transactionDisplayName":{"type":"string"},"owner":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Wallet that owns the withdraw ticket"}]},"reserve":{"$ref":"#/components/schemas/AddressBase58"},"withdrawTicket":{"$ref":"#/components/schemas/AddressBase58"},"solPrice":{"$ref":"#/components/schemas/Decimal"},"liquidityToken":{"type":"string"},"liquidityTokenMint":{"$ref":"#/components/schemas/AddressBase58"},"liquidityTokenAmount":{"$ref":"#/components/schemas/Decimal"},"liquidityTokenPrice":{"$ref":"#/components/schemas/Decimal"},"liquidityUsdValue":{"$ref":"#/components/schemas/Decimal"}},"required":["createdOn","timestamp","transactionSignature","transactionName","transactionDisplayName","reserve","withdrawTicket","solPrice","liquidityToken","liquidityTokenMint","liquidityTokenAmount","liquidityTokenPrice","liquidityUsdValue"]},"KlendUserTransactionsResponseV3":{"type":"object","properties":{"obligations":{"$ref":"#/components/schemas/KlendUserObligationsMapV3"},"withdrawQueueTransactions":{"type":"array","items":{"$ref":"#/components/schemas/KlendWithdrawQueueTransactionV3"}},"truncated":{"type":"boolean","enum":[true]}},"required":["obligations","withdrawQueueTransactions"]},"KlendBulkTxResponseV3":{"type":"object","properties":{"obligationTransactions":{"type":"array","items":{"$ref":"#/components/schemas/KlendBulkTxObligationResultItemV3"}},"withdrawQueueTransactions":{"type":"array","items":{"$ref":"#/components/schemas/KlendBulkTxWithdrawQueueResultItemV3"}},"paginationToken":{"type":"string","description":"Token for next page. Absent when no more results."}},"required":["obligationTransactions","withdrawQueueTransactions"]},"KlendBulkTxObligationResultItemV3":{"type":"object","properties":{"ixs":{"type":"array","items":{}},"timestamp":{"type":"string","format":"date-time"},"signature":{"type":"string"},"obligation":{"type":"string"},"wallet":{"type":"string"},"rawJson":{"type":"string"}},"required":["ixs","timestamp","signature","obligation","wallet"]},"KlendBulkTxWithdrawQueueResultItemV3":{"type":"object","properties":{"ixs":{"type":"array","items":{}},"timestamp":{"type":"string","format":"date-time"},"signature":{"type":"string"},"wallet":{"type":"string"},"reserve":{"$ref":"#/components/schemas/AddressBase58"},"withdrawTicket":{"$ref":"#/components/schemas/AddressBase58"},"rawJson":{"type":"string"}},"required":["ixs","timestamp","signature","wallet","reserve","withdrawTicket"]},"KlendBulkTxBodyV3":{"type":"object","properties":{"start":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"end":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"instruction":{"type":"string","description":"Instruction name to filter by","example":"depositReserveLiquidityAndObligationCollateralV2"},"paginationToken":{"type":"string","example":"eyJsYXN0SWQiOiIxMjM0In0=","description":"Pagination token for next page"}},"required":["instruction"]},"KlendTransactionHistoryResponse":{"type":"object","properties":{"transactions":{"type":"array","items":{"anyOf":[{"allOf":[{"$ref":"#/components/schemas/KlendTransactionUserResponseV3"},{"type":"object","properties":{"kind":{"type":"string","enum":["obligation"]},"market":{"$ref":"#/components/schemas/AddressBase58"},"obligation":{"$ref":"#/components/schemas/AddressBase58"}},"required":["kind","market","obligation"]}]},{"allOf":[{"$ref":"#/components/schemas/KlendWithdrawQueueTransactionV3"},{"type":"object","properties":{"kind":{"type":"string","enum":["withdrawQueue"]},"market":{"$ref":"#/components/schemas/AddressBase58"}},"required":["kind","market"]}]}]}},"paginationToken":{"type":"string"}},"required":["transactions"]},"BorrowOrderFillsResponse":{"type":"object","properties":{"fills":{"type":"array","items":{"$ref":"#/components/schemas/BorrowOrderFill"}}},"required":["fills"]},"BorrowOrderFill":{"type":"object","properties":{"eventType":{"type":"string","enum":["partial_fill","full_fill"],"description":"Type of fill event","example":"partial_fill"},"eventTimestamp":{"type":"string","format":"date-time","description":"Timestamp of the on-chain transaction"},"transactionSignature":{"type":"string","description":"Transaction signature","example":"2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v"},"debtLiquidityMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Debt liquidity token mint"}]},"filledAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount filled in this event (difference of remaining debt before and after)"}]}},"required":["eventType","eventTimestamp","transactionSignature","debtLiquidityMint","filledAmount"]},"ObligationsWithOpenBorrowOrdersResponse":{"type":"object","properties":{"obligations":{"type":"array","items":{"$ref":"#/components/schemas/OpenBorrowOrder"}}},"required":["obligations"]},"OpenBorrowOrder":{"type":"object","properties":{"obligationPubkey":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Obligation public key"}]},"owner":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Obligation owner wallet"}]},"deposits":{"type":"array","items":{"$ref":"#/components/schemas/ObligationDeposit"},"description":"Active collateral deposits backing this obligation"},"debtLiquidityMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Debt liquidity token mint"}]},"remainingDebtAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Remaining debt amount to be filled, in lamports"}]},"requestedDebtAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Originally requested debt amount, in lamports"}]},"filledDebtDestination":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token account where filled funds are sent"}]},"maxBorrowRateBps":{"type":"number","description":"Maximum borrow rate the owner agrees to, in bps"},"minDebtTermSeconds":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Minimum debt term the owner agrees to, in seconds"}]},"fillableUntilTimestamp":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Unix timestamp until which the order can be filled"}]},"placedAtTimestamp":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Unix timestamp when the order was placed"}]},"lastUpdatedAtTimestamp":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Unix timestamp when the order was last updated"}]}},"required":["obligationPubkey","owner","deposits","debtLiquidityMint","remainingDebtAmount","requestedDebtAmount","filledDebtDestination","maxBorrowRateBps","minDebtTermSeconds","fillableUntilTimestamp","placedAtTimestamp","lastUpdatedAtTimestamp"]},"ObligationDeposit":{"type":"object","properties":{"depositReserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reserve address the collateral is deposited to"}]},"depositedAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount of collateral deposited"}]}},"required":["depositReserve","depositedAmount"]},"YieldHistoryResponse":{"type":"array","items":{"$ref":"#/components/schemas/YieldHistoryItem"}},"YieldHistoryItem":{"type":"object","properties":{"createdOn":{"$ref":"#/components/schemas/SnapshotDateTime"},"apr":{"$ref":"#/components/schemas/Apr"},"apy":{"$ref":"#/components/schemas/Apy"}},"required":["createdOn","apr","apy"]},"Apr":{"type":"string","description":"APR in decimal format (not percentage) represented as string. Multiply by 100 to get percentage (%) - 0.1 in API response is 10%.","example":"0.2","examples":["0.123","0","1","1.23","-0.5","999999.999999"]},"PtYieldsResponse":{"type":"array","items":{"$ref":"#/components/schemas/PtYieldItem"}},"PtYieldItem":{"type":"object","properties":{"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Fresh stored PT APY in decimal units for an active Kamino reserve. Matches reserve stats `underlyingApy.current` for the same stored snapshot."}]},"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the token mint","example":"So11111111111111111111111111111111111111112","examples":["So11111111111111111111111111111111111111112","EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"]}]}},"required":["apy","tokenMint"]},"AirdropAllocation":{"type":"object","properties":{"quantity":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Quantity of tokens allocated to the user for the airdrop"}]},"name":{"type":"string","description":"Name of the airdrop allocation source","example":"main"}},"required":["quantity","name"]},"AirdropMetrics":{"type":"object","properties":{"totalAllocation":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total allocated amount across all users for this airdrop"}]},"totalUsers":{"$ref":"#/components/schemas/Integer"},"claimDate":{"allOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"description":"Date when the airdrop claim becomes available or was executed"}]}},"required":["totalAllocation","totalUsers","claimDate"]},"Integer":{"type":"string","description":"Total number of unique users participating in the airdrop","example":"1","examples":["0","1","100","-1"]},"StakingYield":{"type":"object","properties":{"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Staking APY in decimal format for the token"}]},"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the liquid staking token mint","example":"J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn","examples":["J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn","mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So","pSo1f9nQXWgXibFtKf7NWYxb5enAM4qfP6UJSiXRQfL"]}]}},"required":["apy","tokenMint"]},"Epoch":{"type":"object","properties":{"epoch":{"type":"number","description":"Epoch identifier","example":678},"firstSlot":{"type":"number","description":"First slot number of the epoch","example":"123456789"},"lastSlot":{"type":"number","description":"Last slot number of the epoch","example":"123999999"},"startBlockTime":{"allOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"description":"UTC timestamp when the epoch started"}]},"endBlockTime":{"allOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"description":"UTC timestamp when the epoch ended"}]}},"required":["epoch","firstSlot","lastSlot","startBlockTime","endBlockTime"]},"KVaultInstruction":{"type":"object","properties":{"createdOn":{"type":"string","format":"date-time","description":"Date when the instruction was created"},"instruction":{"type":"string","description":"Type of instruction"},"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint address"}]},"tokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount of tokens involved"}]},"tokenPrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Price of the token at the time of instruction"}]},"solPrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Price of SOL at the time of instruction"}]},"sharePrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Price per share at the time of instruction"}]},"numberOfShares":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Number of shares involved, or null for vault-level instructions such as invest"},"usdValue":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value of the transaction"}]},"transaction":{"type":"string","description":"Transaction signature"},"kvault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"KVault identifier"}]},"latestPosition":{"type":"boolean","description":"Indicates if this is the latest position"}},"required":["createdOn","instruction","tokenMint","tokenAmount","tokenPrice","solPrice","sharePrice","numberOfShares","usdValue","transaction","kvault","latestPosition"]},"KvaultAllocationTransactionsResponse":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/KvaultAllocationTransaction"}},"paginationToken":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"}},"required":["result"]},"KvaultAllocationTransaction":{"type":"object","properties":{"createdOn":{"allOf":[{"$ref":"#/components/schemas/TransactionDateTime"},{"description":"Timestamp when the allocation changed"}]},"tx":{"type":"string","description":"Transaction signature","example":"2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v"},"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the lending market"}]},"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the allocation reserve"}]},"solPrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"SOL price when the allocation changed"}]},"tokenPrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Vault token price when the allocation changed"}]},"tokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Signed vault token amount: positive when supplied to the reserve and negative when withdrawn from it"}]}},"required":["createdOn","tx","market","reserve","solPrice","tokenPrice","tokenAmount"]},"KvaultBulkTransaction":{"type":"object","properties":{"ix":{"$ref":"#/components/schemas/KvaultEnrichedInstruction"},"timestamp":{"$ref":"#/components/schemas/TransactionDateTime"},"signature":{"type":"string","description":"Transaction signature","example":"2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v"},"kvault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the vault","example":"HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E"}]},"wallet":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"rawJson":{"type":"string","description":"Entire raw JSON of the instruction"}},"required":["ix","timestamp","signature","kvault","wallet"]},"KvaultEnrichedInstruction":{"type":"object","properties":{"market":{"type":"string","description":"KLend market public key","example":"EyV4jxSMd6vpuRgrxMFem7CKRhcB4Vv6WMRDtxPQNP4"},"reserve":{"type":"string","description":"KLend reserve public key","example":"ALnjBHECcdBsSwgVJ6A8pFEZ15qxE5jJQriCXSKT3Bte"},"solPrice":{"$ref":"#/components/schemas/Decimal"},"sharePrice":{"$ref":"#/components/schemas/Decimal"},"tokenPrice":{"$ref":"#/components/schemas/Decimal"},"tokenAmount":{"$ref":"#/components/schemas/Decimal"},"numberOfShares":{"$ref":"#/components/schemas/Decimal"}},"required":["solPrice","sharePrice","tokenPrice","tokenAmount","numberOfShares"],"description":"Enriched kvault instruction object","example":{"tokenAmount":"835.924775","numberOfShares":"814.34612","solPrice":"138.7776002","sharePrice":"1.0263403430350673002","tokenPrice":"0.99984713"}},"KvaultVaultTransactionsResponse":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/KvaultVaultTransaction"}},"hasMore":{"type":"boolean","description":"Whether more transactions match the filter after this page"},"paginationToken":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Token for the next page; set only when hasMore"}},"required":["result","hasMore"]},"KvaultVaultTransaction":{"type":"object","properties":{"ix":{"$ref":"#/components/schemas/KvaultVaultEnrichedInstruction"},"instruction":{"type":"string","example":"withdrawFromAvailable","description":"Instruction name"},"timestamp":{"$ref":"#/components/schemas/TransactionDateTime"},"signature":{"type":"string","description":"Transaction signature","example":"2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v"},"kvault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the vault","example":"HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E"}]},"wallet":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]}},"required":["ix","instruction","timestamp","signature","kvault","wallet"]},"KvaultVaultEnrichedInstruction":{"type":"object","properties":{"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"KLend market public key"}]},"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"KLend reserve public key"}]},"solPrice":{"$ref":"#/components/schemas/Decimal"},"sharePrice":{"$ref":"#/components/schemas/Decimal"},"tokenPrice":{"$ref":"#/components/schemas/Decimal"},"tokenAmount":{"$ref":"#/components/schemas/Decimal"},"numberOfShares":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Vault shares minted or burned; missing on invest rows"}]},"fullWithdraw":{"type":"boolean","description":"Whether the withdrawal burned all of the wallet shares; set on withdraw-type rows"}},"required":["solPrice","sharePrice","tokenPrice","tokenAmount"]},"EnqueuedWithdrawTransactionsResponse":{"type":"array","items":{"$ref":"#/components/schemas/EnqueuedWithdrawTransaction"}},"EnqueuedWithdrawTransaction":{"allOf":[{"$ref":"#/components/schemas/KlendWithdrawQueueTransactionV3"},{"type":"object","properties":{"remainingCollateralAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Reserve collateral (cToken, raw u64 units) still queued on the ticket after its latest withdraw-queue instruction"}]}},"required":["owner","remainingCollateralAmount"]}]},"KvaultWithdrawQueueResponse":{"type":"object","properties":{"reserves":{"type":"array","items":{"$ref":"#/components/schemas/KvaultWithdrawQueueReserve"},"description":"Withdraw queue of each vault allocation reserve"}},"required":["reserves"]},"KvaultWithdrawQueueReserve":{"type":"object","properties":{"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Allocation reserve public key"}]},"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Lending market public key of the reserve"}]},"liquidityMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Liquidity token mint of the reserve"}]},"issuanceEnabled":{"type":"boolean","description":"Whether the market allows issuing new withdraw tickets"},"redemptionEnabled":{"type":"boolean","description":"Whether the market allows redeeming queued withdraw tickets"},"cancellationEnabled":{"type":"boolean","description":"Whether the market allows cancelling withdraw tickets"},"nextIssuedTicketSequenceNumber":{"allOf":[{"$ref":"#/components/schemas/Integer"},{"description":"Sequence number the next issued ticket gets (u64)"}]},"nextWithdrawableTicketSequenceNumber":{"allOf":[{"$ref":"#/components/schemas/Integer"},{"description":"Sequence number of the ticket at the head of the queue (u64)"}]},"queuedLiquidityAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Liquidity token amount queued on the reserve across all tickets, at the current collateral exchange rate"}]},"queuedUsdValue":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value queued on the reserve across all tickets"}]},"availableLiquidity":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Liquidity token amount held by the reserve; queued tickets are served from it before other withdrawals"}]},"tickets":{"type":"array","items":{"$ref":"#/components/schemas/KvaultWithdrawTicket"},"description":"Withdraw tickets on the reserve from every owner, sorted by sequence number"}},"required":["reserve","market","liquidityMint","issuanceEnabled","redemptionEnabled","cancellationEnabled","nextIssuedTicketSequenceNumber","nextWithdrawableTicketSequenceNumber","queuedLiquidityAmount","queuedUsdValue","availableLiquidity","tickets"]},"KvaultWithdrawTicket":{"type":"object","properties":{"ticket":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Withdraw ticket account public key"}]},"sequenceNumber":{"allOf":[{"$ref":"#/components/schemas/Integer"},{"description":"Ticket sequence number in the reserve withdraw queue (u64)"}]},"owner":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Wallet that owns the withdraw ticket"}]},"kvault":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}],"description":"This vault when the ticket was issued by one of its `redeemInKind` redemptions, otherwise null"},"queuedCollateralAmount":{"allOf":[{"$ref":"#/components/schemas/Integer"},{"description":"Reserve collateral (cToken, raw u64 units) still queued on the ticket"}]},"queuedLiquidityAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Liquidity token amount still queued on the ticket, at the current collateral exchange rate"}]},"queuedUsdValue":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value still queued on the ticket, at the current token price"}]},"createdOn":{"type":"string","format":"date-time","description":"Time the ticket was issued"},"invalid":{"type":"boolean","description":"Whether the ticket was marked invalid on-chain"},"position":{"type":"integer","description":"Number of tickets on the reserve with a lower sequence number and collateral still queued"},"liquidityAhead":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Liquidity token amount queued on the tickets ahead of this one"}]},"usdAhead":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value queued on the tickets ahead of this one"}]}},"required":["ticket","sequenceNumber","owner","kvault","queuedCollateralAmount","queuedLiquidityAmount","queuedUsdValue","createdOn","invalid","position","liquidityAhead","usdAhead"]},"VaultStateArray":{"type":"array","items":{"type":"object","properties":{"address":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the vault"}]},"state":{"$ref":"#/components/schemas/The vault state object"},"programId":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the kvault program which owns the vault"}]}},"required":["address","state","programId"]}},"The vault state object":{"type":"object","properties":{"vaultAdminAuthority":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the vault admin authority"}]},"baseVaultAuthority":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the base vault authority"}]},"baseVaultAuthorityBump":{"type":"number","description":"Bump seed for the base vault authority"},"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the token mint"}]},"tokenMintDecimals":{"type":"number","description":"Decimals of the token mint"},"tokenVault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the token vault"}]},"tokenProgram":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the token program"}]},"sharesMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the shares mint"}]},"sharesMintDecimals":{"type":"number","description":"Decimals of the shares mint"},"tokenAvailable":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount of tokens available in the vault"}]},"sharesIssued":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total shares issued by the vault"}]},"availableCrankFunds":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Available crank funds in the vault"}]},"performanceFeeBps":{"type":"number","description":"Performance fee in basis points"},"managementFeeBps":{"type":"number","description":"Management fee in basis points"},"lastFeeChargeTimestamp":{"type":"number","description":"Timestamp of the last fee charge"},"prevAum":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Previous assets under management scaled factor"}]},"pendingFees":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Pending fees scaled factor"}]},"vaultAllocationStrategy":{"type":"array","items":{"type":"object","properties":{"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the reserve"}]},"ctokenVault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the cToken vault"}]},"targetAllocationWeight":{"type":"number","description":"Target allocation weight as a whole number"},"tokenAllocationCap":{"type":"string","description":"Token allocation cap in lamports"},"ctokenVaultBump":{"type":"number","description":"cToken vault bump seed"},"ctokenAllocation":{"type":"string","description":"cToken allocation in lamports"},"lastInvestSlot":{"type":"string","description":"Last invest slot"},"tokenTargetAllocation":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token target allocation scaled factor"}]}},"required":["reserve","ctokenVault","targetAllocationWeight","tokenAllocationCap","ctokenVaultBump","ctokenAllocation","lastInvestSlot","tokenTargetAllocation"],"description":"Vault allocation strategy entry"},"description":"List of vault allocation strategies"},"minDepositAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Minimum deposit amount in lamports"}]},"minWithdrawAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Minimum withdraw amount in lamports"}]},"minInvestAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Minimum invest amount in lamports"}]},"minInvestDelaySlots":{"type":"number","description":"Minimum invest delay in slots"},"crankFundFeePerReserve":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Crank fund fee per reserve"}]},"pendingAdmin":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the pending admin"}]},"cumulativeEarnedInterest":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Cumulative earned interest in decimal format"}]},"cumulativeMgmtFees":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Cumulative management fees in decimal format"}]},"cumulativePerfFees":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Cumulative performance fees in decimal format"}]},"name":{"type":"string","description":"Name of the vault"},"vaultLookupTable":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the vault lookup table"}]},"vaultFarm":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the vault farm"}]},"creationTimestamp":{"type":"number","description":"Timestamp of vault creation"},"allocationAdmin":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the allocation admin"}]},"depositCap":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum vault AUM net of pending fees that deposits can reach, in token lamports. 0 and 18446744073709551615 (u64::MAX) mean the vault is uncapped"}]}},"required":["vaultAdminAuthority","baseVaultAuthority","baseVaultAuthorityBump","tokenMint","tokenMintDecimals","tokenVault","tokenProgram","sharesMint","sharesMintDecimals","tokenAvailable","sharesIssued","availableCrankFunds","performanceFeeBps","managementFeeBps","lastFeeChargeTimestamp","prevAum","pendingFees","vaultAllocationStrategy","minDepositAmount","minWithdrawAmount","minInvestAmount","minInvestDelaySlots","crankFundFeePerReserve","pendingAdmin","cumulativeEarnedInterest","cumulativeMgmtFees","cumulativePerfFees","name","vaultLookupTable","vaultFarm","creationTimestamp","allocationAdmin","depositCap"]},"KvaultAllocationsResponse":{"type":"object","properties":{"asOf":{"allOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"description":"Timestamp when the allocation snapshot was computed"}]},"capitalDeployedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total USD value deployed across allocation reserves"}]},"utilizationRatio":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Borrowed share of total vault assets, including unallocated funds, in decimal format"}]},"allocations":{"type":"array","items":{"$ref":"#/components/schemas/KvaultAllocation"}},"unallocated":{"type":"object","properties":{"tokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Liquidity token amount not deployed to a reserve"}]},"usd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value not deployed to a reserve"}]},"pct":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Share of vault assets not deployed to a reserve as a percentage"}]}},"required":["tokenAmount","usd","pct"]}},"required":["asOf","capitalDeployedUsd","utilizationRatio","allocations","unallocated"]},"KvaultAllocation":{"type":"object","properties":{"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the allocation reserve"}]},"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the reserve lending market"}]},"marketName":{"type":"string","description":"Name of the reserve lending market"},"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Liquidity token mint of the allocation reserve"}]},"symbol":{"type":"string","description":"Allocation token symbol"},"targetWeightPct":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Configured allocation weight as a percentage"}]},"actualPct":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Current share of vault assets in the reserve as a percentage"}]},"suppliedTokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Liquidity token amount currently supplied to the reserve"}]},"suppliedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value currently supplied to the reserve"}]},"capTokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum liquidity token amount that may be allocated to the reserve"}]},"utilizationRatio":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Current reserve utilization ratio in decimal format"}]},"supplyApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Current base supply APY in decimal format"}]},"rewardsApy":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Current reserve rewards APY in decimal format, or null when unavailable"},"collateral":{"type":"array","items":{"$ref":"#/components/schemas/KvaultAllocationCollateral"},"description":"Other active reserves accepted as collateral in the market"}},"required":["reserve","market","marketName","tokenMint","symbol","targetWeightPct","actualPct","suppliedTokenAmount","suppliedUsd","capTokenAmount","utilizationRatio","supplyApy","rewardsApy","collateral"]},"KvaultAllocationCollateral":{"type":"object","properties":{"mint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Liquidity token mint of the collateral reserve"}]},"symbol":{"type":"string","description":"Collateral token symbol"},"totalSupplyUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total supplied liquidity in the collateral reserve, in USD"}]},"liqLtvPct":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Liquidation loan-to-value threshold as a percentage"}]}},"required":["mint","symbol","totalSupplyUsd","liqLtvPct"]},"KvaultBatchMetricsResponse":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/KvaultBatchMetric"}},"paginationToken":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"}},"required":["result"]},"KvaultBatchMetric":{"allOf":[{"$ref":"#/components/schemas/KvaultMetrics"},{"type":"object","properties":{"kvault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"KVault public key"}]}},"required":["kvault"]}]},"KvaultMetrics":{"type":"object","properties":{"apy7d":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"7-day Annual Percentage Yield of the kvault"}]},"apy14d":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"14-day Annual Percentage Yield of the kvault, null until the historian has computed it"},"apy24h":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"24-hour Annual Percentage Yield of the kvault"}]},"apy30d":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"30-day Annual Percentage Yield of the kvault"}]},"apy90d":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"90-day Annual Percentage Yield of the kvault"}]},"apy180d":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"180-day Annual Percentage Yield of the kvault"}]},"apy365d":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"365-day Annual Percentage Yield of the kvault"}]},"tvlUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total value locked in USD"}]},"tvlSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total value locked in SOL"}]},"deposit_cap":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum deposits accepted by the kvault"}]},"vaultType":{"type":"string","description":"KVault type"},"tokenPrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Price of the kvault token"}]},"solPrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Price of SOL"}]},"tokensAvailable":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Number of tokens available in the kvault"}]},"tokensAvailableUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value of tokens available in the kvault"}]},"tokensInvested":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Number of tokens invested in the kvault"}]},"tokensInvestedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value of tokens invested in the kvault"}]},"sharePrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Price per share of the kvault"}]},"tokensPerShare":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Number of tokens per share in the kvault"}]},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield of the kvault"}]},"apyTheoretical":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Theoretical Annual Percentage Yield of the kvault"}]},"apyActual":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Actual Annual Percentage Yield of the kvault"}]},"apyFarmRewards":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield from farm rewards in the kvault"}]},"apyIncentives":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield from incentives in the kvault"}]},"apyReservesIncentives":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield from reserves incentives in the kvault"}]},"numberOfHolders":{"type":"number","description":"Number of holders of the kvault"},"sharesIssued":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total shares issued by the kvault"}]},"cumulativeInterestEarned":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Cumulative interest earned in the kvault token amount"}]},"cumulativeInterestEarnedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Cumulative interest earned in USD for the kvault"}]},"cumulativeInterestEarnedSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Cumulative interest earned in SOL for the kvault"}]},"interestEarnedPerSecond":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned per second in the kvault token amount"}]},"interestEarnedPerSecondUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned per second in USD for the kvault"}]},"interestEarnedPerSecondSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned per second in SOL for the kvault"}]},"cumulativePerformanceFees":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Cumulative performance fees in the kvault token amount"}]},"cumulativePerformanceFeesUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Cumulative performance fees in USD for the kvault"}]},"cumulativePerformanceFeesSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Cumulative performance fees in SOL for the kvault"}]},"cumulativeManagementFees":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Cumulative management fees in the kvault token amount"}]},"cumulativeManagementFeesUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Cumulative management fees in USD for the kvault"}]},"cumulativeManagementFeesSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Cumulative management fees in SOL for the kvault"}]}},"required":["apy7d","apy24h","apy30d","apy90d","apy180d","apy365d","tokenPrice","solPrice","tokensAvailable","tokensAvailableUsd","tokensInvested","tokensInvestedUsd","sharePrice","tokensPerShare","apy","apyTheoretical","apyActual","apyFarmRewards","apyIncentives","apyReservesIncentives","numberOfHolders","sharesIssued","cumulativeInterestEarned","cumulativeInterestEarnedUsd","cumulativeInterestEarnedSol","interestEarnedPerSecond","interestEarnedPerSecondUsd","interestEarnedPerSecondSol","cumulativePerformanceFees","cumulativePerformanceFeesUsd","cumulativePerformanceFeesSol","cumulativeManagementFees","cumulativeManagementFeesUsd","cumulativeManagementFeesSol"]},"KvaultAccountDataResponse":{"type":"object","properties":{"slot":{"type":"string","description":"Slot at which the response was assembled"},"blockTime":{"type":"string","description":"Block time for the response slot, as Unix seconds"},"recentSlotDurationMs":{"type":"number","description":"Recent average slot duration in milliseconds"},"vaults":{"type":"array","items":{"type":"object","properties":{"pubkey":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Account public key"}]},"data":{"type":"string","description":"Base64 encoded account data"}},"required":["pubkey","data"]},"description":"VaultState accounts of the requested vaults"},"markets":{"type":"array","items":{"type":"object","properties":{"pubkey":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Account public key"}]},"data":{"type":"string","description":"Base64 encoded account data"}},"required":["pubkey","data"]},"description":"LendingMarket accounts of every market the requested vaults allocate into"},"reserves":{"type":"array","items":{"type":"object","properties":{"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Market public key"}]},"reserves":{"type":"array","items":{"type":"object","properties":{"pubkey":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Account public key"}]},"data":{"type":"string","description":"Base64 encoded account data"}},"required":["pubkey","data"]}}},"required":["market","reserves"]},"description":"Reserve accounts of every market the requested vaults allocate into, grouped by market"},"farms":{"type":"array","items":{"type":"object","properties":{"pubkey":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Account public key"}]},"data":{"type":"string","description":"Base64 encoded account data"}},"required":["pubkey","data"]},"description":"FarmState accounts of the vault farms, first-loss-capital farms, delegated farms and allocation reserve farms"}},"required":["slot","blockTime","recentSlotDurationMs","vaults","markets","reserves","farms"]},"KvaultBatchStatsResponse":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/KvaultStats"},"description":"Vault stats keyed by vault public key. Unknown vaults are omitted."},"KvaultStats":{"type":"object","properties":{"token":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Vault token mint"}]},"tokenPrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD price of the vault token"}]},"apy":{"type":"object","properties":{"total":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Total supply APY: net base APY plus farm and reserve incentives"}]},"base":{"type":"object","properties":{"gross":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Gross lending APY earned by the current allocations, before vault fees"}]},"net":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Net lending APY earned by the current allocations, after vault fees"}]}},"required":["gross","net"]},"farmIncentives":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"APY from the vault farm incentives, sum of farmRewards[].apy"}]},"reservesIncentives":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"APY from the allocation reserve farm incentives, weighted by target allocation"}]},"autoCompounding":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"APY from the native vault reward stream"}]}},"required":["total","base","farmIncentives","reservesIncentives","autoCompounding"]},"farmRewards":{"type":"array","items":{"type":"object","properties":{"rewardToken":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reward token mint address"}]},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Current reward APY component from the vault farm, as a decimal fraction"}]},"tokensPerSecond":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Reward token emission rate in UI token units per second"}]}},"required":["rewardToken","apy","tokensPerSecond"]},"description":"Per-token rewards of the vault farm (shares staked in the vault farm). apy.farmIncentives is the sum of apy over these rows. Empty when the vault has no farm or nothing is emitting."},"holdings":{"type":"object","properties":{"available":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount sitting uninvested in the vault"}]},"availableUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value sitting uninvested in the vault"}]},"invested":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount invested in reserves"}]},"investedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value invested in reserves"}]},"totalAumIncludingFees":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total token AUM of the vault, including pending fees"}]},"totalAumIncludingFeesUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total USD AUM of the vault, including pending fees"}]},"pendingFees":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Pending fees in token amount"}]},"pendingFeesUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Pending fees in USD"}]}},"required":["available","availableUsd","invested","investedUsd","totalAumIncludingFees","totalAumIncludingFeesUsd","pendingFees","pendingFeesUsd"]},"sharesIssued":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total shares issued by the vault"}]},"tokensPerShare":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount one share is worth"}]},"sharePrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD price of one share"}]},"utilizationRatio":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Share of the vault total AUM that is borrowed out of the reserves"}]},"capitalDeployed":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount deployed into reserves"}]},"capitalDeployedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value deployed into reserves"}]},"instantLiquidity":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount withdrawable from the vault right now without queueing: holdings.available plus allocations[].withdrawableTokenAmount. A per-vault upper bound over reserve liquidity shared with other vaults and depositors, so never sum it across vaults. Gross of withdrawal penalties; not for building transactions."}]},"instantLiquidityUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value of instantLiquidity at tokenPrice"}]},"depositCap":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Maximum vault AUM net of pending fees that deposits can reach, in token amount. Null when the vault is uncapped"},"depositCapUsd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"USD value of depositCap at tokenPrice. Null when uncapped"},"remainingDepositCapacity":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Token amount the vault still accepts before reaching depositCap: depositCap minus the AUM net of pending fees, floored at 0. Deposits above it are clamped on-chain. Null when uncapped"},"remainingDepositCapacityUsd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"USD value of remainingDepositCapacity at tokenPrice. Null when uncapped"},"allocations":{"type":"array","items":{"type":"object","properties":{"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reserve public key the vault allocates into"}]},"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Lending market public key of the reserve"}]},"targetPct":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Target allocation weight of the reserve as a percentage of all target weights"}]},"actualPct":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Share of the vault total AUM currently supplied to the reserve, in percent"}]},"suppliedTokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount currently supplied to the reserve"}]},"suppliedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value currently supplied to the reserve"}]},"supplyApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Current supply APY of the reserve"}]},"withdrawableTokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount the vault can withdraw from this reserve right now: the vault supply, capped by the reserve freely available liquidity and its remaining deposit-withdrawal cap, minus a 1-lamport rounding buffer. An upper bound over liquidity shared with other reserve depositors; not for building transactions."}]}},"required":["reserve","market","targetPct","actualPct","suppliedTokenAmount","suppliedUsd","supplyApy","withdrawableTokenAmount"]},"description":"Per-reserve allocation breakdown"}},"required":["token","tokenPrice","apy","farmRewards","holdings","sharesIssued","tokensPerShare","sharePrice","utilizationRatio","capitalDeployed","capitalDeployedUsd","instantLiquidity","instantLiquidityUsd","depositCap","depositCapUsd","remainingDepositCapacity","remainingDepositCapacityUsd","allocations"]},"KvaultBatchTimeSeriesResponse":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"timestamp":{"$ref":"#/components/schemas/SnapshotDateTime"},"tvl":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total Value Locked in token denomination"}]},"solTvl":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total Value Locked in SOL"}]},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield"}]},"apyTheoretical":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Theoretical Annual Percentage Yield"}]},"apyActual":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Actual Annual Percentage Yield"}]},"apyFarmRewards":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield from Farm Rewards"}]},"apyReservesIncentives":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield from Reserves Incentives"}]},"apyIncentives":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield from Incentives"}]},"sharePrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Share Price of the vault"}]},"tokensPerShare":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Vault tokens redeemable per share, in token denomination"}]},"interest":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned in token denomination"}]},"interestUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned in USD"}]},"interestSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned in SOL"}]},"reserves":{"type":"array","items":{"type":"object","properties":{"pubkey":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the reserve"}]},"supplyApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Supply Annual Percentage Yield"}]},"rewardsApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Rewards Annual Percentage Yield"}]},"allocationRatio":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Allocation Ratio"}]},"rewardTokens":{"type":"array","items":{"type":"object","properties":{"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint address"}]},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield for the reward token"}]}},"required":["tokenMint","apy"]},"description":"List of reward tokens for the reserve"}},"required":["pubkey","supplyApy","rewardsApy","allocationRatio","rewardTokens"]},"description":"List of reserves with rewards"},"vaultRewards":{"type":"array","items":{"type":"object","properties":{"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint address"}]},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield for the vault reward token"}]}},"required":["tokenMint","apy"]},"description":"List of vault reward tokens"}},"required":["timestamp","tvl","solTvl","apy","apyTheoretical","apyActual","apyFarmRewards","apyReservesIncentives","apyIncentives","sharePrice","tokensPerShare","interest","interestUsd","interestSol","reserves","vaultRewards"]}},"description":"Vault metrics time series keyed by vault public key. Unknown vaults are omitted."},"KvaultHoldersResponse":{"type":"object","properties":{"snapshotTakenAt":{"allOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"description":"Timestamp of the vault state snapshot the holders are read from"}]},"totalSharesIssued":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total shares issued by the vault in the same snapshot"}]},"holderCount":{"type":"number","description":"Number of holders recorded in the same snapshot"},"result":{"type":"array","items":{"$ref":"#/components/schemas/KvaultHolder"},"description":"Holders ordered by total shares, largest first"},"paginationToken":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"}},"required":["snapshotTakenAt","totalSharesIssued","holderCount","result"]},"KvaultHolder":{"type":"object","properties":{"wallet":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Wallet holding the Kamino Earn Vault shares"}]},"sharesHeld":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Shares held in the wallet, not staked in a farm"}]},"sharesInFarm":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Shares staked in the vault farm"}]},"totalShares":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Shares held plus shares staked in the farm"}]},"pctOfSharesIssued":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"The wallet's totalShares as a fraction of totalSharesIssued (0-1)"}]},"usdAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value of the position at the snapshot token price"}]}},"required":["wallet","sharesHeld","sharesInFarm","totalShares","pctOfSharesIssued","usdAmount"]},"KvaultReturnsComparisonResponse":{"type":"object","properties":{"asOf":{"type":"string","format":"date-time","description":"Timestamp of the vault's latest snapshot"},"inceptionDate":{"type":"string","format":"date-time","description":"Timestamp of the vault's first available snapshot"},"series":{"type":"array","items":{"$ref":"#/components/schemas/KvaultReturnsComparisonSeries"}}},"required":["asOf","inceptionDate","series"]},"KvaultReturnsComparisonSeries":{"type":"object","properties":{"name":{"type":"string","enum":["vault","sofr","defiBenchmark"]},"cumulative":{"$ref":"#/components/schemas/ReturnsWindowValues"},"averageMonthly":{"$ref":"#/components/schemas/ReturnsWindowValues"}},"required":["name","cumulative","averageMonthly"]},"ReturnsWindowValues":{"type":"object","properties":{"m1":{"type":["string","null"],"example":"1234.56789","description":"Return represented as a fraction, where 0.0123 means 1.23%"},"m3":{"type":["string","null"],"example":"1234.56789","description":"Return represented as a fraction, where 0.0123 means 1.23%"},"m6":{"type":["string","null"],"example":"1234.56789","description":"Return represented as a fraction, where 0.0123 means 1.23%"},"y1":{"type":["string","null"],"example":"1234.56789","description":"Return represented as a fraction, where 0.0123 means 1.23%"},"ytd":{"type":["string","null"],"example":"1234.56789","description":"Return represented as a fraction, where 0.0123 means 1.23%"},"sinceInception":{"type":["string","null"],"example":"1234.56789","description":"Return represented as a fraction, where 0.0123 means 1.23%"}},"required":["m1","m3","m6","y1","ytd","sinceInception"]},"KvaultUserPositions":{"type":"array","items":{"type":"object","properties":{"vaultAddress":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Address of the Kamino Earn Vault"}]},"stakedShares":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"The number of Kamino Earn Vault shares staked in a farm"}]},"unstakedShares":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"The number of Kamino Earn Vault shares held in the user wallet"}]},"totalShares":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"The total number of Kamino Earn Vault shares both held and staked by the user"}]}},"required":["vaultAddress","stakedShares","unstakedShares","totalShares"]}},"UserKVaultTotal":{"type":"object","properties":{"createdOn":{"$ref":"#/components/schemas/SnapshotDateTime"},"usdAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"User's total amount across all vaults in USD"}]},"solAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"User's total amount across all vaults in SOL"}]},"weightedApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Weighted average APY across all vaults in decimal format"}]},"cumulativeInterestEarnedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total interest earned in USD across all vaults"}]},"cumulativeInterestEarnedSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total interest earned in SOL across all vaults"}]},"interestEarnedPerSecondUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned per second at that specific moment in USD"}]},"interestEarnedPerSecondSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned per second at that specific moment in SOL"}]}},"required":["createdOn","usdAmount","solAmount","weightedApy","cumulativeInterestEarnedUsd","cumulativeInterestEarnedSol","interestEarnedPerSecondUsd","interestEarnedPerSecondSol"]},"UserKvaultHistoryResponse":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/UserKvaultMetrics"}},{"$ref":"#/components/schemas/UserKvaultChartHistory"}]},"UserKvaultMetrics":{"type":"object","properties":{"createdOn":{"$ref":"#/components/schemas/SnapshotDateTime"},"sharesAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"User's total shares amount"}]},"usdAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"User's USD amount in kvault"}]},"solAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"User's SOL amount in kvault"}]},"apy":{"$ref":"#/components/schemas/Apy"},"cumulativeInterestEarned":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total interest earned in kvault token amount for kvault"}]},"cumulativeInterestEarnedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total interest earned in USD for kvault"}]},"cumulativeInterestEarnedSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total interest earned in SOL for kvault"}]},"interestEarnedPerSecond":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned per second at that specific moment in token"}]},"interestEarnedPerSecondUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned per second at that specific moment in USD"}]},"interestEarnedPerSecondSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned per second at that specific moment in SOL"}]}},"required":["createdOn","sharesAmount","usdAmount","solAmount","apy","cumulativeInterestEarned","cumulativeInterestEarnedUsd","cumulativeInterestEarnedSol","interestEarnedPerSecond","interestEarnedPerSecondUsd","interestEarnedPerSecondSol"]},"UserKvaultChartHistory":{"type":"array","items":{"type":"object","properties":{"createdOn":{"allOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"description":"UTC start of the daily bucket; the newest bucket may be partial"}]},"usdAmount":{"$ref":"#/components/schemas/Decimal"},"cumulativeInterestEarnedUsd":{"$ref":"#/components/schemas/Decimal"}},"required":["createdOn","usdAmount","cumulativeInterestEarnedUsd"]}},"KvaultPnl":{"type":"object","properties":{"totalPnl":{"$ref":"#/components/schemas/KvaultMultiValue"},"totalCostBasis":{"$ref":"#/components/schemas/KvaultMultiValue"}},"required":["totalPnl","totalCostBasis"]},"KvaultMultiValue":{"type":"object","properties":{"usd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Value in USD"}]},"sol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Value in SOL"}]},"token":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Value in token denomination"}]}},"required":["usd","sol","token"]},"KvaultPnlTimeseriesValue":{"type":"object","properties":{"timestamp":{"type":"number","description":"Unix timestamp in milliseconds"},"type":{"anyOf":[{"type":"string","enum":["buy"]},{"type":"string","enum":["sell"]},{"type":"string","enum":["mark-to-market"]}]},"position":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Current position value"}]},"quantity":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Quantity involved in transaction"}]},"tokenPrice":{"allOf":[{"$ref":"#/components/schemas/KvaultMultiValue"},{"description":"Token price snapshot"}]},"sharePrice":{"allOf":[{"$ref":"#/components/schemas/KvaultMultiValue"},{"description":"Share price snapshot"}]},"costBasis":{"allOf":[{"$ref":"#/components/schemas/KvaultMultiValue"},{"description":"Cost basis for position"}]},"realizedPnl":{"allOf":[{"$ref":"#/components/schemas/KvaultMultiValue"},{"description":"Realized profit/loss"}]},"pnl":{"allOf":[{"$ref":"#/components/schemas/KvaultMultiValue"},{"description":"Total profit/loss"}]},"positionValue":{"allOf":[{"$ref":"#/components/schemas/KvaultMultiValue"},{"description":"Value of the position"}]},"investment":{"allOf":[{"$ref":"#/components/schemas/KvaultMultiValue"},{"description":"Total invested value"}]}},"required":["timestamp","type","position","quantity","tokenPrice","sharePrice","costBasis","realizedPnl","pnl","positionValue","investment"]},"SlotDuration":{"type":"object","properties":{"recentSlotDurationInMs":{"type":"number","description":"Slot duration in milliseconds calculated from the median duration of the last 3 epoch slot durations","example":400}},"required":["recentSlotDurationInMs"]},"OwnerNetValueHistoryResponse":{"type":"array","items":{"$ref":"#/components/schemas/OwnerNetValue"}},"OwnerNetValue":{"type":"object","properties":{"createdOn":{"$ref":"#/components/schemas/SnapshotDateTime"},"klendUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total USD value of positions in Kamino Lend"}]},"strategiesUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total USD value of Kamino Liquidity positions"}]},"kvaultsUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total USD value of Kamino Vault positions"}]},"stakingUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total USD value of KMNO staking position"}]},"depositsUsd":{"type":["string","null"],"example":"1234.56789","description":"Cumulative deposits since the first point of the response. Flows at the same block time are netted first, so the offsetting legs of one transaction count only as their net"},"withdrawalsUsd":{"type":["string","null"],"example":"1234.56789","description":"Cumulative withdrawals since the first point of the response. Flows at the same block time are netted first, so the offsetting legs of one transaction count only as their net"},"netRevenueUsd":{"type":["string","null"],"example":"1234.56789","description":"Cumulative net revenue since the first point of the response"},"modifiedDietzReturn":{"type":["string","null"],"example":"1234.56789","description":"Modified Dietz return ratio over the interval since the first point of the response; not a percent and not annualized"},"netRevenueStatus":{"type":"string","enum":["partial_snapshot","failed_flows","pending_flows","unpriced_flows","unpriced_harvests","legacy_snapshot","ok"],"description":"Availability status for net revenue fields. failed_flows: flow ingestion failed for this wallet from this time; revenue is unavailable until it is repaired. unpriced_harvests: farm reward harvests without a USD price are excluded, so the revenue fields are a lower-bound estimate."}},"required":["createdOn","klendUsd","strategiesUsd","kvaultsUsd","stakingUsd","depositsUsd","withdrawalsUsd","netRevenueUsd","modifiedDietzReturn","netRevenueStatus"]},"OwnerNetValueFilteredHistoryResponse":{"type":"object","properties":{"scope":{"type":"object","properties":{"requested":{"type":"object","properties":{"products":{"type":"array","items":{"type":"string","enum":["lending","multiply","leverage","earn","privateCredit","liquidity","staking"]}},"obligationTypes":{"type":"array","items":{"type":"string","enum":["Vanilla","Lending","LendingFixedRate","Multiply","MultiplyFixedRate","Leverage","LeverageFixedRate"]}}},"required":["products","obligationTypes"]},"effective":{"type":"object","properties":{"products":{"type":"array","items":{"type":"string","enum":["lending","multiply","leverage","earn","privateCredit","liquidity","staking"]}},"obligationTypes":{"type":"array","items":{"type":"string","enum":["Vanilla","Lending","LendingFixedRate","Multiply","MultiplyFixedRate","Leverage","LeverageFixedRate"]}},"categories":{"type":"array","items":{"type":"string","enum":["Vanilla","Multiply","Lending","Leverage","MultiplyFixedRate","LendingFixedRate","LeverageFixedRate","earn","privateCredit","liquidity","staking","klendUnknown","vaultUnknown","farmUnknown"]}}},"required":["products","obligationTypes","categories"]}},"required":["requested","effective"]},"frequency":{"type":"string","enum":["minute","hour","day"]},"coverage":{"type":"object","properties":{"cutover":{"anyOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"type":"null"}]},"legacyBaseline":{"type":"boolean"},"flowsCompleteThrough":{"anyOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"type":"null"}]},"firstAvailablePoint":{"anyOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"type":"null"}]},"frequencyClamp":{"type":["string","null"],"enum":["category_retention"]},"omittedRanges":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"families":{"type":"array","items":{"type":"string","enum":["klend","vault","liquidity","staking"]}},"reason":{"type":"string","enum":["no_base_row","category_coverage_partial","coverage_incomplete","no_source_rows","source_version_mismatch"]}},"required":["from","to","families","reason"]},"description":"Pre-cutover coverage gaps starting at the first known base point or coverage day. Post-cutover gaps are reported in each point's availability."}},"required":["cutover","legacyBaseline","flowsCompleteThrough","firstAvailablePoint","frequencyClamp","omittedRanges"]},"points":{"type":"array","items":{"type":"object","properties":{"createdOn":{"$ref":"#/components/schemas/SnapshotDateTime"},"valueUsd":{"type":["string","null"],"example":"1234.56789"},"unpricedPositionCount":{"type":"number"},"depositsUsd":{"type":["string","null"],"example":"1234.56789","description":"Cumulative deposits since the first point of the response. Flows at the same block time are netted first, so the offsetting legs of one transaction count only as their net"},"withdrawalsUsd":{"type":["string","null"],"example":"1234.56789","description":"Cumulative withdrawals since the first point of the response. Flows at the same block time are netted first, so the offsetting legs of one transaction count only as their net"},"netRevenueUsd":{"type":["string","null"],"example":"1234.56789"},"modifiedDietzReturn":{"type":["string","null"],"example":"1234.56789"},"netRevenueStatus":{"type":"string","enum":["ok","legacy_snapshot","pending_flows","unpriced_flows","unpriced_harvests","partial_snapshot","failed_flows","category_unavailable","category_unknown","pre_cutover_resolution"]},"availability":{"type":"object","properties":{"valuation":{"type":"string","enum":["ok","estimate","unavailable"]},"revenue":{"type":"string","enum":["ok","estimate","unavailable"]},"reasons":{"type":"array","items":{"type":"string","enum":["selected_unpriced","category_coverage_partial","category_coverage_unavailable","category_unknown_value","category_unknown_flow","pre_cutover_resolution","baseline_unavailable","flows_pending","flows_unpriced","harvest_unpriced","failed_flows","legacy_estimate","source_time_mismatch","base_value_mismatch"]},"description":"Flows of each product family are counted up to the time that family's value was read. source_time_mismatch means the selected values of one family were read more than an hour apart, or earlier than the previous point's, so their flow interval cannot be aligned with the value. base_value_mismatch means the category values of a selected product family (all of its categories, selected or not) differ from that family's total in the owner net value snapshot by more than 2% and $1,000 at a pre-cutover point. The category value is read at the family's source time, while the snapshot can lag it by up to half an hour or straddle a flow; the value stays available. harvest_unpriced means farm reward harvests without a USD price are excluded from withdrawals, so revenue is a lower-bound estimate."}},"required":["valuation","revenue","reasons"]}},"required":["createdOn","valueUsd","unpricedPositionCount","depositsUsd","withdrawalsUsd","netRevenueUsd","modifiedDietzReturn","netRevenueStatus","availability"]}}},"required":["scope","frequency","coverage","points"],"description":"Selected product USD interval net revenue. This differs from Multiply SOL-basis earnings. Legacy estimates include the historical 15-minute source skew."},"SwapHistoryResponse":{"type":"array","items":{"$ref":"#/components/schemas/SwapHistoryRow"}},"SwapHistoryRow":{"type":"object","properties":{"createdOn":{"type":"string","format":"date-time","description":"Timestamp when the swap was executed (ISO 8601 format)","example":"2025-03-01T12:00:00.000Z"},"transactionSignature":{"type":"string","description":"Transaction signature","example":"2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v"},"inAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Input token amount"}]},"outAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Output token amount"}]},"volumeUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Swap volume in USD"}]},"inMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Input token mint"}]},"outMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Output token mint"}]}},"required":["createdOn","transactionSignature","inAmount","outAmount","volumeUsd","inMint","outMint"]},"FoundLuts":{"type":"object","properties":{"lutAddresses":{"type":"array","items":{"$ref":"#/components/schemas/AddressBase58"},"description":"List of Lookup Table addresses that together cover the requested addresses"}},"required":["lutAddresses"]},"FindLutsForAddresses":{"type":"object","properties":{"addresses":{"type":"array","items":{"$ref":"#/components/schemas/AddressBase58"},"minItems":1,"maxItems":100,"description":"Addresses to find in LUTs (max 100)"},"verify":{"type":"boolean","default":true,"description":"Whether to verify that LUTs are active on-chain (defaults to true)","example":false},"userAccounts":{"type":"array","items":{"$ref":"#/components/schemas/AddressBase58"},"maxItems":100,"default":[],"description":"User-specific accounts (e.g. ATAs, token accounts). These are still searched in LUTs but are excluded from missing account tracking."}},"required":["addresses"]},"ManagedLutResponse":{"type":"object","properties":{"productIdentifierAddress":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"The product identifier address","example":"6KhEbVjFg8bNkpTSyEfGJhMGtv2bRQiAKKbKZLPvrBFm"}]},"lutAddresses":{"type":"array","items":{"$ref":"#/components/schemas/AddressBase58"},"description":"Active lookup table addresses","example":["3Kz4sMiBCxg7JdCCjwRTHtFsQRqJCSKh5pVERhPfMzYF"]}},"required":["productIdentifierAddress","lutAddresses"]},"ManagedLutBatchResponse":{"type":"array","items":{"$ref":"#/components/schemas/ManagedLutResponse"}},"ManagedLutByTypeResponse":{"type":"array","items":{"type":"object","properties":{"productIdentifierAddress":{"$ref":"#/components/schemas/AddressBase58"},"productType":{"$ref":"#/components/schemas/LutProductType"},"lutAddresses":{"type":"array","items":{"$ref":"#/components/schemas/AddressBase58"}}},"required":["productIdentifierAddress","productType","lutAddresses"]}},"LutProductType":{"type":"string","enum":["swap_pair","vault","strategy","market","meta_vault"],"description":"The type of product associated with a managed lookup table","example":"vault"},"NewVaultResponse":{"type":"object","properties":{"productId":{"type":"number","description":"The created/existing product ID","example":1},"vaultAddress":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Vault account address","example":"6KhEbVjFg8bNkpTSyEfGJhMGtv2bRQiAKKbKZLPvrBFm"}]},"lutAddress":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Lookup table address","example":"3Kz4sMiBCxg7JdCCjwRTHtFsQRqJCSKh5pVERhPfMzYF"}]},"lutEntryId":{"type":"number","description":"The created/existing LUT entry ID","example":1}},"required":["productId","vaultAddress","lutAddress","lutEntryId"]},"KvaultUserRewardMetrics":{"type":"object","properties":{"avgBaseApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Weighted average Base Annual Percentage Yield for the user"}]},"avgBoostedApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Weighted average Boosted Annual Percentage Yield for the user"}]},"avgMaxApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Weighted average Max Annual Percentage Yield for the user"}]},"rewards":{"type":"array","items":{"$ref":"#/components/schemas/KvaultUserRewardMetric"},"description":"List of kvault user reward metrics"}},"required":["avgBaseApy","avgBoostedApy","avgMaxApy","rewards"]},"KvaultUserRewardMetric":{"type":"object","properties":{"avgBaseApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Average Base Annual Percentage Yield for the user"}]},"avgBoostedApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Average Boosted Annual Percentage Yield for the user"}]},"avgMaxApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Average Max Annual Percentage Yield for the user"}]},"rewardMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Mint address of the reward token"}]},"lastCalculated":{"type":"string","format":"date-time","description":"Timestamp of the last calculation"},"tokensEarned":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total number of reward tokens earned by the user"}]},"tokensPerSecond":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Number of reward tokens distributed per second to the user"}]},"stakingBoost":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Staking boost percentage applied to the user"}]},"effectiveStakingBoost":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Effective staking boost percentage for the user"}]},"baseApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Base Annual Percentage Yield from rewards for the user"}]},"boostedApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Boosted Annual Percentage Yield from rewards for the user"}]},"maxApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Max Annual Percentage Yield from rewards for the user"}]},"usdAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total USD amount of rewards earned by the user without boost"}]},"usdAmountBoosted":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total USD amount of rewards earned by the user with boost applied"}]}},"required":["avgBaseApy","avgBoostedApy","avgMaxApy","rewardMint","lastCalculated","tokensEarned","tokensPerSecond","stakingBoost","effectiveStakingBoost","baseApy","boostedApy","maxApy","usdAmount","usdAmountBoosted"]},"KvaultRewardMetrics":{"type":"array","items":{"$ref":"#/components/schemas/KvaultRewardMetric"},"description":"List of kvault reward metrics"},"KvaultRewardMetric":{"type":"object","properties":{"kvault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Address of the kvault"}]},"rewardToken":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Mint address of the reward token"}]},"lastCalculated":{"type":"string","format":"date-time","description":"Timestamp of the last calculation"},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield from rewards in the kvault"}]},"tokensPerSecond":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Number of reward tokens distributed per second"}]}},"required":["kvault","rewardToken","lastCalculated","apy","tokensPerSecond"]},"StakingBoost":{"type":"object","properties":{"boost":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Boost multiplier value for the staking position in decimal format (multiply by 100 to get percentage %)"}]},"name":{"type":"string","description":"Staking boost source name","example":"staking_boost"},"farm":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Optional farm identifier associated with the boost"}]}},"required":["boost","name"]},"KlendUserRewardMetrics":{"type":"object","properties":{"avgBaseApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Weighted average Base Annual Percentage Yield for the user"}]},"avgBoostedApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Weighted average Boosted Annual Percentage Yield for the user"}]},"avgMaxApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Weighted average Max Annual Percentage Yield for the user"}]},"rewards":{"type":"array","items":{"$ref":"#/components/schemas/KlendUserRewardMetric"},"description":"List of klend user reward metrics"}},"required":["avgBaseApy","avgBoostedApy","avgMaxApy","rewards"]},"KlendUserRewardMetric":{"type":"object","properties":{"depositReserve":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}],"description":"Deposit reserve public key, if applicable"},"borrowReserve":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}],"description":"Borrow reserve public key, if applicable"},"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Market public key"}]},"rewardMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Mint address of the reward token"}]},"lastCalculated":{"type":"string","format":"date-time","description":"Timestamp of the last calculation"},"tokensEarned":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total number of reward tokens earned by the user"}]},"tokensPerSecond":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Number of reward tokens distributed per second to the user"}]},"stakingBoost":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Staking boost percentage applied to the user"}]},"effectiveStakingBoost":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Effective staking boost percentage for the user"}]},"baseApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Base Annual Percentage Yield from rewards for the user"}]},"boostedApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Boosted Annual Percentage Yield from rewards for the user"}]},"maxApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Max Annual Percentage Yield from rewards for the user"}]},"usdAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total USD amount of rewards earned by the user without boost"}]},"usdAmountBoosted":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total USD amount of rewards earned by the user with boost applied"}]}},"required":["depositReserve","borrowReserve","market","rewardMint","lastCalculated","tokensEarned","tokensPerSecond","stakingBoost","effectiveStakingBoost","baseApy","boostedApy","maxApy","usdAmount","usdAmountBoosted"]},"KlendRewardMetrics":{"type":"array","items":{"$ref":"#/components/schemas/KlendRewardMetric"},"description":"List of klend reward metrics"},"KlendRewardMetric":{"type":"object","properties":{"depositReserve":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}],"description":"Deposit reserve public key, if applicable"},"borrowReserve":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}],"description":"Borrow reserve public key, if applicable"},"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Market public key"}]},"rewardToken":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Mint address of the reward token"}]},"lastCalculated":{"type":"string","format":"date-time","description":"Timestamp of the last calculation"},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield from rewards"}]},"tokensPerSecond":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Number of reward tokens distributed per second"}]},"activePositionsUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total USD value of active positions receiving rewards"}]}},"required":["depositReserve","borrowReserve","market","rewardToken","lastCalculated","apy","tokensPerSecond","activePositionsUsd"]},"KlendRewardHistory":{"type":"array","items":{"$ref":"#/components/schemas/KlendRewardHistoryRow"},"description":"List of historical klend reward metrics"},"KlendRewardHistoryRow":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the data point"},"depositReserve":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}],"description":"Deposit reserve public key, if applicable"},"borrowReserve":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}],"description":"Borrow reserve public key, if applicable"},"rewardToken":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Mint address of the reward token"}]},"rewardApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield from rewards at this point in time"}]}},"required":["timestamp","depositReserve","borrowReserve","rewardToken","rewardApy"]},"LoanInfo":{"type":"object","properties":{"loanId":{"type":"string","description":"The loan (obligation) public key","example":"wGzt1J5Nr182HHqAc1zsfD9SLoe1MJb25VWih5NRY"},"marketId":{"type":"string","description":"The market public key","example":"6HT16972HHiY4RM33GfUc22pHZ3VLDPpXFWhQ7XJzA"},"user":{"type":"string","description":"The loan owner public key","example":"7yexZcPbepXgWw3Cxc7YB2eLaxwyuyshRbAF8XHDi2g"},"timestamp":{"type":"number","description":"UTC timestamp when this report was produced","example":1760707165421},"solanaSlot":{"type":"number","description":"Solana slot when this report was produced","example":373973788},"elevationGroup":{"type":"number","description":"The elevation group assigned to this obligation for isolation of risks","example":0},"leverage":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Current leverage ratio of the position","example":"0.5"}]},"loanInfo":{"type":"object","properties":{"collateral":{"type":"object","properties":{"deposits":{"type":"array","items":{"$ref":"#/components/schemas/LoanDepositInfo"},"description":"Array of collateral deposits"}},"required":["deposits"]},"debt":{"type":"object","properties":{"borrows":{"type":"array","items":{"$ref":"#/components/schemas/LoanBorrowInfo"},"description":"Array of debt borrows"}},"required":["borrows"]},"currentLtv":{"type":"number","description":"Current loan-to-value ratio (debt value × borrow factor / collateral value); liquidate when >= liquidationLtv","example":0.0554213869045533},"maxLtv":{"type":["number","null"],"description":"weighted average max LTV from all the collateral reserves (risks actions borrows or withdrawals are blocked when userLtv >= maxLtv)","example":0.74},"liquidationLtv":{"type":"number","description":"LTV threshold when liquidation occurs","example":0.75},"closeFactor":{"type":"number","description":"Maximum percentage of total debt that can be repaid in a single liquidation","example":0.1}},"required":["collateral","debt","currentLtv","maxLtv","liquidationLtv","closeFactor"]}},"required":["loanId","marketId","user","timestamp","solanaSlot","elevationGroup","leverage","loanInfo"]},"LoanDepositInfo":{"type":"object","properties":{"reserve":{"type":"string","description":"The reserve address in base58"},"tokenMint":{"type":"string","description":"The token mint address","example":"So11111111111111111111111111111111111111112"},"tokenName":{"type":"string","description":"The token name/symbol from the reserve","example":"SOL"},"tokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount in decimal format (not lamports)","example":"0.0100002082771212"}]},"tokenValue":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value (tokenAmount × tokenPrice)","example":"1.80421579010444"}]},"maxLtv":{"type":"number","description":"Maximum loan-to-value ratio for this collateral reserve","example":0.74},"liquidationLtv":{"type":"number","description":"Liquidation threshold LTV for this collateral reserve","example":0.75},"maxWithdrawableAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum token amount (decimals) that can be withdrawn while currentLtv <= maxLtv","example":"51225.5590659256"}]},"maxWithdrawableValue":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum USD value that can be withdrawn while currentLtv <= maxLtv","example":"9242003.76257327"}]},"tokenPrice":{"type":"number","description":"Latest price from the oracle","example":180.41782132}},"required":["reserve","tokenMint","tokenName","tokenAmount","tokenValue","maxLtv","liquidationLtv","maxWithdrawableAmount","maxWithdrawableValue","tokenPrice"]},"LoanBorrowInfo":{"type":"object","properties":{"reserve":{"type":"string","description":"The reserve address in base58"},"tokenMint":{"type":"string","description":"The token mint address","example":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"},"tokenName":{"type":"string","description":"The token name/symbol","example":"USDC"},"tokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount in decimal format","example":"0.100002775657846"}]},"tokenValue":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value (tokenAmount × tokenPrice)","example":"0.0999921413626825"}]},"maxBorrowableAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum amount that can be borrowed while currentLtv <= maxLtv","example":"1.30084031718889"}]},"maxBorrowableValue":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum USD value that can be borrowed while currentLtv <= maxLtv","example":"1.30070198582957"}]},"tokenPrice":{"type":"number","description":"Latest price from the oracle","example":0.99989366},"borrowFactor":{"type":"number","description":"Extra weight given to debt token in LTV calculation (debt value is multiplied by this factor))","example":1}},"required":["reserve","tokenMint","tokenName","tokenAmount","tokenValue","maxBorrowableAmount","maxBorrowableValue","tokenPrice","borrowFactor"]},"PrivateCreditMetricsResponse":{"type":"object","properties":{"metrics":{"$ref":"#/components/schemas/PrivateCreditAggregateMetrics"},"loans":{"type":"array","items":{"$ref":"#/components/schemas/PrivateCreditLoan"}}},"required":["metrics","loans"]},"PrivateCreditAggregateMetrics":{"type":"object","properties":{"activeLoans":{"$ref":"#/components/schemas/Decimal"},"totalBorrowedUsd":{"$ref":"#/components/schemas/Decimal"},"totalDepositedUsd":{"$ref":"#/components/schemas/Decimal"},"weightedAvgLtv":{"$ref":"#/components/schemas/Decimal"},"avgLtv":{"$ref":"#/components/schemas/Decimal"},"maxLtv":{"$ref":"#/components/schemas/Decimal"},"updatedOn":{"$ref":"#/components/schemas/SnapshotDateTime"}},"required":["activeLoans","totalBorrowedUsd","totalDepositedUsd","weightedAvgLtv","avgLtv","maxLtv","updatedOn"]},"PrivateCreditLoan":{"type":"object","properties":{"loanId":{"type":"string","description":"Haruko loan id; Haruko can re-issue a loan under a new id"},"totalBorrowedUsd":{"$ref":"#/components/schemas/Decimal"},"totalDepositedUsd":{"$ref":"#/components/schemas/Decimal"},"ltv":{"$ref":"#/components/schemas/Decimal"},"createdOn":{"allOf":[{"$ref":"#/components/schemas/SnapshotDateTime"},{"description":"First time this Haruko loan id appeared in the feed for this vault; not the origination date"}]},"collateralAsset":{"type":"string"},"maxLtv":{"$ref":"#/components/schemas/Decimal"},"liquidationStatus":{"type":"string"}},"required":["loanId","totalBorrowedUsd","totalDepositedUsd","ltv","createdOn","collateralAsset","maxLtv","liquidationStatus"]},"PrivateCreditHistoryResponse":{"type":"array","items":{"$ref":"#/components/schemas/PrivateCreditHistoryPoint"}},"PrivateCreditHistoryPoint":{"type":"object","properties":{"createdOn":{"$ref":"#/components/schemas/SnapshotDateTime"},"weightedAvgLtv":{"$ref":"#/components/schemas/Decimal"},"maxLtv":{"$ref":"#/components/schemas/Decimal"},"statusDistribution":{"type":"array","items":{"$ref":"#/components/schemas/PrivateCreditStatusDistribution"}}},"required":["createdOn","weightedAvgLtv","maxLtv","statusDistribution"]},"PrivateCreditStatusDistribution":{"type":"object","properties":{"status":{"type":"string"},"share":{"$ref":"#/components/schemas/Decimal"}},"required":["status","share"]},"SeasonUserReward":{"type":"object","properties":{"wallet":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Wallet address of the user"}]},"totalRewards":{"type":"object","properties":{"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total reward amount"}]},"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint address of the reward"}]}},"required":["amount","tokenMint"],"description":"Total combined season rewards from both KLend and KVault"}},"required":["wallet","totalRewards"]},"SeasonUserClaimStatus":{"type":"object","properties":{"hasUserClaimed":{"type":"boolean","description":"Whether the user harvested season rewards, matching the seasons page"},"amountClaimed":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Season reward tokens harvested by the user"}]},"amountForfeited":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Season reward tokens forfeited by a claim before vesting ended; otherwise zero"}]}},"required":["hasUserClaimed","amountClaimed","amountForfeited"]},"SeasonFinalVestingPoolAllocation":{"type":"object","properties":{"totalForfeitedRewards":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total amount of forfeited rewards from all users who claimed early"}]}},"required":["totalForfeitedRewards"]},"OraclePrices":{"type":"array","items":{"$ref":"#/components/schemas/OraclePriceItem"},"description":"List of oracle prices for assets in the market"},"OraclePriceItem":{"type":"object","properties":{"price":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Price value of the asset"}]},"mint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the token mint","example":"So11111111111111111111111111111111111111112","examples":["So11111111111111111111111111111111111111112","EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"]}]},"maxAgeInSeconds":{"allOf":[{"$ref":"#/components/schemas/Integer"},{"description":"Maximum allowed age of the price feed in seconds","example":"120"}]},"timestamp":{"$ref":"#/components/schemas/UnixTimestamp"},"name":{"type":"string","description":"Name of the token","example":"SOL"}},"required":["price","mint","maxAgeInSeconds","timestamp","name"]},"UnixTimestamp":{"type":"string","description":"Epoch Unix timestamp in seconds","example":"1763568282","examples":["0","1","100","-1"]},"OracleMarketPrices":{"allOf":[{"$ref":"#/components/schemas/MarketConfigResponseV2"},{"type":"object","properties":{"prices":{"type":"array","items":{"$ref":"#/components/schemas/OraclePriceItem"},"description":"Oracle prices for assets in this market"}},"required":["prices"]}]},"FarmsInstruction":{"type":"object","properties":{"createdOn":{"type":"string","format":"date-time","description":"Date when the instruction was created"},"transactionSignature":{"type":"string","description":"Transaction signature","example":"2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v"},"instruction":{"type":"string","description":"Instruction display name","example":"claim"},"tokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount of tokens involved"}]},"usdAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value of the transaction"}]},"farm":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Farm public key"}]},"token":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint public key"}]}},"required":["createdOn","transactionSignature","instruction","tokenAmount","usdAmount","farm","token"]},"FarmTransaction":{"type":"object","properties":{"createdOn":{"type":"string","format":"date-time","description":"Date when the instruction was created"},"transactionSignature":{"type":"string","description":"Transaction signature","example":"2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v"},"instruction":{"type":"string","description":"Instruction display name","example":"deposit"},"tokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount of tokens involved"}]},"usdAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"USD value of the transaction"}]}},"required":["createdOn","transactionSignature","instruction","tokenAmount","usdAmount"]},"FarmManagementInstruction":{"type":"object","properties":{"createdOn":{"type":"string","format":"date-time"},"transactionSignature":{"type":"string","description":"Transaction signature","example":"2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v"},"instruction":{"type":"string"},"farm":{"$ref":"#/components/schemas/AddressBase58"},"signer":{"$ref":"#/components/schemas/AddressBase58"},"tokenAmount":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}]},"usdAmount":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}]},"token":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}]},"rewardIndex":{"type":["number","null"]},"configMode":{"type":["string","null"]},"details":{"type":["object","null"],"additionalProperties":{}}},"required":["createdOn","transactionSignature","instruction","farm","signer","tokenAmount","usdAmount","token","rewardIndex","configMode","details"]},"BenchmarkRatesResponse":{"type":"array","items":{"$ref":"#/components/schemas/BenchmarkRate"}},"BenchmarkRate":{"type":"object","properties":{"index":{"type":"integer","description":"Index of the data point"},"hour":{"type":"string","description":"Timestamp of the data point"},"tracked_supply":{"type":"number","description":"Total tracked USD supply"},"avg_rate":{"type":"number","description":"Average lending rate"},"elements":{"type":"integer","description":"Number of data elements"},"included_protocols":{"type":"integer","description":"Number of protocols included"}},"required":["index","hour","tracked_supply","avg_rate","elements","included_protocols"]},"SofrRateHistoryResponse":{"type":"array","items":{"$ref":"#/components/schemas/SofrRateHistoryItem"}},"SofrRateHistoryItem":{"type":"object","properties":{"date":{"type":"string","format":"date","description":"Effective date of the rate (as published by the New York Fed)","example":"2024-01-10"},"rate":{"type":["string","null"],"example":"1234.56789","description":"Daily SOFR rate in percent, null when not yet published for the date"},"index":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"SOFR compounded index"}]},"avg30d":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"30-day compounded average SOFR in percent"}]},"avg90d":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"90-day compounded average SOFR in percent"}]},"avg180d":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"180-day compounded average SOFR in percent"}]}},"required":["date","rate","index","avg30d","avg90d","avg180d"]},"PortfolioResponse":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"Response timestamp as an ISO-8601 string"},"sections":{"$ref":"#/components/schemas/PortfolioSections"},"lending":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioLendingPosition"}},"multiply":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioMultiplyPosition"}},"leverage":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioLeveragePosition"}},"liquidity":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioLiquidityPosition"}},"earn":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioEarnPosition"}},"privateCredit":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioPrivateCreditPosition"}},"staking":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioStakingPosition"}}},"required":["timestamp","sections","lending","multiply","leverage","liquidity","earn","privateCredit","staking"]},"PortfolioSections":{"type":"object","properties":{"lending":{"$ref":"#/components/schemas/PortfolioSectionState"},"multiply":{"$ref":"#/components/schemas/PortfolioSectionState"},"leverage":{"$ref":"#/components/schemas/PortfolioSectionState"},"liquidity":{"$ref":"#/components/schemas/PortfolioSectionState"},"earn":{"$ref":"#/components/schemas/PortfolioSectionState"},"privateCredit":{"$ref":"#/components/schemas/PortfolioSectionState"},"staking":{"$ref":"#/components/schemas/PortfolioSectionState"}},"required":["lending","multiply","leverage","liquidity","earn","privateCredit","staking"],"description":"Per-section indexing and freshness metadata."},"PortfolioSectionState":{"type":"object","properties":{"indexed":{"type":"boolean","description":"Whether this section has been indexed for the wallet."},"positionsRefreshedOn":{"type":["string","null"],"format":"date-time","description":"Position freshness for this section."},"pricesRefreshedOn":{"type":["string","null"],"format":"date-time","description":"Oldest required price freshness for this section."},"appliedSlot":{"type":["integer","null"],"description":"Every on-chain change to this section's wallet positions up to this confirmed slot is reflected in the response, so a client can wait for it to reach the slot its transaction confirmed at. Covers position rows only, not prices or vault exchange rates. Null when the indexer has not reported a slot."},"errors":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioSectionError"},"default":[]}},"required":["indexed","positionsRefreshedOn","pricesRefreshedOn","appliedSlot"]},"PortfolioSectionError":{"type":"object","properties":{"code":{"type":"string","description":"Stable subcomponent error code, including klend-slot-stale, klend-slot-unavailable, and klend-reserve-accrual-missing"}},"required":["code"]},"PortfolioLendingPosition":{"type":"object","properties":{"obligation":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Obligation address"}]},"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Lending market address"}]},"tag":{"type":"string","enum":["Vanilla","Lending","LendingFixedRate","Multiply","MultiplyFixedRate","Leverage","LeverageFixedRate"],"description":"Obligation type tag","example":"Lending"},"netValue":{"type":["string","null"],"example":"1234.56789","description":"Net account value in USD from refreshed obligation stats"},"totalDepositValue":{"type":["string","null"],"example":"1234.56789","description":"Total deposit value in USD from refreshed obligation stats"},"totalBorrowValue":{"type":["string","null"],"example":"1234.56789","description":"Total borrow value in USD from refreshed obligation stats"},"ltv":{"type":["string","null"],"example":"1234.56789","description":"Current loan-to-value ratio from refreshed obligation stats"},"maxLtv":{"type":["string","null"],"example":"1234.56789","description":"Maximum loan-to-value ratio for the whole obligation from refreshed stats"},"liquidationLtv":{"type":["string","null"],"example":"1234.56789","description":"Liquidation LTV threshold from refreshed obligation stats"},"leverage":{"type":["string","null"],"example":"1234.56789","description":"Current leverage from refreshed obligation stats"},"netApy":{"type":["string","null"],"example":"1234.56789","description":"Current net APY as a signed fraction of equity (deposit value minus borrow value): baseApy + farmRewardsApy + assetYieldApy, from the cached reserve stats refreshed every minute. This is the current rate, not realized APY. Null when a reserve has no cached stats, a deposited or borrowed token whose yield applies to that side has its underlying yield unavailable (reserve stats underlyingApy null with underlyingYieldExpected true), a position has no price, equity is zero or negative, or there are no positions."},"baseApy":{"type":["string","null"],"example":"1234.56789","description":"Lending interest net of borrow cost as a signed fraction of equity: sum of deposit value x supply APY minus borrow value x borrow APY, divided by equity. Null under the same conditions as netApy."},"farmRewardsApy":{"type":["string","null"],"example":"1234.56789","description":"Reserve farm rewards on deposits and borrows plus pair incentives, as a signed fraction of equity. A pair incentive counts only when the obligation holds both its collateral reserve and its debt reserve, and pays on the debt reserve's borrowed value times the collateral reserve's share of total deposit value. Null under the same conditions as netApy."},"assetYieldApy":{"type":["string","null"],"example":"1234.56789","description":"The tokens' own yield (LST staking, yield-bearing tokens) as a signed fraction of equity; borrowing a yield-bearing token contributes negatively. Debt in a token whose yield is paid to suppliers rather than accrued by the token (USDe) contributes 0. Null under the same conditions as netApy."},"deposits":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioLendingDeposit"}},"borrows":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioLendingBorrow"}}},"required":["obligation","market","tag","netValue","totalDepositValue","totalBorrowValue","ltv","maxLtv","liquidationLtv","leverage","netApy","baseApy","farmRewardsApy","assetYieldApy","deposits","borrows"]},"PortfolioLendingDeposit":{"type":"object","properties":{"mint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint address"}]},"symbol":{"type":"string","description":"Best-effort token symbol from known SQL-backed mint metadata, or UNKNOWN when unavailable","example":"SOL"},"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount"}]},"value":{"type":["string","null"],"example":"1234.56789","description":"Current USD value for this token row"},"price":{"type":["string","null"],"example":"1234.56789","description":"Current token price in USD"},"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Resolved KLend reserve address backing this token row"}]},"maxLtv":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Maximum loan-to-value ratio for the reserve as a fraction, adjusted for the obligation's elevation group"}]},"liquidationLtv":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Liquidation loan-to-value threshold for the reserve as a fraction, adjusted for the obligation's elevation group"}]}},"required":["mint","symbol","amount","value","price","maxLtv","liquidationLtv"]},"PortfolioLendingBorrow":{"type":"object","properties":{"mint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint address"}]},"symbol":{"type":"string","description":"Best-effort token symbol from known SQL-backed mint metadata, or UNKNOWN when unavailable","example":"SOL"},"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount"}]},"value":{"type":["string","null"],"example":"1234.56789","description":"Current USD value for this token row"},"price":{"type":["string","null"],"example":"1234.56789","description":"Current token price in USD"},"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Resolved KLend reserve address backing this token row"}]},"borrowFactor":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Borrow factor for the reserve as a fraction (e.g. 1.25); 1 when an elevation group is active"}]}},"required":["mint","symbol","amount","value","price","borrowFactor"]},"PortfolioMultiplyPosition":{"type":"object","properties":{"obligation":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Obligation address"}]},"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Lending market address"}]},"tag":{"type":"string","enum":["Vanilla","Lending","LendingFixedRate","Multiply","MultiplyFixedRate","Leverage","LeverageFixedRate"],"description":"Obligation type tag","example":"Lending"},"netValue":{"type":["string","null"],"example":"1234.56789","description":"Net account value in USD from refreshed obligation stats"},"totalDepositValue":{"type":["string","null"],"example":"1234.56789","description":"Total deposit value in USD from refreshed obligation stats"},"totalBorrowValue":{"type":["string","null"],"example":"1234.56789","description":"Total borrow value in USD from refreshed obligation stats"},"ltv":{"type":["string","null"],"example":"1234.56789","description":"Current loan-to-value ratio from refreshed obligation stats"},"maxLtv":{"type":["string","null"],"example":"1234.56789","description":"Maximum loan-to-value ratio for the whole obligation from refreshed stats"},"liquidationLtv":{"type":["string","null"],"example":"1234.56789","description":"Liquidation LTV threshold from refreshed obligation stats"},"leverage":{"type":["string","null"],"example":"1234.56789","description":"Current leverage from refreshed obligation stats"},"netApy":{"type":["string","null"],"example":"1234.56789","description":"Current net APY as a signed fraction of equity (deposit value minus borrow value): baseApy + farmRewardsApy + assetYieldApy, from the cached reserve stats refreshed every minute. This is the current rate, not realized APY. Null when a reserve has no cached stats, a deposited or borrowed token whose yield applies to that side has its underlying yield unavailable (reserve stats underlyingApy null with underlyingYieldExpected true), a position has no price, equity is zero or negative, or there are no positions."},"baseApy":{"type":["string","null"],"example":"1234.56789","description":"Lending interest net of borrow cost as a signed fraction of equity: sum of deposit value x supply APY minus borrow value x borrow APY, divided by equity. Null under the same conditions as netApy."},"farmRewardsApy":{"type":["string","null"],"example":"1234.56789","description":"Reserve farm rewards on deposits and borrows plus pair incentives, as a signed fraction of equity. A pair incentive counts only when the obligation holds both its collateral reserve and its debt reserve, and pays on the debt reserve's borrowed value times the collateral reserve's share of total deposit value. Null under the same conditions as netApy."},"assetYieldApy":{"type":["string","null"],"example":"1234.56789","description":"The tokens' own yield (LST staking, yield-bearing tokens) as a signed fraction of equity; borrowing a yield-bearing token contributes negatively. Debt in a token whose yield is paid to suppliers rather than accrued by the token (USDe) contributes 0. Null under the same conditions as netApy."},"deposits":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioLendingDeposit"}},"borrows":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioLendingBorrow"}},"depositMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Primary deposit token mint used for this multiply position"}]},"borrowMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Primary borrow token mint used for this multiply position"}]}},"required":["obligation","market","tag","netValue","totalDepositValue","totalBorrowValue","ltv","maxLtv","liquidationLtv","leverage","netApy","baseApy","farmRewardsApy","assetYieldApy","deposits","borrows"]},"PortfolioLeveragePosition":{"type":"object","properties":{"obligation":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Obligation address"}]},"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Lending market address"}]},"tag":{"type":"string","enum":["Vanilla","Lending","LendingFixedRate","Multiply","MultiplyFixedRate","Leverage","LeverageFixedRate"],"description":"Obligation type tag","example":"Lending"},"netValue":{"type":["string","null"],"example":"1234.56789","description":"Net account value in USD from refreshed obligation stats"},"totalDepositValue":{"type":["string","null"],"example":"1234.56789","description":"Total deposit value in USD from refreshed obligation stats"},"totalBorrowValue":{"type":["string","null"],"example":"1234.56789","description":"Total borrow value in USD from refreshed obligation stats"},"ltv":{"type":["string","null"],"example":"1234.56789","description":"Current loan-to-value ratio from refreshed obligation stats"},"maxLtv":{"type":["string","null"],"example":"1234.56789","description":"Maximum loan-to-value ratio for the whole obligation from refreshed stats"},"liquidationLtv":{"type":["string","null"],"example":"1234.56789","description":"Liquidation LTV threshold from refreshed obligation stats"},"leverage":{"type":["string","null"],"example":"1234.56789","description":"Current leverage from refreshed obligation stats"},"netApy":{"type":["string","null"],"example":"1234.56789","description":"Current net APY as a signed fraction of equity (deposit value minus borrow value): baseApy + farmRewardsApy + assetYieldApy, from the cached reserve stats refreshed every minute. This is the current rate, not realized APY. Null when a reserve has no cached stats, a deposited or borrowed token whose yield applies to that side has its underlying yield unavailable (reserve stats underlyingApy null with underlyingYieldExpected true), a position has no price, equity is zero or negative, or there are no positions."},"baseApy":{"type":["string","null"],"example":"1234.56789","description":"Lending interest net of borrow cost as a signed fraction of equity: sum of deposit value x supply APY minus borrow value x borrow APY, divided by equity. Null under the same conditions as netApy."},"farmRewardsApy":{"type":["string","null"],"example":"1234.56789","description":"Reserve farm rewards on deposits and borrows plus pair incentives, as a signed fraction of equity. A pair incentive counts only when the obligation holds both its collateral reserve and its debt reserve, and pays on the debt reserve's borrowed value times the collateral reserve's share of total deposit value. Null under the same conditions as netApy."},"assetYieldApy":{"type":["string","null"],"example":"1234.56789","description":"The tokens' own yield (LST staking, yield-bearing tokens) as a signed fraction of equity; borrowing a yield-bearing token contributes negatively. Debt in a token whose yield is paid to suppliers rather than accrued by the token (USDe) contributes 0. Null under the same conditions as netApy."},"deposits":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioLendingDeposit"}},"borrows":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioLendingBorrow"}},"depositMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Primary deposit token mint used for this leverage position"}]},"borrowMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Primary borrow token mint used for this leverage position"}]}},"required":["obligation","market","tag","netValue","totalDepositValue","totalBorrowValue","ltv","maxLtv","liquidationLtv","leverage","netApy","baseApy","farmRewardsApy","assetYieldApy","deposits","borrows"]},"PortfolioLiquidityPosition":{"type":"object","properties":{"strategy":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Strategy address"}]},"shareMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Strategy share mint address"}]},"shares":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total strategy shares held directly or staked in farms"}]},"netValue":{"type":["string","null"],"example":"1234.56789","description":"Current net position value in USD"},"tokenA":{"$ref":"#/components/schemas/PortfolioPositionToken"},"tokenB":{"$ref":"#/components/schemas/PortfolioPositionToken"}},"required":["strategy","shareMint","shares","netValue","tokenA","tokenB"]},"PortfolioPositionToken":{"type":"object","properties":{"mint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint address"}]},"symbol":{"type":"string","description":"Best-effort token symbol from known SQL-backed mint metadata, or UNKNOWN when unavailable","example":"SOL"},"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount"}]},"value":{"type":["string","null"],"example":"1234.56789","description":"Current USD value for this token row"},"price":{"type":["string","null"],"example":"1234.56789","description":"Current token price in USD"},"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Resolved KLend reserve address backing this token row"}]}},"required":["mint","symbol","amount","value","price"]},"PortfolioEarnPosition":{"type":"object","properties":{"vault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Vault address"}]},"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Vault underlying token mint"}]},"symbol":{"type":"string","description":"Vault underlying token symbol","example":"USDC"},"name":{"type":"string","description":"Vault display name from resources or decoded vault state","example":"JitoSOL"},"netValue":{"type":["string","null"],"example":"1234.56789","description":"Current position value in USD"},"shares":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Number of shares held"}]},"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Underlying token amount for the position"}]}},"required":["vault","tokenMint","symbol","name","netValue","shares","amount"]},"PortfolioPrivateCreditPosition":{"type":"object","properties":{"vault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Vault address"}]},"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Vault underlying token mint"}]},"symbol":{"type":"string","description":"Vault underlying token symbol","example":"USDC"},"name":{"type":"string","description":"Vault name","example":"Maple USDC"},"netValue":{"type":["string","null"],"example":"1234.56789","description":"Current position value in USD"},"shares":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Number of shares held"}]},"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Underlying token amount for the position"}]}},"required":["vault","tokenMint","symbol","name","netValue","shares","amount"]},"PortfolioStakingPosition":{"type":"object","properties":{"mint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Staked token mint address"}]},"symbol":{"type":"string","description":"Staked token symbol","example":"KMNO"},"farm":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Farm address where the staking position is held"}]},"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount of KMNO staked"}]},"value":{"type":["string","null"],"example":"1234.56789","description":"Current USD value of staked KMNO"},"price":{"type":["string","null"],"example":"1234.56789","description":"Current staked token price in USD"}},"required":["mint","symbol","farm","amount","value","price"]},"PortfolioRewardsResponse":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"Response timestamp as an ISO-8601 string"},"farms":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioFarmReward"}},"partialErrors":{"$ref":"#/components/schemas/PortfolioRewardsPartialErrors"}},"required":["timestamp","farms"]},"PortfolioFarmReward":{"type":"object","properties":{"farm":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Farm address"}]},"userState":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"User state address used for claiming"}]},"delegatee":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Delegatee recorded on the user farm state, used to build claim instructions"}]},"strategy":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Liquidity strategy associated with the farm, when applicable"}]},"vault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"KVault associated with the farm, when applicable"}]},"positionType":{"type":"string","enum":["Liquidity","Lend","Borrow Markets","Multiply","Leverage"],"description":"Farm position type","example":"Lend"},"activeStakeAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Active stake amount in farm"}]},"tokenMints":{"type":"array","items":{"$ref":"#/components/schemas/AddressBase58"},"default":[],"description":"Token mints identifying the position (e.g. tokenA+tokenB for liquidity)"},"rewards":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioRewardToken"}}},"required":["farm","userState","delegatee","positionType","activeStakeAmount","rewards"],"description":"Farm reward row; at most one of strategy or vault is present."},"PortfolioRewardToken":{"type":"object","properties":{"mint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reward token mint"}]},"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Pending reward amount"}]},"index":{"type":"integer","description":"Reward info index on the farm state used for claim instructions","example":0},"type":{"type":"integer","description":"Farm reward type index used by farm rewards accounting","example":0},"tokenProgram":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token program ID for the reward token"}]}},"required":["mint","amount","index","type","tokenProgram"]},"PortfolioRewardsPartialErrors":{"type":"object","properties":{"positionTokenMints":{"type":"array","items":{"type":"string"},"description":"Strategy or vault identifiers whose token mint enrichment could not be resolved"},"seasonFarms":{"type":"array","items":{"type":"string"},"description":"Season farm filter subcomponents that could not be loaded"},"rewardMetadata":{"type":"array","items":{"type":"string"},"description":"Farm reward rows whose SQL metadata was incomplete and could not be returned"}}},"UserHoldingsResponse":{"type":"object","properties":{"tokens":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/UserHolding"}}},"required":["tokens"],"description":"Raw wallet token holdings keyed by mint public key."},"UserHolding":{"type":"object","properties":{"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Raw token balance with mint decimals applied","example":"1.01"}]},"valueUsd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"USD value from the cached Scope or kswap fallback spot price, or null when no price is known","example":"170.25"}},"required":["amount","valueUsd"]},"EarnUserActivityResponse":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/EarnUserActivityItem"}},"paginationToken":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"}},"required":["result"]},"EarnUserActivityItem":{"type":"object","properties":{"timestamp":{"$ref":"#/components/schemas/TransactionDateTime"},"type":{"type":"string","enum":["deposit","withdraw","repaid_manually","auto_repay"],"description":"Activity type"},"source":{"type":"string","enum":["vault","lend"],"description":"Product family that produced the activity"},"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Activity token mint"}]},"symbol":{"type":["string","null"],"description":"Token symbol, or null when metadata is unavailable"},"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Positive token amount"}]},"usdValue":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Positive USD value, or null when no price is available"},"vault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Vault address for vault transactions"}]},"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"KLend market address"}]},"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"KLend reserve address"}]},"obligation":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"KLend obligation address when applicable"}]},"transaction":{"type":"string","description":"Transaction signature","example":"2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v"}},"required":["timestamp","type","source","tokenMint","symbol","amount","usdValue","transaction"]},"EarnUserSummaryResponse":{"type":"object","properties":{"totalUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Known earning and idle USD value across all tokens"}]},"earningUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Known USD value in earning positions"}]},"idleUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Known USD value held idle"}]},"blendedApy":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"USD-weighted APY across all earning positions"},"earnedToDateUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Lifetime vault and lending interest earned in USD for the requested obligation types"}]},"interestEarnedPerSecondUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Current estimated interest earned per second in USD"}]},"tokens":{"type":"array","items":{"$ref":"#/components/schemas/EarnUserTokenSummary"}}},"required":["totalUsd","earningUsd","idleUsd","blendedApy","earnedToDateUsd","interestEarnedPerSecondUsd","tokens"]},"EarnUserTokenSummary":{"type":"object","properties":{"mint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint address"}]},"symbol":{"type":"string","description":"Token symbol"},"decimals":{"type":"integer","minimum":0,"description":"Token mint decimals"},"totalUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Known earning and idle USD value"}]},"earningUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Known USD value held in earning positions"}]},"idleUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Known USD value held idle in the wallet"}]},"tokenAmounts":{"type":"object","properties":{"earning":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Underlying token amount in earning positions"}]},"idle":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Token amount held idle in the wallet"}]}},"required":["earning","idle"]},"blendedApy":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"USD-weighted APY across earning positions"},"bestApy":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Best current live vault APY for this token"},"bestApyVault":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}],"description":"Vault offering the best current APY"},"earnedToDateUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Lifetime vault and lending interest earned in USD for the requested obligation types"}]},"earnedToDateSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Lifetime vault and lending interest earned in SOL for the requested obligation types, valued at the SOL price when it was earned"}]},"positions":{"type":"array","items":{"$ref":"#/components/schemas/EarnPosition"}}},"required":["mint","symbol","decimals","totalUsd","earningUsd","idleUsd","tokenAmounts","blendedApy","bestApy","bestApyVault","earnedToDateUsd","earnedToDateSol","positions"]},"EarnPosition":{"oneOf":[{"$ref":"#/components/schemas/EarnVaultPosition"},{"$ref":"#/components/schemas/EarnReservePosition"}],"discriminator":{"propertyName":"type","mapping":{"vault":"#/components/schemas/EarnVaultPosition","reserve":"#/components/schemas/EarnReservePosition"}}},"EarnVaultPosition":{"type":"object","properties":{"tokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Current underlying token amount"}]},"usd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Current USD value, or null when no price is available"},"apy":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Current position APY, or null when stats are unavailable"},"earnedToDateUsd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Lifetime interest earned in USD, or null when no historian row is available"},"earnedToDateSol":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Lifetime interest earned in SOL, valued at the SOL price when it was earned, or null when no historian row is available"},"shareOfToken":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Share of the token earning USD value, or null when this position has no USD value"},"type":{"type":"string","enum":["vault"]},"vault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Vault address"}]},"name":{"type":"string","description":"Vault display name"},"product":{"type":"string","enum":["earn","privateCredit"],"description":"Vault product, returned only when includePrivateCredit is true"}},"required":["tokenAmount","usd","apy","earnedToDateUsd","earnedToDateSol","shareOfToken","type","vault","name"]},"EarnReservePosition":{"type":"object","properties":{"tokenAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Current underlying token amount"}]},"usd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Current USD value, or null when no price is available"},"apy":{"anyOf":[{"$ref":"#/components/schemas/Apy"},{"type":"null"}],"description":"Current position APY, or null when stats are unavailable"},"earnedToDateUsd":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Lifetime interest earned in USD, or null when no historian row is available"},"earnedToDateSol":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Lifetime interest earned in SOL, valued at the SOL price when it was earned, or null when no historian row is available"},"shareOfToken":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Share of the token earning USD value, or null when this position has no USD value"},"type":{"type":"string","enum":["reserve"]},"market":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"KLend market address"}]},"reserve":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"KLend reserve address"}]},"obligation":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"KLend obligation address"}]},"obligationTag":{"type":"string","enum":["Vanilla","Lending","LendingFixedRate","Multiply","MultiplyFixedRate","Leverage","LeverageFixedRate"],"description":"Portfolio obligation type tag","example":"Lending"}},"required":["tokenAmount","usd","apy","earnedToDateUsd","earnedToDateSol","shareOfToken","type","market","reserve","obligation","obligationTag"]},"EarnUserTokenHistoryResponse":{"type":"array","items":{"$ref":"#/components/schemas/EarnUserTokenHistoryItem"}},"EarnUserTokenHistoryItem":{"type":"object","properties":{"createdOn":{"type":"string","format":"date-time","description":"Bucket timestamp"},"usdAmount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total position value in USD at this bucket"}]},"interestEarnedUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned in USD during this bucket"}]},"solAmount":{"anyOf":[{"$ref":"#/components/schemas/Decimal"},{"type":"null"}],"description":"Total position value in SOL at this bucket, or null when no SOL price is available"},"interestEarnedSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned in SOL during this bucket, valued at the SOL price when it was earned"}]}},"required":["createdOn","usdAmount","interestEarnedUsd","solAmount","interestEarnedSol"]},"EarnUserTokensHistoryResponse":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/EarnUserTokenHistoryResponse"}},"UnderlyingYieldHistoryResponse":{"type":"object","properties":{"mint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Reserve liquidity mint requested by the caller"}]},"sourceType":{"type":"string","enum":["lst","lst-combined","yield-feed"]},"sourceMint":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"null"}],"description":"Mint whose yield series produced the values, or null for a combined LST series"},"history":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"apy":{"$ref":"#/components/schemas/Apy"}},"required":["timestamp","apy"]}}},"required":["mint","sourceType","sourceMint","history"]},"PriceHistoryV2Response":{"type":"object","properties":{"mint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint requested by the caller."}]},"frequency":{"type":"string","enum":["hour","day"],"description":"Bucket frequency. Defaults to hour for a start-to-end range of at most 32 days, otherwise day."},"history":{"type":"array","items":{"$ref":"#/components/schemas/PriceHistoryV2Point"},"description":"Spot prices ordered by bucket start, with one price per bucket. Gaps are possible."}},"required":["mint","frequency","history"]},"PriceHistoryV2Point":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"UTC bucket start, not the observation time."},"price":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Stored spot price in USD, returned without rounding."}]}},"required":["timestamp","price"]},"Distributor":{"type":"object","properties":{"code":{"type":"string","minLength":5,"maxLength":5,"description":"Code the distributor puts in the spl-memo of the transactions it directs","example":"ex4mp"}},"required":["code"]},"DistributorTransactionsResponse":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/DistributorTransaction"}},"paginationToken":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"}},"required":["result"]},"DistributorTransaction":{"type":"object","properties":{"createdOn":{"$ref":"#/components/schemas/TransactionDateTime"},"tx":{"type":"string","description":"Transaction signature","example":"2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v"},"code":{"type":"string","description":"Distributor code carried in the transaction memo","example":"ex4mp"},"type":{"type":"string","enum":["deposit","withdraw"],"description":"Direction of the flow: a deposit into the vault or a withdrawal out of it, whichever instruction made it","example":"deposit"},"instruction":{"type":"string","description":"Kamino Earn vault instruction that moved the tokens","example":"deposit","examples":["deposit","buy","withdraw","withdrawFromAvailable","sell","redeemInKind"]},"wallet":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"vault":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Earn vault the tokens moved into or out of"}]},"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the token mint","example":"So11111111111111111111111111111111111111112","examples":["So11111111111111111111111111111111111111112","EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"]}]},"tokenSymbol":{"type":["string","null"],"description":"Symbol of the underlying token, when known","example":"USDC"},"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount of the underlying token moved, always positive; for redeemInKind the cTokens paid out are converted to the underlying token at the reserve exchange rate at that time"}]}},"required":["createdOn","tx","code","type","instruction","wallet","vault","tokenMint","tokenSymbol","amount"]},"DistributorWalletsResponse":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/DistributorWallet"}},"paginationToken":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"}},"required":["result"]},"DistributorWallet":{"type":"object","properties":{"wallet":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"tokens":{"type":"array","items":{"$ref":"#/components/schemas/DistributorWalletToken"}}},"required":["wallet","tokens"]},"DistributorWalletToken":{"type":"object","properties":{"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the token mint","example":"So11111111111111111111111111111111111111112","examples":["So11111111111111111111111111111111111111112","EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"]}]},"tokenSymbol":{"type":["string","null"],"example":"USDC"},"type":{"type":"string","enum":["deposit","withdraw"],"description":"Direction of the flow: a deposit into the vault or a withdrawal out of it, whichever instruction made it","example":"deposit"},"amount":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total amount of this token the wallet moved in this direction"}]}},"required":["tokenMint","tokenSymbol","type","amount"]}},"parameters":{}},"paths":{"/kamino-market/{pubkey}/metrics/history":{"get":{"summary":"Get KLend Market metrics history","description":"Get historical metrics (TVL and number of obligations) for a Kamino Lending market over a specified time range.","tags":["Kamino Lend Markets"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Market public key","name":"pubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MarketMetricsResponse"}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kamino-market/{marketPubkey}/reserves/{reservePubkey}/metrics/history":{"get":{"summary":"Get KLend reserve history","description":"Get historical metrics for a specific reserve in a Kamino Lending market over a specified time range with configurable frequency (hour or day). Without a frequency, ranges shorter than 32 days are hourly and longer ranges are daily. APYs, amounts and capped available liquidity are means of raw snapshots in each UTC bucket. Other metrics retain the last snapshot.","tags":["Kamino Lend Markets"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend reserve public key","example":"FBSyPnxtHKLBZ4UeeUyAnbtFuAmTHLtso9YtsqRDRWpM"}]},"required":true,"description":"Kamino Lend reserve public key","name":"reservePubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"},{"schema":{"type":"string","enum":["hour","day"],"description":"Frequency of the snapshots. Defaults to hour for ranges shorter than 32 days and day otherwise.","example":"hour"},"required":false,"description":"Frequency of the snapshots. Defaults to hour for ranges shorter than 32 days and day otherwise.","name":"frequency","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kamino-market/{marketPubkey}/reserves/{reservePubkey}/borrow-and-staking-apys/history":{"get":{"summary":"Get KLend reserve borrow APY and staking APY history","description":"Get historical borrow interest APY and staking APY data for reserves that contain LST tokens with staking yield. Used for Multiply underlying APY calculations. Hourly and daily borrow APYs are means of raw snapshots in each UTC bucket.","tags":["Kamino Lend Yield"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend reserve public key","example":"FBSyPnxtHKLBZ4UeeUyAnbtFuAmTHLtso9YtsqRDRWpM"}]},"required":true,"description":"Kamino Lend reserve public key","name":"reservePubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BorrowAndStakingApyResponse"}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kamino-market/{marketPubkey}/reserves/{reservePubkey}/borrow-and-staking-apys/history/median":{"get":{"summary":"Get KLend reserve borrow APY and median staking APY history","description":"Get historical borrow interest APY and median staking APY data for reserves that contain LST tokens with staking yield. Uses median staking APY values. Hourly and daily borrow APYs are means of raw snapshots in each UTC bucket.","tags":["Kamino Lend Yield"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend reserve public key","example":"FBSyPnxtHKLBZ4UeeUyAnbtFuAmTHLtso9YtsqRDRWpM"}]},"required":true,"description":"Kamino Lend reserve public key","name":"reservePubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BorrowAndStakingApyResponse"}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kamino-market/{pubkey}/reserves/metrics":{"get":{"summary":"Get metrics for market reserves","description":"Get current metrics for all reserves in a Kamino Lending market, including APY, TVL, borrow/supply amounts, and LTV ratios.","tags":["Kamino Lend Markets"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Market public key","name":"pubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReserveMetricsResponse"}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kamino-market/{pubkey}/leverage/metrics":{"get":{"summary":"Get metrics for leverage/multiply vaults","description":"Get aggregated metrics for all leverage and multiply positions in a Kamino Lending market, including average leverage, total borrowed, total deposited, and number of obligations.","tags":["Kamino Lend Markets"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Market public key","name":"pubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LeverageMetricsResponse"}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kamino-market/{marketPubkey}/users/{userPubkey}/obligations":{"get":{"summary":"Get all user obligations","description":"Get all obligations (loans) for a specific user wallet in a Kamino Lending market.","tags":["Kamino Lend User Loans"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"User wallet public key","example":"AcNSmd5CxwLs21TYUmhWt7CW2v159TdYRkvQxb1iBYRj"}]},"required":true,"description":"User wallet public key","name":"userPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/kamino-market/reserves/account-data":{"get":{"summary":"Get KLend market reserves account data","description":"Fetch reserve account data for given Klend markets. Returns base64-encoded account data for all reserves in the specified markets.","tags":["Kamino Lend Markets"],"parameters":[{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"name":"programId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"required":true,"name":"markets","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReserveAccountDataResponse"}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/collateral-reserves":{"get":{"summary":"Get collateral reserves with borrowable reserves","description":"Derive one Borrow market row per collateral reserve and debt category from each configured Kamino Lend market.","tags":["Kamino Lend Markets"],"parameters":[{"schema":{"type":"string","description":"Collateral reserve slug or alias","example":"jitosol-sol"},"required":false,"description":"Collateral reserve slug or alias","name":"slug","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Lending market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":false,"description":"Lending market public key","name":"market","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Collateral reserve public key","example":"FBSyPnxtHKLBZ4UeeUyAnbtFuAmTHLtso9YtsqRDRWpM"}]},"required":false,"description":"Collateral reserve public key","name":"collateralReserve","in":"query"},{"schema":{"type":"string","description":"Partner preview alias, case-insensitive. Also returns the Hidden reserves configured for it in resources previewAliases. Unknown or expired aliases return the default response.","example":"partner-preview"},"required":false,"description":"Partner preview alias, case-insensitive. Also returns the Hidden reserves configured for it in resources previewAliases. Unknown or expired aliases return the default response.","name":"preview","in":"query"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketsCollateralReservesResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/multiply-pairs":{"get":{"summary":"Get max leverage per Multiply pair","description":"Return the protocol risk ceiling of every Multiply pair configured in the Kamino CDN, including hidden pairs and pairs in hidden or deprecated markets. Values are raw protocol limits under the elevation group the pair auto-selects, with no safety factor applied.","tags":["Kamino Lend Markets"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Only return pairs configured under this lending market","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":false,"description":"Only return pairs configured under this lending market","name":"market","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketsMultiplyPairsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/batch/metadata":{"get":{"summary":"Get metadata for multiple markets","description":"Get metadata (name, description, curation status, and reserve public keys) for Kamino Lend markets. When market is omitted, all configured markets are returned. The response is keyed by market public key; unknown markets are omitted.","tags":["Kamino Lend Markets"],"parameters":[{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Market public keys, provided as comma-separated or repeated query parameters (max 100); defaults to all configured markets when omitted","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"},"required":false,"description":"Market public keys, provided as comma-separated or repeated query parameters (max 100); defaults to all configured markets when omitted","name":"market","in":"query"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketsBatchMetadataResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/{marketPubkey}/metadata":{"get":{"summary":"Get metadata for a market","description":"Get metadata (name, description, curation status, and reserve public keys) for a single Kamino Lend market.","tags":["Kamino Lend Markets"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketMetadata"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/{marketPubkey}/charts":{"get":{"summary":"Get charts for a market","description":"Get historical total borrowed, total supplied, and obligation counts for a market.","tags":["Kamino Lend Markets"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"},{"schema":{"type":"string","enum":["hour","day"],"default":"hour","description":"Frequency of the snapshots","example":"hour"},"required":false,"description":"Frequency of the snapshots","name":"frequency","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketChartsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/reserves/{reservePubkey}/charts":{"get":{"summary":"Get charts for a reserve","description":"Get the current raw borrow rate curve and historical base supply and borrow APYs for a reserve.","tags":["Kamino Lend Reserves"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend reserve public key","example":"FBSyPnxtHKLBZ4UeeUyAnbtFuAmTHLtso9YtsqRDRWpM"}]},"required":true,"description":"Kamino Lend reserve public key","name":"reservePubkey","in":"path"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"},{"schema":{"type":"string","enum":["hour","day"],"default":"hour","description":"Frequency of the snapshots","example":"hour"},"required":false,"description":"Frequency of the snapshots","name":"frequency","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReserveChartsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/reserves/batch/stats":{"get":{"summary":"Get stats for multiple reserves","description":"Get current raw and cap-aware reserve liquidity, borrowing caps and counters, base APYs with historical averages, underlying token yield and UI-matching APY breakdowns, utilization with historical averages, auto-deleveraging settings, reserve farm rewards, pair-specific incentives, partner points programs and the Scope oracle composition of the price and TWAP chains. Pair-specific incentives and points programs are not included in the APY breakdown totals. Select reserves directly with the reserve query parameter or expand all reserves from lending markets with the market query parameter. The response is keyed by reserve public key; unknown reserves and markets are omitted.","tags":["Kamino Lend Reserves"],"parameters":[{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Reserve public keys, provided as comma-separated or repeated query parameters (max 100)","example":"FBSyPnxtHKLBZ4UeeUyAnbtFuAmTHLtso9YtsqRDRWpM"},"required":false,"description":"Reserve public keys, provided as comma-separated or repeated query parameters (max 100)","name":"reserve","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Lending market public keys whose reserves should be included, provided as comma-separated or repeated query parameters (max 100)","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"},"required":false,"description":"Lending market public keys whose reserves should be included, provided as comma-separated or repeated query parameters (max 100)","name":"market","in":"query"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReservesBatchStatsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/reserves/{reservePubkey}/stats":{"get":{"summary":"Get stats for a reserve","description":"Get current raw and cap-aware reserve liquidity, borrowing caps and counters, base APYs with historical averages, underlying token yield and UI-matching APY breakdowns, utilization with historical averages, auto-deleveraging settings, reserve farm rewards, pair-specific incentives, partner points programs and the Scope oracle composition of the price and TWAP chains for one reserve. Pair-specific incentives and points programs are not included in the APY breakdown totals.","tags":["Kamino Lend Reserves"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend reserve public key","example":"FBSyPnxtHKLBZ4UeeUyAnbtFuAmTHLtso9YtsqRDRWpM"}]},"required":true,"description":"Kamino Lend reserve public key","name":"reservePubkey","in":"path"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReserveStats"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/shareholders/{pubkey}/transactions":{"get":{"operationId":"getLiquidityShareholderTransactions","summary":"Get Liquidity transactions by shareholder wallet address","description":"Get all Kamino Liquidity strategy transactions for a provided shareholder wallet address.","tags":["Kamino Liquidity"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"pubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KaminoLiquidityTransactionsV2Response"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/kamino-market/{marketPubkey}/obligations/{obligationPubkey}/analytics/history":{"get":{"summary":"Get obligation analytics history","description":"Get precomputed position values and signed APY components relative to equity in [start, end). Omit start for full history; end defaults to now. Daily history may end with the latest hourly bucket from today or yesterday when that day is not yet covered by a daily row. Finalized data typically lags by 1-2 hours.","tags":["Kamino Lend User Loans"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend obligation public key","example":"63QrAB1okxCc4FpsgcKYHjYTp1ua8ch6mLReyKRdc22o"}]},"required":true,"description":"Kamino Lend obligation public key","name":"obligationPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"type":"string","enum":["hour","day"],"description":"Auto-selects hour for ranges up to 32 days starting within the last 33 days, otherwise day. Explicit hour requires a start and the same range and lookback limits."},"required":false,"description":"Auto-selects hour for ranges up to 32 days starting within the last 33 days, otherwise day. Explicit hour requires a start and the same range and lookback limits.","name":"frequency","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObligationAnalyticsHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/kamino-market/{marketPubkey}/obligations/{obligationPubkey}/deposits/{reservePubkey}/metrics/history":{"get":{"summary":"Get a KLend deposit position history","description":"Get value, APY, and lifetime cumulative interest snapshots for one reserve deposit in an obligation.","tags":["Kamino Lend Yield"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend obligation public key","example":"63QrAB1okxCc4FpsgcKYHjYTp1ua8ch6mLReyKRdc22o"}]},"required":true,"description":"Kamino Lend obligation public key","name":"obligationPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend reserve public key","example":"FBSyPnxtHKLBZ4UeeUyAnbtFuAmTHLtso9YtsqRDRWpM"}]},"required":true,"description":"Kamino Lend reserve public key","name":"reservePubkey","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendDepositPositionHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/kamino-market/{marketPubkey}/obligations/{obligationPubkey}/interest-fees":{"get":{"summary":"Get stored interest fees earned per obligation","description":"Get historical interest fees earned for a specific obligation from stored cumulative interest snapshots.","tags":["Kamino Lend Yield"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend obligation public key","example":"63QrAB1okxCc4FpsgcKYHjYTp1ua8ch6mLReyKRdc22o"}]},"required":true,"description":"Kamino Lend obligation public key","name":"obligationPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterestRateEarnedResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/kamino-market/{marketPubkey}/obligations/{obligationPubkey}/interest-paid":{"get":{"summary":"Get stored interest fees paid per obligation","description":"Get historical interest fees paid for a specific obligation from stored cumulative interest snapshots.","tags":["Kamino Lend Yield"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend obligation public key","example":"63QrAB1okxCc4FpsgcKYHjYTp1ua8ch6mLReyKRdc22o"}]},"required":true,"description":"Kamino Lend obligation public key","name":"obligationPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterestRatePaidResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/kamino-market":{"get":{"summary":"Get all Kamino Markets config","description":"Get all Kamino Lending markets configuration for a specific program ID. This is the V2 endpoint that allows filtering by program ID instead of cluster.","tags":["Kamino Lend Markets"],"parameters":[{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MarketConfigResponseV2"}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/kamino-market/{pubkey}":{"get":{"summary":"Get Kamino Market config","description":"Get configuration for a specific Kamino Lending market by market address. Optionally filter by program ID.","tags":["Kamino Lend Markets"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Market public key","name":"pubkey","in":"path"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketConfigResponseV2"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/kamino-market/{marketPubkey}/obligations/{obligationPubkey}/pnl":{"get":{"summary":"Get profit and loss for an obligation","description":"Get profit and loss (PnL) for a specific obligation. For xSOL pairs, `useStakeRate` can be set to true to calculate the PnL using the stake rate.","tags":["Kamino Lend User Loans"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend obligation public key","example":"63QrAB1okxCc4FpsgcKYHjYTp1ua8ch6mLReyKRdc22o"}]},"required":true,"description":"Kamino Lend obligation public key","name":"obligationPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"For xSOL pairs, calculate the PnL using the stake rate","example":"true"},"required":false,"description":"For xSOL pairs, calculate the PnL using the stake rate","name":"useStakeRate","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PnlResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why the request could not be processed","example":"The requested calculation is not supported for this asset"}},"required":["error"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/v2/kamino-market/{marketPubkey}/obligations/{obligationPubkey}/pnl/history":{"get":{"summary":"Get profit and loss history for an obligation","description":"Returns transaction and periodic mark-to-market PnL for the current obligation. Snapshots are hourly for positions younger than 32 days and daily otherwise, timestamped at observation time. Periodic points that cannot be valued are omitted. Optional start (inclusive) and end (exclusive) filter the history; totals always describe the current position. For xSOL pairs, useStakeRate uses stake-rate pricing.","tags":["Kamino Lend User Loans"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend obligation public key","example":"63QrAB1okxCc4FpsgcKYHjYTp1ua8ch6mLReyKRdc22o"}]},"required":true,"description":"Kamino Lend obligation public key","name":"obligationPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"For xSOL pairs, calculate the PnL using the stake rate","example":"true"},"required":false,"description":"For xSOL pairs, calculate the PnL using the stake rate","name":"useStakeRate","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendPnlHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why the request could not be processed","example":"The requested calculation is not supported for this asset"}},"required":["error"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/v2/kamino-market/{marketPubkey}/obligations/{obligationPubkey}/interest-fees":{"get":{"deprecated":true,"summary":"Get interest fees earned per obligation","description":"Get historical interest fees earned for a specific obligation. Returns total fees earned and historical fee breakdown by token.","tags":["Kamino Lend Yield"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend obligation public key","example":"63QrAB1okxCc4FpsgcKYHjYTp1ua8ch6mLReyKRdc22o"}]},"required":true,"description":"Kamino Lend obligation public key","name":"obligationPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterestRateEarnedResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/kamino-market/{marketPubkey}/obligations/{obligationPubkey}/interest-paid":{"get":{"deprecated":true,"summary":"Get interest fees paid per obligation","description":"Get historical interest fees paid for a specific obligation. Returns total fees paid and historical fee breakdown by token.","tags":["Kamino Lend Yield"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend obligation public key","example":"63QrAB1okxCc4FpsgcKYHjYTp1ua8ch6mLReyKRdc22o"}]},"required":true,"description":"Kamino Lend obligation public key","name":"obligationPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterestRatePaidResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/kamino-market/{marketPubkey}/obligations/{obligationPubkey}/metrics/history":{"get":{"summary":"Get KLend obligation history","description":"Get historical metrics for a specific obligation in a Kamino Lending market. This V2 endpoint supports using stake rate for obligation value calculation when `useStakeRateForObligation` is true.","tags":["Kamino Lend User Loans"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend obligation public key","example":"63QrAB1okxCc4FpsgcKYHjYTp1ua8ch6mLReyKRdc22o"}]},"required":true,"description":"Kamino Lend obligation public key","name":"obligationPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Use stake rate to calculate net SOL value","example":"true"},"required":false,"description":"Use stake rate to calculate net SOL value","name":"useStakeRateForObligation","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObligationMetricsHistoryResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/kamino-market/{marketPubkey}/obligations/{obligationPubkey}/transactions":{"get":{"summary":"Get obligation transactions","description":"Get all Kamino Lend transactions for a given obligation.","tags":["Kamino Lend Transactions"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend obligation public key","example":"63QrAB1okxCc4FpsgcKYHjYTp1ua8ch6mLReyKRdc22o"}]},"required":true,"description":"Kamino Lend obligation public key","name":"obligationPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"description":"Instruction limit. When set, the response is one keyset page."},"required":false,"description":"Instruction limit. When set, the response is one keyset page.","name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"paginationToken","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Use log prices for transaction values","example":"false"},"required":false,"description":"Use log prices for transaction values","name":"useLogPrices","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","description":"Sort order (asc for oldest first, desc for newest first)","example":"desc"},"required":false,"description":"Sort order (asc for oldest first, desc for newest first)","name":"sort","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Return only instructions in the latest position"},"required":false,"description":"Return only instructions in the latest position","name":"latestPosition","in":"query"}],"responses":{"200":{"description":"OK. Long no-op rollover runs are collapsed. History keeps the newest KLEND_TX_MAX_ROWS instructions (default 10000), plus the latest creation of each obligation. Withdraw-queue history has a separate cap.","headers":{"X-Kamino-Truncated":{"schema":{"type":"string","enum":["true"],"description":"Present when the history cap omitted instructions"},"required":false,"description":"Present when the history cap omitted instructions"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendTransactionsResponseV2"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/kamino-market/users/{userPubkey}/transactions":{"get":{"summary":"Get user transactions across all markets","description":"Get all Kamino Lend transactions for a given user across all markets.","tags":["Kamino Lend Transactions"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"User wallet public key","example":"AcNSmd5CxwLs21TYUmhWt7CW2v159TdYRkvQxb1iBYRj"}]},"required":true,"description":"User wallet public key","name":"userPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","description":"Sort order (asc for oldest first, desc for newest first)","example":"desc"},"required":false,"description":"Sort order (asc for oldest first, desc for newest first)","name":"sort","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Return only instructions in the latest position"},"required":false,"description":"Return only instructions in the latest position","name":"latestPosition","in":"query"}],"responses":{"200":{"description":"OK. Long no-op rollover runs are collapsed. History keeps the newest KLEND_TX_MAX_ROWS instructions (default 10000), plus the latest creation of each obligation. Withdraw-queue history has a separate cap.","headers":{"X-Kamino-Truncated":{"schema":{"type":"string","enum":["true"],"description":"Present when the history cap omitted instructions"},"required":false,"description":"Present when the history cap omitted instructions"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendAllMarketsUserTransactionsResponseV2"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/kamino-market/{marketPubkey}/users/{userPubkey}/transactions":{"get":{"summary":"Get user transactions","description":"Get all Kamino Lend transactions for a given user.","tags":["Kamino Lend Transactions"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"User wallet public key","example":"AcNSmd5CxwLs21TYUmhWt7CW2v159TdYRkvQxb1iBYRj"}]},"required":true,"description":"User wallet public key","name":"userPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","description":"Sort order (asc for oldest first, desc for newest first)","example":"desc"},"required":false,"description":"Sort order (asc for oldest first, desc for newest first)","name":"sort","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Return only instructions in the latest position"},"required":false,"description":"Return only instructions in the latest position","name":"latestPosition","in":"query"}],"responses":{"200":{"description":"OK. Long no-op rollover runs are collapsed. History keeps the newest KLEND_TX_MAX_ROWS instructions (default 10000), plus the latest creation of each obligation. Withdraw-queue history has a separate cap.","headers":{"X-Kamino-Truncated":{"schema":{"type":"string","enum":["true"],"description":"Present when the history cap omitted instructions"},"required":false,"description":"Present when the history cap omitted instructions"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendUserTransactionsResponseV2"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/kamino-market/{pubkey}/transactions":{"post":{"summary":"Get bulk market transactions","description":"Get bulk Kamino Lend transactions for a given market, filtered by instruction name and date range. Private (authorized) API access only, please add a basic auth header to your request.","tags":["Kamino Lend Transactions"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Market public key","name":"pubkey","in":"path"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"},{"schema":{"type":"string","default":"false","description":"Whether to include raw JSON of the transaction","oneOf":[{"type":"string","enum":["1","true","yes","on","y","enabled"]},{"type":"string","enum":["0","false","no","off","n","disabled"]}]},"required":false,"description":"Whether to include raw JSON of the transaction","name":"includeRawJson","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendBulkTxBody"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendBulkTxResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why it was not authorized","example":"Not authorized for this request. Please include the basic auth headers."}},"required":["error"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/kamino-market/users/{userPubkey}/transactions":{"get":{"summary":"Get user transactions across all markets (v3)","description":"Get all Kamino Lend transactions for a given user across all markets, including withdraw-queue transactions.","tags":["Kamino Lend Transactions"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"User wallet public key","example":"AcNSmd5CxwLs21TYUmhWt7CW2v159TdYRkvQxb1iBYRj"}]},"required":true,"description":"User wallet public key","name":"userPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","description":"Sort order (asc for oldest first, desc for newest first)","example":"desc"},"required":false,"description":"Sort order (asc for oldest first, desc for newest first)","name":"sort","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Return only instructions in the latest position"},"required":false,"description":"Return only instructions in the latest position","name":"latestPosition","in":"query"}],"responses":{"200":{"description":"OK. Long no-op rollover runs are collapsed. History keeps the newest KLEND_TX_MAX_ROWS instructions (default 10000), plus the latest creation of each obligation. Withdraw-queue history has a separate cap.","headers":{"X-Kamino-Truncated":{"schema":{"type":"string","enum":["true"],"description":"Present when the history cap omitted instructions"},"required":false,"description":"Present when the history cap omitted instructions"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendAllMarketsUserTransactionsResponseV3"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/kamino-market/{marketPubkey}/users/{userPubkey}/transactions":{"get":{"summary":"Get user transactions (v3)","description":"Get all Kamino Lend transactions for a given user in a market, including withdraw-queue transactions.","tags":["Kamino Lend Transactions"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Lend market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Kamino Lend market public key","name":"marketPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"User wallet public key","example":"AcNSmd5CxwLs21TYUmhWt7CW2v159TdYRkvQxb1iBYRj"}]},"required":true,"description":"User wallet public key","name":"userPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","description":"Sort order (asc for oldest first, desc for newest first)","example":"desc"},"required":false,"description":"Sort order (asc for oldest first, desc for newest first)","name":"sort","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Return only instructions in the latest position"},"required":false,"description":"Return only instructions in the latest position","name":"latestPosition","in":"query"}],"responses":{"200":{"description":"OK. Long no-op rollover runs are collapsed. History keeps the newest KLEND_TX_MAX_ROWS instructions (default 10000), plus the latest creation of each obligation. Withdraw-queue history has a separate cap.","headers":{"X-Kamino-Truncated":{"schema":{"type":"string","enum":["true"],"description":"Present when the history cap omitted instructions"},"required":false,"description":"Present when the history cap omitted instructions"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendUserTransactionsResponseV3"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/kamino-market/{pubkey}/transactions":{"post":{"summary":"Get bulk market transactions (v3)","description":"Get bulk Kamino Lend transactions for a given market, filtered by instruction name and date range. Returns obligation transactions and withdraw-queue transactions as sibling arrays; exactly one is populated per request depending on the ix name. Private (authorized) API access only, please add a basic auth header to your request.","tags":["Kamino Lend Transactions"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Market public key","name":"pubkey","in":"path"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"},{"schema":{"type":"string","description":"Whether to include raw JSON of the transaction. Also accepts other truthy/falsy strings such as \"1\"/\"0\", \"yes\"/\"no\", \"on\"/\"off\".","enum":["true","false"],"default":"false"},"required":false,"description":"Whether to include raw JSON of the transaction. Also accepts other truthy/falsy strings such as \"1\"/\"0\", \"yes\"/\"no\", \"on\"/\"off\".","name":"includeRawJson","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendBulkTxBodyV3"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendBulkTxResponseV3"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why it was not authorized","example":"Not authorized for this request. Please include the basic auth headers."}},"required":["error"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/kamino-market/users/{userPubkey}/transaction-history":{"get":{"summary":"Get paginated user transaction history","description":"Newest first across all markets. Long no-op rollover runs are collapsed. Limits count instructions; all legs of an instruction are returned together.","tags":["Kamino Lend Transactions"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"User wallet public key","example":"AcNSmd5CxwLs21TYUmhWt7CW2v159TdYRkvQxb1iBYRj"}]},"required":true,"description":"User wallet public key","name":"userPubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Instruction limit"},"required":false,"description":"Instruction limit","name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"paginationToken","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Return only instructions in the latest position"},"required":false,"description":"Return only instructions in the latest position","name":"latestPosition","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendTransactionHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/kamino-market/obligations/{pubkey}/borrow-order-fills":{"get":{"summary":"Get borrow order fills for an obligation","description":"Returns the fill history for the active borrow order of an obligation, in chronological order.","tags":["Kamino Lend Borrow Orders"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BorrowOrderFillsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/kamino-market/{pubkey}/obligations-with-open-borrow-orders":{"get":{"summary":"Get all obligations with open borrow orders in a market","description":"Returns all obligations in the given market that have an active (unfilled or partially filled) borrow order.","tags":["Kamino Lend Borrow Orders"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Market public key","example":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"}]},"required":true,"description":"Market public key","name":"pubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObligationsWithOpenBorrowOrdersResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/yields/{yieldSource}/history":{"get":{"summary":"Get yield history","description":"Get historical yield data for a given source, between an optional range of dates (max 366 days). For extra farm yields specify the source as farmAddress-rewardMint.","tags":["Yields"],"parameters":[{"schema":{"type":"string","description":"Yield source identifier. For regular yields use the token mint address. For extra farm yields use the format: farmAddress-rewardMint","example":"AvZZF1YaZDziPY2RCK4oJrRVrbN3mTD9NL24hPeaZeUj","examples":["AvZZF1YaZDziPY2RCK4oJrRVrbN3mTD9NL24hPeaZeUj","FciPo1fpNgStdnVvKT7abcFfyqn2sJijLrNLCkKtbsye-2u1tszSeqZ3qBWF3uNGPFc8TzMk2tdiwknnRMWGWjGWH"]},"required":true,"description":"Yield source identifier. For regular yields use the token mint address. For extra farm yields use the format: farmAddress-rewardMint","name":"yieldSource","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/YieldHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/yields/principal-tokens":{"get":{"summary":"Get principal token yields","description":"Get fresh stored APYs for principal tokens with active Kamino reserves. Each value matches reserve stats `underlyingApy.current` for the same stored snapshot. Sources without a value from the last 48 hours are omitted; matured principal tokens with a fresh zero row report 0.","tags":["Yields"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PtYieldsResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/airdrop/users/{pubkey}/allocations":{"get":{"summary":"Get user airdrop allocations","description":"Fetches airdrop allocation data for a specific user and source (Seasons...)","tags":["Airdrop"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"pubkey","in":"path"},{"schema":{"type":"string","description":"Points source identifier","example":"Season1","examples":["Season1","Season2","Season3","Season4"]},"required":false,"description":"Points source identifier","name":"source","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AirdropAllocation"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/airdrop/metrics":{"get":{"summary":"Get airdrop metrics","description":"Fetches aggregated airdrop metrics and metadata for a specific points source.","tags":["Airdrop"],"parameters":[{"schema":{"type":"string","description":"Points source identifier","example":"Season1","examples":["Season1","Season2","Season3","Season4"]},"required":false,"description":"Points source identifier","name":"source","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AirdropMetrics"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/staking-yields":{"get":{"summary":"Get staking yields","description":"Fetches the latest staking yields for all LSTs","tags":["Staking Yields"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StakingYield"}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/staking-yields/median":{"get":{"summary":"Get median staking yields","description":"Fetches staking yields and calculates median APY over the last 10 epochs","tags":["Staking Yields"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StakingYield"}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/staking-yields/mean":{"get":{"summary":"Get mean staking yields","description":"Fetches staking yields and calculates mean (average) APY over the last 10 epochs","tags":["Staking Yields"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StakingYield"}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/epochs":{"get":{"summary":"Get Solana epochs metadata","description":"Fetches all epoch start and end times, first/last slot numbers, and epoch identifiers","tags":["Other"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Epoch"}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/users/{pubkey}/transactions":{"get":{"summary":"Get user KVault transactions","description":"Get all Kamino Earn Vault transactions for a given user","tags":["Kamino Earn User"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"pubkey","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KVaultInstruction"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}/allocation-transactions":{"get":{"summary":"Get KVault allocation transactions","description":"Get cursor-paginated Kamino Earn Vault allocation transactions. Positive token amounts are reserve deposits and negative amounts are reserve withdrawals.","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"example":100,"description":"Maximum number of allocation transactions to return (1-1000)"},"required":false,"description":"Maximum number of allocation transactions to return (1-1000)","name":"limit","in":"query"},{"schema":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"},"required":false,"description":"Optional pagination token","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultAllocationTransactionsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/transactions":{"post":{"summary":"Bulk get KVault transactions","description":"Bulk get all Kamino Earn Vault transactions with paginated access (max 1000 transactions returned in each response). Private (authorized) API access only, please add a basic auth header to your request.","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"type":"string","default":"KvauGMspG5k6rtzrqqn7WNn3oZdyKqLKwK2XWQ8FLjd","description":"Fetch transactions from this program id"},"required":false,"description":"Fetch transactions from this program id","name":"programId","in":"query"},{"schema":{"type":"string","description":"Whether to include raw JSON of the instruction. Also accepts other truthy/falsy strings such as \"1\"/\"0\", \"yes\"/\"no\", \"on\"/\"off\".","enum":["true","false"],"default":"false"},"required":false,"description":"Whether to include raw JSON of the instruction. Also accepts other truthy/falsy strings such as \"1\"/\"0\", \"yes\"/\"no\", \"on\"/\"off\".","name":"includeRawJson","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"end":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"instruction":{"type":"string","example":"buy","examples":["buy","sell","deposit","withdraw","invest","withdrawAvailable"],"description":"Kvault instruction name"},"paginationToken":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"}},"required":["instruction"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/KvaultBulkTransaction"}},"paginationToken":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token - if not present you have reached the end"}},"required":["result"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why it was not authorized","example":"Not authorized for this request. Please include the basic auth headers."}},"required":["error"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}/transactions":{"post":{"summary":"Get KVault transactions by vault","description":"Get Kamino Earn Vault transactions for a given vault address, one row per instruction. `end` defaults to the current time. Request the next page with `paginationToken` while `hasMore` is true.","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"instruction":{"type":"string","example":"withdraw","description":"Filter by exact instruction name. Combined with `type` when both are set."},"type":{"type":"string","enum":["deposit","withdraw"],"example":"withdraw","description":"Filter by transaction type. `deposit`: buy, buyWithMinSharesOut, deposit, depositWithMinSharesOut. `withdraw`: sell, withdraw, withdrawFromAvailable, redeemInKind."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":1000,"example":100,"description":"Maximum number of transactions to return (1-1000)"},"direction":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Sort order (asc for oldest first, desc for newest first)","example":"desc"},"paginationToken":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Pagination position. Resend the other body fields unchanged when requesting the next page."},"start":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"end":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultVaultTransactionsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}/enqueued-withdraw-transactions":{"get":{"summary":"Get currently queued withdraw-ticket redemptions for a vault","description":"Returns `enqueueToWithdraw` klend transactions that were triggered by a kvault `redeemInKind` on this vault and whose underlying withdraw ticket is still queued on-chain (i.e. has not been fully redeemed or cancelled).","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnqueuedWithdrawTransactionsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}/withdraw-queue":{"get":{"summary":"Get the live withdraw queue of a KVault","description":"Returns the on-chain withdraw queue of every allocation reserve of a Kamino Earn Vault: market ticket flags, queue counters, queued and available liquidity, and the open withdraw tickets of every owner on the reserve, not only those issued through this vault. Fully redeemed tickets are closed on-chain and do not appear; use `/kvaults/vaults/:pubkey/enqueued-withdraw-transactions` for history. `wallet` filters the returned tickets only, `position` and the amounts ahead always count the whole reserve queue. Returns 404 when the vault does not exist.","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Only return tickets owned by this wallet. Queue positions are still computed over every ticket on the reserve."}]},"required":false,"description":"Only return tickets owned by this wallet. Queue positions are still computed over every ticket on the reserve.","name":"wallet","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultWithdrawQueueResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults":{"get":{"summary":"Get all kvaults","description":"Get Kamino Earn Vaults. Omit type for all on-chain vaults. Use live or privateCredit for CDN-listed vaults.","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"anyOf":[{"type":"string","enum":["live","privateCredit"]},{"type":"array","items":{"type":"string","enum":["live","privateCredit"]},"minItems":1}],"description":"Vault types. Multiple values return all vaults matching any of the specified types. Omit this parameter to return all on-chain vaults.","example":"live"},"required":false,"description":"Vault types. Multiple values return all vaults matching any of the specified types. Omit this parameter to return all on-chain vaults.","name":"type","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultStateArray"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}/allocations":{"get":{"summary":"Get current KVault allocations","description":"Get current reserve allocations, utilization, supply APYs, and market collateral for a Kamino Earn Vault","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultAllocationsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/metrics":{"get":{"summary":"Get current metrics for multiple KVaults","description":"Get current Kamino Earn Vault metrics with cursor pagination or an address filter","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"KVault public keys, provided as comma-separated or repeated query parameters (max 100)","example":"VEG1EMtttdHunMbSza8uoms1R18VXmYSph2bBpHcSJd"},"required":false,"description":"KVault public keys, provided as comma-separated or repeated query parameters (max 100)","name":"pubkeys","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"example":100,"description":"Maximum number of vault addresses to inspect (1-100)"},"required":false,"description":"Maximum number of vault addresses to inspect (1-100)","name":"limit","in":"query"},{"schema":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"},"required":false,"description":"Optional pagination token","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultBatchMetricsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/account-data":{"get":{"summary":"Get KVault account data","description":"Fetch base64-encoded account data for Kamino Earn Vaults together with the lending markets, reserves and farms they allocate into, so clients can hydrate SDK objects without any getProgramAccounts calls. Omit the vaults parameter to include every vault; unknown vaults are omitted from the response.","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"KVault public keys, provided as comma-separated or repeated query parameters (max 100). Omit to include every vault.","example":"VEG1EMtttdHunMbSza8uoms1R18VXmYSph2bBpHcSJd"},"required":false,"description":"KVault public keys, provided as comma-separated or repeated query parameters (max 100). Omit to include every vault.","name":"vaults","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultAccountDataResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/batch/stats":{"get":{"summary":"Get stats for multiple KVaults","description":"Get derived stats for Kamino Earn Vaults computed from the current on-chain state: supply APY breakdown (base gross/net, vault farm incentives, reserve farm incentives), per-token vault farm rewards, holdings, share price, utilization, instant liquidity and the per-reserve allocation breakdown. The response is keyed by vault public key; unknown vaults are omitted. Omit the vaults parameter to include every vault.","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"KVault public keys, provided as comma-separated or repeated query parameters (max 100). Omit to include every vault.","example":"VEG1EMtttdHunMbSza8uoms1R18VXmYSph2bBpHcSJd"},"required":false,"description":"KVault public keys, provided as comma-separated or repeated query parameters (max 100). Omit to include every vault.","name":"vaults","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultBatchStatsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}/stats":{"get":{"summary":"Get stats for a KVault","description":"Get derived stats for a Kamino Earn Vault computed from the current on-chain state: supply APY breakdown (base gross/net, vault farm incentives, reserve farm incentives), per-token vault farm rewards, holdings, share price, utilization, instant liquidity and the per-reserve allocation breakdown. Returns 404 when the vault does not exist.","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultStats"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/metrics/history":{"get":{"summary":"Get historical metrics for multiple KVaults","description":"Get historical Kamino Earn Vault metrics for multiple vaults between an optional range of dates. The response is keyed by vault public key; unknown vaults are omitted.","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.","examples":["1970-01-01T00:00:00.000Z",0]},"required":false,"description":"Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"End date of the range (defaults to current time). Accepts ISO string or epoch in ms.","examples":["2025-01-01T00:00:00.000Z",1735689600000]},"required":false,"description":"End date of the range (defaults to current time). Accepts ISO string or epoch in ms.","name":"end","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"KVault public keys, provided as comma-separated or repeated query parameters (max 25)","example":"VEG1EMtttdHunMbSza8uoms1R18VXmYSph2bBpHcSJd"},"required":true,"description":"KVault public keys, provided as comma-separated or repeated query parameters (max 25)","name":"vaults","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultBatchTimeSeriesResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}":{"get":{"summary":"Get KVault by address","description":"Get a single Kamino Earn Vault by the KVault account address","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the vault"}]},"state":{"$ref":"#/components/schemas/The vault state object"},"programId":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the kvault program which owns the vault"}]}},"required":["address","state","programId"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}/holders":{"get":{"summary":"Get the share distribution of a KVault","description":"Get the holders of a Kamino Earn Vault ordered by position size, largest first. Shares held in the wallet and shares staked in the vault farm are reported separately and as a total. Read from the most recent vault state snapshot, whose timestamp and total shares issued are returned alongside the holders so each position can be expressed as a share of the vault. Private (authorized) API access only, please add a basic auth header to your request.","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"example":1000,"description":"Maximum number of holders to return (1-1000)"},"required":false,"description":"Maximum number of holders to return (1-1000)","name":"limit","in":"query"},{"schema":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"},"required":false,"description":"Optional pagination token","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultHoldersResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why it was not authorized","example":"Not authorized for this request. Please include the basic auth headers."}},"required":["error"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}/metrics/history":{"get":{"summary":"Get historical KVault metrics","description":"Get historical Kamino Earn Vault metrics for a given vault, between an optional range of dates","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.","examples":["1970-01-01T00:00:00.000Z",0]},"required":false,"description":"Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"End date of the range (defaults to current time). Accepts ISO string or epoch in ms.","examples":["2025-01-01T00:00:00.000Z",1735689600000]},"required":false,"description":"End date of the range (defaults to current time). Accepts ISO string or epoch in ms.","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"timestamp":{"$ref":"#/components/schemas/SnapshotDateTime"},"tvl":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total Value Locked in token denomination"}]},"solTvl":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Total Value Locked in SOL"}]},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield"}]},"apyTheoretical":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Theoretical Annual Percentage Yield"}]},"apyActual":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Actual Annual Percentage Yield"}]},"apyFarmRewards":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield from Farm Rewards"}]},"apyReservesIncentives":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield from Reserves Incentives"}]},"apyIncentives":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield from Incentives"}]},"sharePrice":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Share Price of the vault"}]},"tokensPerShare":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Vault tokens redeemable per share, in token denomination"}]},"interest":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned in token denomination"}]},"interestUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned in USD"}]},"interestSol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Interest earned in SOL"}]},"reserves":{"type":"array","items":{"type":"object","properties":{"pubkey":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Public key of the reserve"}]},"supplyApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Supply Annual Percentage Yield"}]},"rewardsApy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Rewards Annual Percentage Yield"}]},"allocationRatio":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Allocation Ratio"}]},"rewardTokens":{"type":"array","items":{"type":"object","properties":{"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint address"}]},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield for the reward token"}]}},"required":["tokenMint","apy"]},"description":"List of reward tokens for the reserve"}},"required":["pubkey","supplyApy","rewardsApy","allocationRatio","rewardTokens"]},"description":"List of reserves with rewards"},"vaultRewards":{"type":"array","items":{"type":"object","properties":{"tokenMint":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint address"}]},"apy":{"allOf":[{"$ref":"#/components/schemas/Apy"},{"description":"Annual Percentage Yield for the vault reward token"}]}},"required":["tokenMint","apy"]},"description":"List of vault reward tokens"}},"required":["timestamp","tvl","solTvl","apy","apyTheoretical","apyActual","apyFarmRewards","apyReservesIncentives","apyIncentives","sharePrice","tokensPerShare","interest","interestUsd","interestSol","reserves","vaultRewards"]}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}/metrics":{"get":{"summary":"Get current KVault metrics","description":"Get current Kamino Earn Vault metrics for a given vault","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultMetrics"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}/allocation-volume/history":{"get":{"summary":"Get historical KVault allocation volume","description":"Get historical Kamino Earn Vault allocation volume for a given vault and date range (max 1 year)","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the investment volume data point"},"volumeUsd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Investment volume in USD"}]}},"required":["timestamp","volumeUsd"]},"description":"Array of investment volume data points"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}/returns-comparison":{"get":{"summary":"Compare historical KVault returns","description":"Compare KVault historical returns with SOFR and the DeFi USD benchmark. Benchmark series are forward-filled for up to 7 days and return null beyond that.","tags":["Kamino Earn Vaults"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultReturnsComparisonResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/users/{pubkey}/positions":{"get":{"summary":"Get all user KVault positions","description":"Get a list of user positions for each Kamino Earn Vault the user has currently deposited into. Returns staked and unstaked shares.","tags":["Kamino Earn User"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"pubkey","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultUserPositions"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/users/{userPubkey}/positions/{vaultPubkey}":{"get":{"summary":"Get user position for a specific KVault","description":"Get a single user position for a Kamino Earn Vault the user currently has currently deposited into. Returns staked and unstaked shares.","tags":["Kamino Earn User"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the vault","example":"HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E"}]},"required":true,"description":"Valid base58-encoded address of the vault","name":"vaultPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"userPubkey","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"vaultAddress":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Address of the Kamino Earn Vault"}]},"stakedShares":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"The number of Kamino Earn Vault shares staked in a farm"}]},"unstakedShares":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"The number of Kamino Earn Vault shares held in the user wallet"}]},"totalShares":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"The total number of Kamino Earn Vault shares both held and staked by the user"}]}},"required":["vaultAddress","stakedShares","unstakedShares","totalShares"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/users/{pubkey}/metrics/history":{"get":{"summary":"Get historical user metrics for all KVault positions","description":"Get historical timeseries of total usd/sol/interest/apy for all user Kamino Earn Vault positions","tags":["Kamino Earn User"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"pubkey","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.","examples":["1970-01-01T00:00:00.000Z",0]},"required":false,"description":"Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"End date of the range (defaults to current time). Accepts ISO string or epoch in ms.","examples":["2025-01-01T00:00:00.000Z",1735689600000]},"required":false,"description":"End date of the range (defaults to current time). Accepts ISO string or epoch in ms.","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserKVaultTotal"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/users/{userPubkey}/vaults/{vaultPubkey}/metrics/history":{"get":{"summary":"Get historical user metrics for a single KVault","description":"Get historical timeseries for one vault position. Automatic selection picks minute rows for ranges up to 2 days, hourly rows for ranges under 32 days, and daily rows otherwise, returning finer rows for positions younger than those windows, measured from the first resampled bucket. frequency=minute is limited to ranges of at most 32 days. frequency=day&view=chart returns only UTC daily bucket timestamps, USD balances and cumulative USD interest. The newest daily bucket may be partial; use the summary endpoint for the latest balance. Open-ended histories can be up to five minutes plus processing time old.","tags":["Kamino Earn User"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the vault","example":"HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E"}]},"required":true,"description":"Valid base58-encoded address of the vault","name":"vaultPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"userPubkey","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.","examples":["1970-01-01T00:00:00.000Z",0]},"required":false,"description":"Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"End date of the range (defaults to current time). Accepts ISO string or epoch in ms.","examples":["2025-01-01T00:00:00.000Z",1735689600000]},"required":false,"description":"End date of the range (defaults to current time). Accepts ISO string or epoch in ms.","name":"end","in":"query"},{"schema":{"type":"string","enum":["minute","hour","day"],"description":"Snapshot frequency; defaults to automatic selection"},"required":false,"description":"Snapshot frequency; defaults to automatic selection","name":"frequency","in":"query"},{"schema":{"type":"string","enum":["full","chart"],"default":"full","description":"Chart view requires daily frequency"},"required":false,"description":"Chart view requires daily frequency","name":"view","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserKvaultHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/users/{userPubkey}/vaults/{vaultPubkey}/pnl":{"get":{"summary":"Get user KVault PnL","description":"Get current PnL and cost basis of user vault position","tags":["Kamino Earn User"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the vault","example":"HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E"}]},"required":true,"description":"Valid base58-encoded address of the vault","name":"vaultPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"userPubkey","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultPnl"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/users/{userPubkey}/vaults/{vaultPubkey}/pnl/history":{"get":{"summary":"Get user KVault PnL history","description":"Get PnL and cost basis history of user vault position","tags":["Kamino Earn User"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the vault","example":"HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E"}]},"required":true,"description":"Valid base58-encoded address of the vault","name":"vaultPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"userPubkey","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000]},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000]},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"history":{"type":"array","items":{"$ref":"#/components/schemas/KvaultPnlTimeseriesValue"}},"totalPnl":{"$ref":"#/components/schemas/KvaultMultiValue"},"totalCostBasis":{"$ref":"#/components/schemas/KvaultMultiValue"}},"required":["history","totalPnl","totalCostBasis"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/slots/duration":{"get":{"summary":"Get median Solana slot duration","description":"Fetches the median duration of a recent Solana slot (in milliseconds) from the last three epochs","tags":["Other"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlotDuration"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/owners/{pubkey}/net-values/history":{"get":{"operationId":"getOwnerNetValuesHistory","summary":"Get owner net value history","description":"Fetches the historical USD values for an owner across all Kamino products — Lending, Strategies, Vaults, and Staking.","tags":["Other"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"pubkey","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.","examples":["1970-01-01T00:00:00.000Z",0]},"required":false,"description":"Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"End date of the range (defaults to current time). Accepts ISO string or epoch in ms.","examples":["2025-01-01T00:00:00.000Z",1735689600000]},"required":false,"description":"End date of the range (defaults to current time). Accepts ISO string or epoch in ms.","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnerNetValueHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/owners/{pubkey}/net-values/history/filtered":{"get":{"operationId":"getOwnerNetValuesFilteredHistory","summary":"Get filtered owner net value history","description":"USD interval net revenue of selected products; distinct from Multiply SOL-basis earnings at /owners/{wallet}/multiply/pnl.","tags":["Other"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"pubkey","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"required":false,"name":"products","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"required":false,"name":"obligationTypes","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnerNetValueFilteredHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/owners/{pubkey}/multiply/pnl":{"get":{"operationId":"getWalletMultiplyPnl","summary":"Get lifetime wallet Multiply earnings","description":"Cumulative native earnings over Multiply and MultiplyFixedRate lifecycles. Controlled by an off, internal, or on gate. The generation parameter is internal-only.","tags":["Multiply"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"pubkey","in":"path"},{"schema":{"type":"string"},"required":false,"name":"positionsCursor","in":"query"},{"schema":{"type":"integer","exclusiveMinimum":0,"description":"Internal validation only"},"required":false,"description":"Internal validation only","name":"generation","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"wallet":"Api479WaLLetG1111111111111111111111111111111","accountingVersion":2,"generation":4797,"status":"complete","reasons":[],"coverage":{"start":"2026-04-30","computedThrough":"2026-09-28T23:59:00Z","marksFinalThrough":"2026-09-28","projectionRefreshedOn":"2026-09-29T19:00:00Z","oldestIncludedProjection":null,"lifecycles":{"total":1,"complete":1,"partial":0,"unavailable":0,"open":0,"closed":1,"typeUnknown":0,"missingCreate":0}},"earnings":{"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":"300","valuation":{"solUsdPrice":"200","priceObservedAt":"2026-09-29T19:00:00Z","solUsdRepricing":true}},"partialSubtotal":null,"earningsByType":{"Multiply":{"status":"complete","reasons":[],"lstSolPnlSol":"0","otherPairsPnlUsd":"0","earningsUsd":"0","partialSubtotal":null,"lifecycles":0},"MultiplyFixedRate":{"status":"complete","reasons":[],"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":"300","partialSubtotal":null,"lifecycles":1}},"positions":[{"obligation":"Api479EarnobG1111111111111111111111111111111","lifecycle":1,"market":"Api479Market11111111111111111111111111111111","type":"MultiplyFixedRate","denomination":"lst_sol","status":"complete","reasons":[],"open":false,"createdOn":"2026-04-30T12:00:00Z","closedOn":"2026-05-01T12:00:00Z","pnlSol":"1.5","pnlUsd":null,"asOf":"2026-05-01T12:00:00Z","aligned":true}],"positionsCursor":null},"schema":{"type":"object","properties":{"wallet":{"$ref":"#/components/schemas/AddressBase58"},"accountingVersion":{"type":"number"},"generation":{"type":"number"},"status":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}},"coverage":{"type":"object","properties":{"start":{"type":["string","null"]},"computedThrough":{"type":"string"},"marksFinalThrough":{"type":["string","null"]},"projectionRefreshedOn":{"type":["string","null"]},"oldestIncludedProjection":{"type":["string","null"]},"lifecycles":{"type":"object","properties":{"total":{"type":"number"},"complete":{"type":"number"},"partial":{"type":"number"},"unavailable":{"type":"number"},"open":{"type":"number"},"closed":{"type":"number"},"typeUnknown":{"type":"number"},"missingCreate":{"type":"number"}},"required":["total","complete","partial","unavailable","open","closed","typeUnknown","missingCreate"]}},"required":["start","computedThrough","marksFinalThrough","projectionRefreshedOn","oldestIncludedProjection","lifecycles"]},"earnings":{"type":"object","properties":{"lstSolPnlSol":{"type":["string","null"],"description":"Native SOL earnings of LST/SOL lifecycles"},"otherPairsPnlUsd":{"type":["string","null"],"description":"Native USD earnings of other pairs"},"earningsUsd":{"type":["string","null"],"description":"SOL earnings converted at the stated SOL/USD price plus USD earnings"},"valuation":{"type":"object","properties":{"solUsdPrice":{"type":["string","null"]},"priceObservedAt":{"type":["string","null"]},"solUsdRepricing":{"type":"boolean","enum":[true]}},"required":["solUsdPrice","priceObservedAt","solUsdRepricing"]}},"required":["lstSolPnlSol","otherPairsPnlUsd","earningsUsd","valuation"]},"partialSubtotal":{"type":["object","null"],"properties":{"lstSolPnlSol":{"type":["string","null"],"description":"Native SOL earnings of LST/SOL lifecycles"},"otherPairsPnlUsd":{"type":["string","null"],"description":"Native USD earnings of other pairs"},"earningsUsd":{"type":["string","null"],"description":"SOL earnings converted at the stated SOL/USD price plus USD earnings"}},"required":["lstSolPnlSol","otherPairsPnlUsd","earningsUsd"],"description":"Labelled sum of computable lifecycles when complete totals are unavailable"},"earningsByType":{"type":"object","properties":{"Multiply":{"type":"object","properties":{"lstSolPnlSol":{"type":["string","null"],"description":"Native SOL earnings of LST/SOL lifecycles"},"otherPairsPnlUsd":{"type":["string","null"],"description":"Native USD earnings of other pairs"},"earningsUsd":{"type":["string","null"],"description":"SOL earnings converted at the stated SOL/USD price plus USD earnings"},"status":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}},"partialSubtotal":{"type":["object","null"],"properties":{"lstSolPnlSol":{"type":["string","null"],"description":"Native SOL earnings of LST/SOL lifecycles"},"otherPairsPnlUsd":{"type":["string","null"],"description":"Native USD earnings of other pairs"},"earningsUsd":{"type":["string","null"],"description":"SOL earnings converted at the stated SOL/USD price plus USD earnings"}},"required":["lstSolPnlSol","otherPairsPnlUsd","earningsUsd"],"description":"Labelled sum of computable lifecycles when complete totals are unavailable"},"lifecycles":{"type":"integer"}},"required":["lstSolPnlSol","otherPairsPnlUsd","earningsUsd","status","reasons","partialSubtotal","lifecycles"]},"MultiplyFixedRate":{"type":"object","properties":{"lstSolPnlSol":{"type":["string","null"],"description":"Native SOL earnings of LST/SOL lifecycles"},"otherPairsPnlUsd":{"type":["string","null"],"description":"Native USD earnings of other pairs"},"earningsUsd":{"type":["string","null"],"description":"SOL earnings converted at the stated SOL/USD price plus USD earnings"},"status":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}},"partialSubtotal":{"type":["object","null"],"properties":{"lstSolPnlSol":{"type":["string","null"],"description":"Native SOL earnings of LST/SOL lifecycles"},"otherPairsPnlUsd":{"type":["string","null"],"description":"Native USD earnings of other pairs"},"earningsUsd":{"type":["string","null"],"description":"SOL earnings converted at the stated SOL/USD price plus USD earnings"}},"required":["lstSolPnlSol","otherPairsPnlUsd","earningsUsd"],"description":"Labelled sum of computable lifecycles when complete totals are unavailable"},"lifecycles":{"type":"integer"}},"required":["lstSolPnlSol","otherPairsPnlUsd","earningsUsd","status","reasons","partialSubtotal","lifecycles"]}},"required":["Multiply","MultiplyFixedRate"],"description":"Both obligation types are always present"},"positions":{"type":"array","items":{"type":"object","properties":{"obligation":{"$ref":"#/components/schemas/AddressBase58"},"lifecycle":{"type":"number"},"market":{"$ref":"#/components/schemas/AddressBase58"},"type":{"type":"string","enum":["Multiply","MultiplyFixedRate"]},"denomination":{"type":"string","enum":["lst_sol","usd"]},"status":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}},"open":{"type":"boolean"},"createdOn":{"type":"string"},"closedOn":{"type":["string","null"]},"pnlSol":{"type":["string","null"]},"pnlUsd":{"type":["string","null"]},"asOf":{"type":["string","null"]},"aligned":{"type":"boolean"}},"required":["obligation","lifecycle","market","type","denomination","status","reasons","open","createdOn","closedOn","pnlSol","pnlUsd","asOf","aligned"]}},"positionsCursor":{"type":["string","null"]}},"required":["wallet","accountingVersion","generation","status","reasons","coverage","earnings","partialSubtotal","earningsByType","positions","positionsCursor"],"examples":[{"wallet":"Api479WaLLetG1111111111111111111111111111111","accountingVersion":2,"generation":4797,"status":"complete","reasons":[],"coverage":{"start":"2026-04-30","computedThrough":"2026-09-28T23:59:00Z","marksFinalThrough":"2026-09-28","projectionRefreshedOn":"2026-09-29T19:00:00Z","oldestIncludedProjection":null,"lifecycles":{"total":1,"complete":1,"partial":0,"unavailable":0,"open":0,"closed":1,"typeUnknown":0,"missingCreate":0}},"earnings":{"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":"300","valuation":{"solUsdPrice":"200","priceObservedAt":"2026-09-29T19:00:00Z","solUsdRepricing":true}},"partialSubtotal":null,"earningsByType":{"Multiply":{"status":"complete","reasons":[],"lstSolPnlSol":"0","otherPairsPnlUsd":"0","earningsUsd":"0","partialSubtotal":null,"lifecycles":0},"MultiplyFixedRate":{"status":"complete","reasons":[],"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":"300","partialSubtotal":null,"lifecycles":1}},"positions":[{"obligation":"Api479EarnobG1111111111111111111111111111111","lifecycle":1,"market":"Api479Market11111111111111111111111111111111","type":"MultiplyFixedRate","denomination":"lst_sol","status":"complete","reasons":[],"open":false,"createdOn":"2026-04-30T12:00:00Z","closedOn":"2026-05-01T12:00:00Z","pnlSol":"1.5","pnlUsd":null,"asOf":"2026-05-01T12:00:00Z","aligned":true}],"positionsCursor":null},{"wallet":"Api479WaLLetG1111111111111111111111111111111","accountingVersion":2,"generation":4797,"status":"complete","reasons":[],"coverage":{"start":null,"computedThrough":"2026-09-28T23:59:00Z","marksFinalThrough":"2026-09-28","projectionRefreshedOn":"2026-09-29T19:00:00Z","oldestIncludedProjection":null,"lifecycles":{"total":0,"complete":0,"partial":0,"unavailable":0,"open":0,"closed":0,"typeUnknown":0,"missingCreate":0}},"earnings":{"lstSolPnlSol":"0","otherPairsPnlUsd":"0","earningsUsd":"0","valuation":{"solUsdPrice":"200","priceObservedAt":"2026-09-29T19:00:00Z","solUsdRepricing":true}},"partialSubtotal":null,"earningsByType":{"Multiply":{"status":"complete","reasons":[],"lstSolPnlSol":"0","otherPairsPnlUsd":"0","earningsUsd":"0","partialSubtotal":null,"lifecycles":0},"MultiplyFixedRate":{"status":"complete","reasons":[],"lstSolPnlSol":"0","otherPairsPnlUsd":"0","earningsUsd":"0","partialSubtotal":null,"lifecycles":0}},"positions":[],"positionsCursor":null},{"wallet":"Api479WaLLetG1111111111111111111111111111111","accountingVersion":2,"generation":4797,"status":"partial","reasons":["fee_unknown"],"coverage":{"start":"2026-04-30","computedThrough":"2026-09-28T23:59:00Z","marksFinalThrough":"2026-09-28","projectionRefreshedOn":"2026-09-29T19:00:00Z","oldestIncludedProjection":null,"lifecycles":{"total":2,"complete":1,"partial":1,"unavailable":0,"open":0,"closed":1,"typeUnknown":0,"missingCreate":0}},"earnings":{"lstSolPnlSol":null,"otherPairsPnlUsd":null,"earningsUsd":null,"valuation":{"solUsdPrice":"200","priceObservedAt":"2026-09-29T19:00:00Z","solUsdRepricing":true}},"partialSubtotal":{"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":"300"},"earningsByType":{"Multiply":{"status":"partial","reasons":["fee_unknown"],"lstSolPnlSol":null,"otherPairsPnlUsd":null,"earningsUsd":null,"partialSubtotal":{"lstSolPnlSol":"0","otherPairsPnlUsd":"0","earningsUsd":"0"},"lifecycles":1},"MultiplyFixedRate":{"status":"complete","reasons":[],"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":"300","partialSubtotal":null,"lifecycles":1}},"positions":[{"obligation":"Api479EarnobG1111111111111111111111111111111","lifecycle":1,"market":"Api479Market11111111111111111111111111111111","type":"MultiplyFixedRate","denomination":"lst_sol","status":"complete","reasons":[],"open":false,"createdOn":"2026-04-30T12:00:00Z","closedOn":"2026-05-01T12:00:00Z","pnlSol":"1.5","pnlUsd":null,"asOf":"2026-05-01T12:00:00Z","aligned":true},{"obligation":"Api479EarnobA1111111111111111111111111111111","lifecycle":1,"market":"Api479Market11111111111111111111111111111111","type":"Multiply","denomination":"lst_sol","status":"partial","reasons":["fee_unknown"],"open":false,"createdOn":"2026-04-30T12:00:00Z","closedOn":"2026-05-01T12:00:00Z","pnlSol":"0","pnlUsd":null,"asOf":"2026-05-01T12:00:00Z","aligned":true}],"positionsCursor":null},{"wallet":"Api479WaLLetG1111111111111111111111111111111","accountingVersion":2,"generation":4797,"status":"unavailable","reasons":["discovery_unknown"],"coverage":{"start":"2026-04-30","computedThrough":"2026-09-28T23:59:00Z","marksFinalThrough":"2026-09-28","projectionRefreshedOn":"2026-09-29T19:00:00Z","oldestIncludedProjection":null,"lifecycles":{"total":1,"complete":1,"partial":0,"unavailable":0,"open":0,"closed":1,"typeUnknown":0,"missingCreate":1}},"earnings":{"lstSolPnlSol":null,"otherPairsPnlUsd":null,"earningsUsd":null,"valuation":{"solUsdPrice":"200","priceObservedAt":"2026-09-29T19:00:00Z","solUsdRepricing":true}},"partialSubtotal":{"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":"300"},"earningsByType":{"Multiply":{"status":"unavailable","reasons":["discovery_unknown"],"lstSolPnlSol":null,"otherPairsPnlUsd":null,"earningsUsd":null,"partialSubtotal":{"lstSolPnlSol":"0","otherPairsPnlUsd":"0","earningsUsd":"0"},"lifecycles":0},"MultiplyFixedRate":{"status":"unavailable","reasons":["discovery_unknown"],"lstSolPnlSol":null,"otherPairsPnlUsd":null,"earningsUsd":null,"partialSubtotal":{"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":"300"},"lifecycles":1}},"positions":[{"obligation":"Api479EarnobG1111111111111111111111111111111","lifecycle":1,"market":"Api479Market11111111111111111111111111111111","type":"MultiplyFixedRate","denomination":"lst_sol","status":"complete","reasons":[],"open":false,"createdOn":"2026-04-30T12:00:00Z","closedOn":"2026-05-01T12:00:00Z","pnlSol":"1.5","pnlUsd":null,"asOf":"2026-05-01T12:00:00Z","aligned":true}],"positionsCursor":null},{"wallet":"Api479WaLLetG1111111111111111111111111111111","accountingVersion":2,"generation":4797,"status":"partial","reasons":["price_missing"],"coverage":{"start":"2026-04-30","computedThrough":"2026-09-28T23:59:00Z","marksFinalThrough":"2026-09-28","projectionRefreshedOn":"2026-09-29T19:00:00Z","oldestIncludedProjection":null,"lifecycles":{"total":1,"complete":1,"partial":0,"unavailable":0,"open":0,"closed":1,"typeUnknown":0,"missingCreate":0}},"earnings":{"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":null,"valuation":{"solUsdPrice":null,"priceObservedAt":null,"solUsdRepricing":true}},"partialSubtotal":{"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":null},"earningsByType":{"Multiply":{"status":"complete","reasons":[],"lstSolPnlSol":"0","otherPairsPnlUsd":"0","earningsUsd":"0","partialSubtotal":null,"lifecycles":0},"MultiplyFixedRate":{"status":"partial","reasons":["price_missing"],"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":null,"partialSubtotal":{"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":null},"lifecycles":1}},"positions":[{"obligation":"Api479EarnobG1111111111111111111111111111111","lifecycle":1,"market":"Api479Market11111111111111111111111111111111","type":"MultiplyFixedRate","denomination":"lst_sol","status":"complete","reasons":[],"open":false,"createdOn":"2026-04-30T12:00:00Z","closedOn":"2026-05-01T12:00:00Z","pnlSol":"1.5","pnlUsd":null,"asOf":"2026-05-01T12:00:00Z","aligned":true}],"positionsCursor":null}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why it was not authorized","example":"Not authorized for this request. Please include the basic auth headers."}},"required":["error"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/owners/{pubkey}/multiply/pnl/history":{"get":{"operationId":"getWalletMultiplyPnlHistory","summary":"Get cumulative wallet Multiply earnings history","description":"UTC cumulative daily or ISO-week points. The generation parameter is internal-only. Controlled by an off, internal, or on gate.","tags":["Multiply"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"pubkey","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000]},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000]},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"},{"schema":{"type":"string","enum":["day","week"]},"required":false,"name":"frequency","in":"query"},{"schema":{"type":"integer","exclusiveMinimum":0,"description":"Internal validation only"},"required":false,"description":"Internal validation only","name":"generation","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"wallet":"Api479WaLLetG1111111111111111111111111111111","accountingVersion":2,"generation":4797,"frequency":"day","coverage":{"start":"2026-04-30","computedThrough":"2026-09-28T23:59:00Z","marksFinalThrough":"2026-09-28","projectionRefreshedOn":"2026-09-29T19:00:00Z"},"points":[{"day":"2026-09-28","lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":"301.5","solUsdPrice":"201","status":"complete","reasons":[],"partialSubtotal":null,"lifecycles":{"included":1,"partial":0,"unavailable":0},"byType":{"Multiply":{"status":"complete","reasons":[],"lstSolPnlSol":"0","otherPairsPnlUsd":"0","earningsUsd":"0","partialSubtotal":null,"lifecycles":0},"MultiplyFixedRate":{"status":"complete","reasons":[],"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":"301.5","partialSubtotal":null,"lifecycles":1}}}]},"schema":{"type":"object","properties":{"wallet":{"$ref":"#/components/schemas/AddressBase58"},"accountingVersion":{"type":"number"},"generation":{"type":"number"},"frequency":{"type":"string","enum":["day","week"]},"coverage":{"type":"object","properties":{"start":{"type":["string","null"]},"computedThrough":{"type":"string"},"marksFinalThrough":{"type":["string","null"]},"projectionRefreshedOn":{"type":["string","null"]},"oldestIncludedProjection":{"type":["string","null"]},"lifecycles":{"type":"object","properties":{"total":{"type":"number"},"complete":{"type":"number"},"partial":{"type":"number"},"unavailable":{"type":"number"},"open":{"type":"number"},"closed":{"type":"number"},"typeUnknown":{"type":"number"},"missingCreate":{"type":"number"}},"required":["total","complete","partial","unavailable","open","closed","typeUnknown","missingCreate"]}},"required":["start","computedThrough","marksFinalThrough","projectionRefreshedOn"]},"points":{"type":"array","items":{"type":"object","properties":{"lstSolPnlSol":{"type":["string","null"],"description":"Native SOL earnings of LST/SOL lifecycles"},"otherPairsPnlUsd":{"type":["string","null"],"description":"Native USD earnings of other pairs"},"earningsUsd":{"type":["string","null"],"description":"SOL earnings converted at the stated SOL/USD price plus USD earnings"},"day":{"type":"string","description":"Final included UTC day; Sundays for complete ISO weeks"},"solUsdPrice":{"type":["string","null"]},"status":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}},"partialSubtotal":{"type":["object","null"],"properties":{"lstSolPnlSol":{"type":["string","null"],"description":"Native SOL earnings of LST/SOL lifecycles"},"otherPairsPnlUsd":{"type":["string","null"],"description":"Native USD earnings of other pairs"},"earningsUsd":{"type":["string","null"],"description":"SOL earnings converted at the stated SOL/USD price plus USD earnings"}},"required":["lstSolPnlSol","otherPairsPnlUsd","earningsUsd"],"description":"Labelled sum of computable lifecycles when complete totals are unavailable"},"lifecycles":{"type":"object","properties":{"included":{"type":"number"},"partial":{"type":"number"},"unavailable":{"type":"number"}},"required":["included","partial","unavailable"]},"byType":{"type":"object","properties":{"Multiply":{"type":"object","properties":{"lstSolPnlSol":{"type":["string","null"],"description":"Native SOL earnings of LST/SOL lifecycles"},"otherPairsPnlUsd":{"type":["string","null"],"description":"Native USD earnings of other pairs"},"earningsUsd":{"type":["string","null"],"description":"SOL earnings converted at the stated SOL/USD price plus USD earnings"},"status":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}},"partialSubtotal":{"type":["object","null"],"properties":{"lstSolPnlSol":{"type":["string","null"],"description":"Native SOL earnings of LST/SOL lifecycles"},"otherPairsPnlUsd":{"type":["string","null"],"description":"Native USD earnings of other pairs"},"earningsUsd":{"type":["string","null"],"description":"SOL earnings converted at the stated SOL/USD price plus USD earnings"}},"required":["lstSolPnlSol","otherPairsPnlUsd","earningsUsd"],"description":"Labelled sum of computable lifecycles when complete totals are unavailable"},"lifecycles":{"type":"integer"}},"required":["lstSolPnlSol","otherPairsPnlUsd","earningsUsd","status","reasons","partialSubtotal","lifecycles"]},"MultiplyFixedRate":{"type":"object","properties":{"lstSolPnlSol":{"type":["string","null"],"description":"Native SOL earnings of LST/SOL lifecycles"},"otherPairsPnlUsd":{"type":["string","null"],"description":"Native USD earnings of other pairs"},"earningsUsd":{"type":["string","null"],"description":"SOL earnings converted at the stated SOL/USD price plus USD earnings"},"status":{"type":"string","enum":["complete","partial","unavailable"]},"reasons":{"type":"array","items":{"type":"string"}},"partialSubtotal":{"type":["object","null"],"properties":{"lstSolPnlSol":{"type":["string","null"],"description":"Native SOL earnings of LST/SOL lifecycles"},"otherPairsPnlUsd":{"type":["string","null"],"description":"Native USD earnings of other pairs"},"earningsUsd":{"type":["string","null"],"description":"SOL earnings converted at the stated SOL/USD price plus USD earnings"}},"required":["lstSolPnlSol","otherPairsPnlUsd","earningsUsd"],"description":"Labelled sum of computable lifecycles when complete totals are unavailable"},"lifecycles":{"type":"integer"}},"required":["lstSolPnlSol","otherPairsPnlUsd","earningsUsd","status","reasons","partialSubtotal","lifecycles"]}},"required":["Multiply","MultiplyFixedRate"],"description":"Both obligation types are always present"}},"required":["lstSolPnlSol","otherPairsPnlUsd","earningsUsd","day","solUsdPrice","status","reasons","partialSubtotal","lifecycles","byType"]}}},"required":["wallet","accountingVersion","generation","frequency","coverage","points"],"examples":[{"wallet":"Api479WaLLetG1111111111111111111111111111111","accountingVersion":2,"generation":4797,"frequency":"day","coverage":{"start":"2026-04-30","computedThrough":"2026-09-28T23:59:00Z","marksFinalThrough":"2026-09-28","projectionRefreshedOn":"2026-09-29T19:00:00Z"},"points":[{"day":"2026-09-28","lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":"301.5","solUsdPrice":"201","status":"complete","reasons":[],"partialSubtotal":null,"lifecycles":{"included":1,"partial":0,"unavailable":0},"byType":{"Multiply":{"status":"complete","reasons":[],"lstSolPnlSol":"0","otherPairsPnlUsd":"0","earningsUsd":"0","partialSubtotal":null,"lifecycles":0},"MultiplyFixedRate":{"status":"complete","reasons":[],"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":"301.5","partialSubtotal":null,"lifecycles":1}}}]},{"wallet":"Api479WaLLetG1111111111111111111111111111111","accountingVersion":2,"generation":4797,"frequency":"day","coverage":{"start":"2026-04-30","computedThrough":"2026-09-28T23:59:00Z","marksFinalThrough":"2026-09-28","projectionRefreshedOn":"2026-09-29T19:00:00Z"},"points":[{"day":"2026-09-28","lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":null,"solUsdPrice":null,"status":"partial","reasons":["price_missing"],"partialSubtotal":{"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":null},"lifecycles":{"included":1,"partial":0,"unavailable":0},"byType":{"Multiply":{"status":"complete","reasons":[],"lstSolPnlSol":"0","otherPairsPnlUsd":"0","earningsUsd":"0","partialSubtotal":null,"lifecycles":0},"MultiplyFixedRate":{"status":"partial","reasons":["price_missing"],"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":null,"partialSubtotal":{"lstSolPnlSol":"1.5","otherPairsPnlUsd":"0","earningsUsd":null},"lifecycles":1}}}]}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why it was not authorized","example":"Not authorized for this request. Please include the basic auth headers."}},"required":["error"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/kamino-swap/users/{pubkey}/transactions":{"get":{"operationId":"getSwapTransactionsHistory","summary":"Get Swap transactions by user wallet address","description":"Get the Swap transaction history for a provided user wallet address, with optional limit and offset.","tags":["Kamino Swap"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"pubkey","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum number of transactions to return (1-1000)","example":100},"required":false,"description":"Maximum number of transactions to return (1-1000)","name":"limit","in":"query"},{"schema":{"type":"integer","minimum":0,"description":"Number of transactions to skip","example":0},"required":false,"description":"Number of transactions to skip","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/mints/{pubkey}/metadata":{"get":{"summary":"Get metadata for KVault token","description":"Get metadata for a given Kamino Earn Vault receipt token mint","tags":["Kamino Earn Vault Metadata"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the token"},"symbol":{"type":"string","description":"The symbol of the token"},"description":{"type":"string","description":"A description of the token"},"image":{"type":"string","format":"uri","description":"A URL pointing to an image of the token"}},"required":["name","symbol","description","image"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/mints/{pubkey}/metadata/image.svg":{"get":{"summary":"Get icon for KVault token","description":"Get the SVG icon for a given Kamino Earn Vault receipt token mint","tags":["Kamino Earn Vault Metadata"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"}],"responses":{"200":{"description":"OK","content":{"image/svg+xml":{"schema":{"type":"string","description":"SVG markup string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/luts/find-minimal":{"post":{"summary":"Find Lookup Tables for addresses","description":"Finds the smallest set of Lookup Table (LUT) addresses that together cover all the provided Solana addresses. Optionally verifies active LUTs on-chain.","tags":["Lookup Tables"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindLutsForAddresses"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FoundLuts"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/luts/managed":{"get":{"summary":"Get managed LUTs for a product","description":"Returns active lookup table addresses associated with a given product identifier address.","tags":["Lookup Tables"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"The product identifier address to look up LUTs for","example":"6KhEbVjFg8bNkpTSyEfGJhMGtv2bRQiAKKbKZLPvrBFm"}]},"required":true,"description":"The product identifier address to look up LUTs for","name":"productIdentifierAddress","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagedLutResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/luts/managed/batch":{"get":{"summary":"Get managed LUTs for multiple products","description":"Returns active lookup table addresses for multiple product identifier addresses in a single request.","tags":["Lookup Tables"],"parameters":[{"schema":{"anyOf":[{"$ref":"#/components/schemas/AddressBase58"},{"type":"array","items":{"$ref":"#/components/schemas/AddressBase58"},"minItems":1,"maxItems":50}],"description":"One or more product identifier addresses","example":"6KhEbVjFg8bNkpTSyEfGJhMGtv2bRQiAKKbKZLPvrBFm"},"required":true,"description":"One or more product identifier addresses","name":"productIdentifierAddress","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagedLutBatchResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/luts/managed/product-type/{productType}":{"get":{"summary":"Get managed LUTs by product type","description":"Returns all active lookup table addresses grouped by product for a given product type.","tags":["Lookup Tables"],"parameters":[{"schema":{"$ref":"#/components/schemas/LutProductType"},"required":true,"description":"The type of product associated with a managed lookup table","name":"productType","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagedLutByTypeResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/luts/managed/new-vault":{"post":{"summary":"Register a new vault with its on-chain LUT","description":"Verifies the vault and LUT exist on-chain, then registers the vault product and LUT entry. Private (authorized) API access only, please add a basic auth header to your request.","tags":["Lookup Tables"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vaultAddress":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Vault account address","example":"6KhEbVjFg8bNkpTSyEfGJhMGtv2bRQiAKKbKZLPvrBFm"}]},"lutAddress":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Lookup table address","example":"3Kz4sMiBCxg7JdCCjwRTHtFsQRqJCSKh5pVERhPfMzYF"}]}},"required":["vaultAddress","lutAddress"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewVaultResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why it was not authorized","example":"Not authorized for this request. Please include the basic auth headers."}},"required":["error"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/users/{pubkey}/rewards":{"get":{"summary":"Get season user rewards","description":"Get user season points rewards for each Kamino Earn Vault which the user has invested in","tags":["Kamino Earn User"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"string","description":"Points source identifier","example":"Season1","examples":["Season1","Season2","Season3","Season4"]},"required":false,"description":"Points source identifier","name":"source","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultUserRewardMetrics"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/rewards":{"get":{"summary":"Get all KVault season rewards","description":"Get all active season points rewards for each Kamino Earn Vault","tags":["Season Rewards"],"parameters":[{"schema":{"type":"string","description":"Points source identifier","example":"Season1","examples":["Season1","Season2","Season3","Season4"]},"required":false,"description":"Points source identifier","name":"source","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvaultRewardMetrics"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/users/{pubkey}/staking-boosts":{"get":{"summary":"Get user staking boosts","description":"Fetches staking boost multipliers for a specific user","tags":["Season Rewards"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"string","description":"Points source identifier","example":"Season1","examples":["Season1","Season2","Season3","Season4"]},"required":false,"description":"Points source identifier","name":"source","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StakingBoost"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/klend/users/{pubkey}/rewards":{"get":{"summary":"Get user KLend rewards","description":"Fetches KLend reward data for a specific user and points source","tags":["Kamino Lend Yield"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"string","description":"Points source identifier","example":"Season1","examples":["Season1","Season2","Season3","Season4"]},"required":false,"description":"Points source identifier","name":"source","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendUserRewardMetrics"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/klend/rewards":{"get":{"summary":"Get KLend rewards","description":"Fetches all active KLend reward metrics for a specific points source","tags":["Kamino Lend Yield"],"parameters":[{"schema":{"type":"string","description":"Points source identifier","example":"Season1","examples":["Season1","Season2","Season3","Season4"]},"required":false,"description":"Points source identifier","name":"source","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendRewardMetrics"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/klend/{depositReservePubkey}/{borrowReservePubkey}/rewards/history":{"get":{"summary":"Get KLend reward history","description":"Fetches historical KLend reward metrics for a specific deposit and borrow reserve pair","tags":["Kamino Lend Yield"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Deposit reserve public key"}]},"required":true,"description":"Deposit reserve public key","name":"depositReservePubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Borrow reserve public key"}]},"required":true,"description":"Borrow reserve public key","name":"borrowReservePubkey","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"},{"schema":{"type":"string","enum":["hour","day"],"description":"Frequency of historical data aggregation","example":"hour","examples":["hour","day"]},"required":false,"description":"Frequency of historical data aggregation","name":"frequency","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlendRewardHistory"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/klend/loans/{pubkey}":{"get":{"summary":"Get information about a loan (obligation)","description":"Fetches information about a loan","tags":["Kamino Lend User Loans"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoanInfo"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why the request could not be processed","example":"The requested calculation is not supported for this asset"}},"required":["error"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/kvaults/private-credit/metrics":{"get":{"summary":"Get private credit metrics","description":"Returns current aggregate metrics and active loans for private credit vaults","tags":["Private Credit"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":false,"description":"Valid base58-encoded address","name":"kvault","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateCreditMetricsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/private-credit/metrics/history":{"get":{"summary":"Get private credit metrics history","description":"Returns timeseries of private credit metrics. Frequency is automatically selected based on date range.","tags":["Private Credit"],"parameters":[{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.","examples":["1970-01-01T00:00:00.000Z",0]},"required":false,"description":"Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"End date of the range (defaults to current time). Accepts ISO string or epoch in ms.","examples":["2025-01-01T00:00:00.000Z",1735689600000]},"required":false,"description":"End date of the range (defaults to current time). Accepts ISO string or epoch in ms.","name":"end","in":"query"},{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":false,"description":"Valid base58-encoded address","name":"kvault","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateCreditHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/summary":{"get":{"summary":"Get summary of the KVault program earnings","description":"Get an aggregated all-time summary of all Kamino Earn Vault rewards and interest earned, in SOL and USD","tags":["Season Rewards"],"parameters":[{"schema":{"type":"string","enum":["default","private-credit"],"default":"default","description":"Type of vaults queried","example":"default"},"required":false,"description":"Type of vaults queried","name":"type","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"earnings":{"type":"object","properties":{"interest":{"type":"object","properties":{"usd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount in USD denomination"}]},"sol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount in SOL denomination"}]}},"required":["usd","sol"],"description":"Earnings from interest"},"rewards":{"type":"object","properties":{"usd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount in USD denomination"}]},"sol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount in SOL denomination"}]}},"required":["usd","sol"],"description":"Earnings from vault farm rewards"},"reserveRewards":{"type":"object","properties":{"usd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount in USD denomination"}]},"sol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount in SOL denomination"}]}},"required":["usd","sol"],"description":"Earnings from reserve rewards"},"total":{"type":"object","properties":{"usd":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount in USD denomination"}]},"sol":{"allOf":[{"$ref":"#/components/schemas/Decimal"},{"description":"Amount in SOL denomination"}]}},"required":["usd","sol"],"description":"Total earnings"}},"required":["interest","rewards","reserveRewards","total"],"description":"Earnings summary"}},"required":["earnings"],"description":"KVault Summary Data"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/season-rewards/users/{pubkey}":{"get":{"summary":"Get user season rewards","description":"Fetches combined season reward data from both KLend and KVault for a specific user","tags":["Season Rewards"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"string","description":"Points source identifier","example":"Season1","examples":["Season1","Season2","Season3","Season4"]},"required":false,"description":"Points source identifier","name":"source","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeasonUserReward"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/season-rewards/users/{pubkey}/claim-status":{"get":{"summary":"Get user season claim status","description":"Fetches season reward claim and forfeiture data for a specific user","tags":["Season Rewards"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"string","description":"Points source identifier","example":"Season1","examples":["Season1","Season2","Season3","Season4"]},"required":false,"description":"Points source identifier","name":"source","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeasonUserClaimStatus"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/season-rewards/final-vesting-pool":{"get":{"summary":"Get final vesting pool allocation","description":"Total rewards forfeited to the final vesting pool by users who claimed before full vesting","tags":["Season Rewards"],"parameters":[{"schema":{"type":"string","description":"Points source identifier","example":"Season1","examples":["Season1","Season2","Season3","Season4"]},"required":false,"description":"Points source identifier","name":"source","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeasonFinalVestingPoolAllocation"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/oracles/prices":{"get":{"summary":"Get Kamino oracle prices","description":"Fetches all oracle prices for all public Klend Market assets","tags":["Other"],"parameters":[{"schema":{"type":"string","enum":["main","all"],"default":"main","description":"Controls which market set to query. 'main': select oracle prices from SOL/BTC Market assets, 'all': select oracle prices from all public klend market assets.","example":"main"},"required":false,"description":"Controls which market set to query. 'main': select oracle prices from SOL/BTC Market assets, 'all': select oracle prices from all public klend market assets.","name":"markets","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/OraclePrices"},{"type":"array","items":{"$ref":"#/components/schemas/OracleMarketPrices"}}]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/farms/users/{pubkey}/transactions":{"get":{"summary":"Get user farms transactions","description":"Get all farms program transactions for a given user (with pagination).","tags":["Farms"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Valid base58-encoded address of the user wallet","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"Valid base58-encoded address of the user wallet","name":"pubkey","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"example":100,"description":"Maximum number of results to return (1-1000)"},"required":false,"description":"Maximum number of results to return (1-1000)","name":"limit","in":"query"},{"schema":{"type":"string","example":"eyJsYXN0SWQiOiIxMjM0In0=","description":"Token for fetching the next page of results"},"required":false,"description":"Token for fetching the next page of results","name":"paginationToken","in":"query"},{"schema":{"type":"string","example":false,"description":"When true, returns all transactions without pagination"},"required":false,"description":"When true, returns all transactions without pagination","name":"noPagination","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","description":"Sort order (asc for oldest first, desc for newest first)","example":"desc"},"required":false,"description":"Sort order (asc for oldest first, desc for newest first)","name":"sort","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/FarmsInstruction"}},"paginationToken":{"type":"string","description":"Token for fetching the next page. Absent when no more results."}},"required":["result"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/farms/{farmPubkey}/transactions":{"get":{"summary":"Get farm transactions","description":"Get transactions for a specific farm (with pagination).","tags":["Farms"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Farm public key"}]},"required":true,"description":"Farm public key","name":"farmPubkey","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"example":100,"description":"Maximum number of results to return (1-1000)"},"required":false,"description":"Maximum number of results to return (1-1000)","name":"limit","in":"query"},{"schema":{"type":"string","example":"eyJsYXN0SWQiOiIxMjM0In0=","description":"Token for fetching the next page of results"},"required":false,"description":"Token for fetching the next page of results","name":"paginationToken","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Sort order (asc for oldest first, desc for newest first)","example":"desc"},"required":false,"description":"Sort order (asc for oldest first, desc for newest first)","name":"sort","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/FarmTransaction"}},"paginationToken":{"type":"string","description":"Token for fetching the next page. Absent when no more results."}},"required":["result"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/farms/{farmPubkey}/management-history":{"get":{"summary":"Get farm management history","description":"Get management instructions for a specific farm (with pagination).","tags":["Farms"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Farm public key"}]},"required":true,"description":"Farm public key","name":"farmPubkey","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"example":100,"description":"Maximum number of results to return (1-1000)"},"required":false,"description":"Maximum number of results to return (1-1000)","name":"limit","in":"query"},{"schema":{"type":"string","example":"eyJsYXN0SWQiOiIxMjM0In0=","description":"Token for fetching the next page of results"},"required":false,"description":"Token for fetching the next page of results","name":"paginationToken","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Sort order (asc for oldest first, desc for newest first)","example":"desc"},"required":false,"description":"Sort order (asc for oldest first, desc for newest first)","name":"sort","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/FarmManagementInstruction"}},"paginationToken":{"type":"string","description":"Token for fetching the next page. Absent when no more results."}},"required":["result"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/benchmark-rates/usd":{"get":{"summary":"Get USD benchmark lending rates","description":"Returns USD benchmark lending rates aggregated across multiple protocols. Data is sourced from Allez and cached. Supports filtering by date range and downsampling by frequency.","tags":["Other"],"parameters":[{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"},{"schema":{"type":"string","enum":["hour","day"],"default":"hour","description":"Data frequency/granularity. Defaults to hour.","example":"hour"},"required":false,"description":"Data frequency/granularity. Defaults to hour.","name":"frequency","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkRatesResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/benchmark-rates/sofr/history":{"get":{"summary":"Get SOFR rate history","description":"Returns daily SOFR rates published by the New York Fed from 2023 onwards, including the compounded SOFR index and 30/90/180-day compounded averages. The rate can be null for the latest date because the index is published one business day ahead of the rate. Supports filtering by date range (whole days, inclusive).","tags":["Other"],"parameters":[{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SofrRateHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/portfolio/{pubkey}":{"get":{"operationId":"getPortfolio","summary":"Get portfolio source data for a wallet","description":"Returns source position rows across Kamino products (lending, multiply, leverage, liquidity, earn, private credit, staking). Portfolio totals, counts, fees, historical PnL, and display-only rollups are intentionally left to client composition or their dedicated endpoints. After a transaction, pass minSlot to read a portfolio that includes it.","tags":["Portfolio"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Confirmed slot the response must include, usually the slot the caller's transaction confirmed at. The request waits until every section in `sections` has an appliedSlot at or above it, for up to 10 seconds, and the response is never cached. After the wait the current portfolio is returned, so compare sections.*.appliedSlot with minSlot.","example":465455609},"required":false,"description":"Confirmed slot the response must include, usually the slot the caller's transaction confirmed at. The request waits until every section in `sections` has an appliedSlot at or above it, for up to 10 seconds, and the response is never cached. After the wait the current portfolio is returned, so compare sections.*.appliedSlot with minSlot.","name":"minSlot","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Sections that must reach minSlot, comma-separated. Defaults to every section. Ignored without minSlot. Allowed values: lending, multiply, leverage, liquidity, earn, privateCredit, staking.","example":"multiply"},"required":false,"description":"Sections that must reach minSlot, comma-separated. Defaults to every section. Ignored without minSlot. Allowed values: lending, multiply, leverage, liquidity, earn, privateCredit, staking.","name":"sections","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"timestamp":"2026-06-12T11:16:12.657Z","sections":{"lending":{"indexed":true,"positionsRefreshedOn":"2026-06-11T23:14:19.969Z","pricesRefreshedOn":"2026-06-12T11:12:29.057Z","appliedSlot":454526593,"errors":[]},"multiply":{"indexed":true,"positionsRefreshedOn":"2026-06-11T23:13:54.680Z","pricesRefreshedOn":"2026-06-12T11:12:29.057Z","appliedSlot":454526593,"errors":[]},"leverage":{"indexed":true,"positionsRefreshedOn":"2026-06-11T23:14:00.518Z","pricesRefreshedOn":"2026-06-12T11:12:29.057Z","appliedSlot":454526593,"errors":[]},"liquidity":{"indexed":true,"positionsRefreshedOn":"2026-06-11T23:11:53.211Z","pricesRefreshedOn":"2026-06-11T23:14:24.861Z","appliedSlot":454526593,"errors":[]},"earn":{"indexed":true,"positionsRefreshedOn":"2026-06-11T23:12:29.633Z","pricesRefreshedOn":"2026-06-12T11:12:29.057Z","appliedSlot":454526593,"errors":[]},"privateCredit":{"indexed":true,"positionsRefreshedOn":"2026-06-11T23:12:29.846Z","pricesRefreshedOn":"2026-06-12T11:12:29.057Z","appliedSlot":454526593,"errors":[]},"staking":{"indexed":true,"positionsRefreshedOn":"2026-06-11T23:04:34.002Z","pricesRefreshedOn":"2026-06-12T11:12:29.057Z","appliedSlot":454526593,"errors":[]}},"lending":[{"obligation":"HpAQMFgpSJ3XZWEXtSQgJmuL3Fd8QepJSG79csgq3hoB","market":"5wJeMrUYECGq41fxRESKALVcHnNX26TAWy4W98yULsua","tag":"Vanilla","netValue":"262.00710654164595037","totalDepositValue":"491.89391304710577576","totalBorrowValue":"229.88680650545982539","ltv":"0.4673503786241097951","maxLtv":"0.5727335057760832411","liquidationLtv":"0.63241141170317723635","leverage":"1.8774067602205262589","netApy":"-0.0446","baseApy":"-0.057","farmRewardsApy":"0.0124","assetYieldApy":"0","deposits":[{"mint":"XsoCS1TfEyfFhfvj8EtZ528L3CaKBDBRqRapnBbDF2W","symbol":"SPYx","amount":"0.16082255065800625522","value":"119.1703926699327137","price":"741.005488237479553","reserve":"UvXjBuC7YZYaGB9Rn1PpBD1GySmjzunXgE8Zev9ua8d","maxLtv":"0.73","liquidationLtv":"0.75"}],"borrows":[{"mint":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","symbol":"USDC","amount":"229.95449131043213799","value":"229.88680650545982539","price":"0.99970566","reserve":"97zoywd8mPZsGTg8q1wdD2Wgkdrs2tqusp1Qqcxbyj7E","borrowFactor":"1"}]}],"multiply":[{"obligation":"2JsWdyxA15WodMBzRY5uNUJDvL71xm9NwfMj6qdYi3SC","market":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF","tag":"Multiply","netValue":"39.032947857306441512","totalDepositValue":"124.32509095187057771","totalBorrowValue":"85.292143094564136198","ltv":"0.68604126843215345899","maxLtv":"0.87000000000000000002","liquidationLtv":"0.91999999999999999997","leverage":"3.1851319917308934971","netApy":"0.141793","baseApy":"-0.118591","farmRewardsApy":"0.0215","assetYieldApy":"0.238884","deposits":[{"mint":"J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn","symbol":"JitoSOL","amount":"1.4488817124626824571","value":"124.32509095187057771","price":"85.807619685221685924","reserve":"EVbyPKrHG6WBfm4dLxLMJpUDY43cCAcHSpV3KYjKsktW","maxLtv":"0.87","liquidationLtv":"0.92"}],"borrows":[{"mint":"So11111111111111111111111111111111111111112","symbol":"SOL","amount":"1.276825076608483649","value":"85.292143094564136198","price":"66.80017855","reserve":"d4A2prbA2whesmvHaL88BH6Ewn5N4bTSU2Ze8P6Bc4Q","borrowFactor":"1"}],"depositMint":"J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn","borrowMint":"So11111111111111111111111111111111111111112"}],"leverage":[{"obligation":"VgtvJ1iCDAb65pWbwhvX33X6CWMWMdrYRABEhNTJ9xq","market":"7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF","tag":"Leverage","netValue":"8.774498333310038026","totalDepositValue":"23.724451929066735492","totalBorrowValue":"14.949953595756697466","ltv":"0.6301495874575001704","maxLtv":"0.75","liquidationLtv":"0.80000000000000000002","leverage":"2.7037958214663046734","netApy":"-0.116562","baseApy":"-0.116562","farmRewardsApy":"0","assetYieldApy":"0","deposits":[{"mint":"7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs","symbol":"ETH","amount":"0.014174648995927885562","value":"23.724451929066735492","price":"1673.72412085","reserve":"febGYTnFX4GbSGoFHFeJXUHgNaK53fB23uDins9Jp1E","maxLtv":"0.75","liquidationLtv":"0.8"}],"borrows":[{"mint":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","symbol":"USDC","amount":"14.954355260684127232","value":"14.949953595756697466","price":"0.99970566","reserve":"D6q6wuQSrifJKZYpR1M8R4YawnLDtDsMmWM1NbBmgJ59","borrowFactor":"1"}],"depositMint":"7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs","borrowMint":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}],"liquidity":[{"strategy":"HBuYwvq67VKnLyKxPzDjzskyRMk7ps39gwHdvaPGwdmQ","shareMint":"7XB1azPg9hmD196uiGNa61EyvXbCmQhg8jSdptRGkRTZ","shares":"216.673457","netValue":"26.383693978132575086","tokenA":{"mint":"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN","symbol":"JUP","amount":"54.602417609162028891","value":"9.1141301646553401798","price":"0.16691807"},"tokenB":{"mint":"bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1","symbol":"bSOL","amount":"0.19898556021252914791","value":"17.269563813477234906","price":"86.788025196563257466"}}],"earn":[{"vault":"7cYGMEwQKhdYdugAyQBEqtwG6KhHyuEDcgUrdfGaV6qV","tokenMint":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","symbol":"USDC","name":"Core+ USDC Vault","netValue":"102.43833649457444653","shares":"97.742099","amount":"102.46849707200261978"}],"privateCredit":[{"vault":"91b1opzHNUQobfLZxGMNYT5qDRKoqV8FdsdQBmH4wBxy","tokenMint":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","symbol":"USDC","name":"Kamino Institutional USDC","netValue":"10.357873888364687946","shares":"10","amount":"10.360923522594328361"}],"staking":[{"mint":"KMNo3nJsBXfcpJTVhZcXLW7RmTwTt4GVFE7suUBo9sS","symbol":"KMNO","farm":"2sFZDpBn4sA42uNbAD6QzQ98rPSmqnPyksYe6SJKVvay","amount":"1700.2533519964832604","value":"30.92680935374059216","price":"0.01818953"}]},"schema":{"$ref":"#/components/schemas/PortfolioResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/portfolio/{pubkey}/rewards":{"get":{"operationId":"getPortfolioRewards","summary":"Get pending farm rewards for a wallet","description":"Returns pending farm reward source rows across Kamino products. USD reward totals are composed on the client from price data.","tags":["Portfolio"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"},{"schema":{"type":"string","pattern":"^\\d+(,\\d+)*$","description":"Comma-separated farm reward types to include. Defaults to 0,1 to match portfolio webapp rewards.","example":"0,1"},"required":false,"description":"Comma-separated farm reward types to include. Defaults to 0,1 to match portfolio webapp rewards.","name":"rewardTypes","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"timestamp":"2026-06-12T11:16:12.684Z","farms":[{"farm":"A9nKRhBPVdQ2QDfzMkhpZzsAimCt59wSKxpo36bzhDiU","userState":"JBhXSh6Zb5TPi8g6rsTpNjmuet4V7YGGtU3daou9Y2qs","delegatee":"ARygwR6WBPvatQ2bBrSyytsyBgqrRDwxEuANWSSydfXW","strategy":"HBuYwvq67VKnLyKxPzDjzskyRMk7ps39gwHdvaPGwdmQ","positionType":"Liquidity","activeStakeAmount":"216.673457","tokenMints":["JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN","bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1"],"rewards":[{"mint":"BLZEEuZUBVqFhj8adcCFPJvPVCiCyVmh3hkJMrU8KuJA","amount":"59.765598641","index":0,"type":0,"tokenProgram":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}]},{"farm":"9hUeaxTE3UsRFVt46NPDszSGW76gqDwK743SvJvjYUiY","userState":"HkPCNqo1FRo41oiCwG8Kjsg664Jamsv8TE9kU7bqVP5S","delegatee":"5CVMEG7NSdEDVTPiz8efwL6zbXYSVEpkHovf54n2bvoZ","vault":"NSSESC5s9Mk7uhUg7hdRiEeNaz7FQmZveJseF62Zjbc","positionType":"Lend","activeStakeAmount":"0","tokenMints":["CASHx9KJUStyftLFWGvEVf59SGeG9sh5FfcnZMVPCASH"],"rewards":[{"mint":"CASHx9KJUStyftLFWGvEVf59SGeG9sh5FfcnZMVPCASH","amount":"0.446532","index":0,"type":0,"tokenProgram":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}]},{"farm":"3Dsn7mXKCxQ54QxDtogFsGqgMhhgWnVtN5MGLHvowh3E","userState":"F8vs1tNCEdsvHB9ZgYCNRNnb2CbmDULEfQ68A6ZXHvwm","delegatee":"51rLRu3pvps8vWHVt6uSBeRgQ2UJgCPsw5TEdGsQSKkA","positionType":"Borrow Markets","activeStakeAmount":"0","tokenMints":[],"rewards":[{"mint":"CASHx9KJUStyftLFWGvEVf59SGeG9sh5FfcnZMVPCASH","amount":"0.003248","index":0,"type":1,"tokenProgram":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"}]}]},"schema":{"$ref":"#/components/schemas/PortfolioRewardsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/user/{walletPubkey}/holdings":{"get":{"operationId":"getUserHoldings","summary":"Get raw token holdings for a wallet","description":"Returns raw SPL Token, Token-2022, and native SOL holdings keyed by mint. Native SOL is reported under the wrapped SOL mint and summed with any wrapped SOL token-account balance. Holdings are priced from cached Scope spot prices with kswap fallback prices when Scope has no price; valueUsd is null when neither source has a price. When minValueUsd is set, holdings below the threshold and unpriced holdings are excluded. Returns 422 when the wallet has too many token accounts to list.","tags":["User"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"User wallet public key","example":"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"}]},"required":true,"description":"User wallet public key","name":"walletPubkey","in":"path"},{"schema":{"type":["number","null"],"minimum":0,"description":"Minimum USD value to include. When set, holdings below the threshold and holdings without a known price are excluded.","example":0.01},"required":false,"description":"Minimum USD value to include. When set, holdings below the threshold and holdings without a known price are excluded.","name":"minValueUsd","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserHoldingsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why the request could not be processed","example":"The requested calculation is not supported for this asset"}},"required":["error"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/earn/users/{userPubkey}/activity":{"get":{"summary":"Get a wallet earn activity feed","description":"Get cursor-paginated vault and filtered lending deposits, direct and withdraw-queue withdrawals, and repayments. Lending obligations that owe debt now are left out with their whole history.","tags":["Earn"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"User wallet address"}]},"required":true,"description":"User wallet address","name":"userPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Only return activity for this token mint"}]},"required":false,"description":"Only return activity for this token mint","name":"tokenMint","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Only return activity for this vault"}]},"required":false,"description":"Only return activity for this vault","name":"vault","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Only return activity for this KLend reserve"}]},"required":false,"description":"Only return activity for this KLend reserve","name":"reserve","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"default":["Vanilla","Lending","LendingFixedRate","Multiply","MultiplyFixedRate","Leverage","LeverageFixedRate"],"description":"Obligation types to include. Defaults to all seven types for compatibility. Earn products are Vanilla, Lending, and LendingFixedRate. Allowed values: Vanilla, Lending, LendingFixedRate, Multiply, MultiplyFixedRate, Leverage, LeverageFixedRate.","example":"Vanilla,Lending,LendingFixedRate"},"required":false,"description":"Obligation types to include. Defaults to all seven types for compatibility. Earn products are Vanilla, Lending, and LendingFixedRate. Allowed values: Vanilla, Lending, LendingFixedRate, Multiply, MultiplyFixedRate, Leverage, LeverageFixedRate.","name":"obligationTypes","in":"query"},{"schema":{"type":"string","description":"Include private-credit vault positions, earnings, and activity alongside Earn vaults. Also accepts other truthy/falsy strings such as \"1\"/\"0\", \"yes\"/\"no\", \"on\"/\"off\".","enum":["true","false"],"default":"false"},"required":false,"description":"Include private-credit vault positions, earnings, and activity alongside Earn vaults. Also accepts other truthy/falsy strings such as \"1\"/\"0\", \"yes\"/\"no\", \"on\"/\"off\".","name":"includePrivateCredit","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25,"description":"Maximum number of activity rows to return (1-100)"},"required":false,"description":"Maximum number of activity rows to return (1-100)","name":"limit","in":"query"},{"schema":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Pagination position. Resend tokenMint, vault, reserve, obligationTypes, includePrivateCredit, start, and end unchanged when requesting the next page."},"required":false,"description":"Pagination position. Resend tokenMint, vault, reserve, obligationTypes, includePrivateCredit, start, and end unchanged when requesting the next page.","name":"paginationToken","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EarnUserActivityResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/earn/users/{userPubkey}/summary":{"get":{"summary":"Get a wallet earn summary","description":"Get live vault and lending deposits, idle eligible holdings, APYs, and wallet-global lifetime interest by token for the requested obligation types. Pass Vanilla,Lending,LendingFixedRate for Earn products. Obligations that owe debt are left out.","tags":["Earn"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"User wallet address"}]},"required":true,"description":"User wallet address","name":"userPubkey","in":"path"},{"schema":{"type":"string","default":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD","description":"KLend program ID","example":"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"},"required":false,"description":"KLend program ID","name":"programId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"default":["Vanilla","Lending","LendingFixedRate","Multiply","MultiplyFixedRate","Leverage","LeverageFixedRate"],"description":"Obligation types to include. Defaults to all seven types for compatibility. Earn products are Vanilla, Lending, and LendingFixedRate. Allowed values: Vanilla, Lending, LendingFixedRate, Multiply, MultiplyFixedRate, Leverage, LeverageFixedRate.","example":"Vanilla,Lending,LendingFixedRate"},"required":false,"description":"Obligation types to include. Defaults to all seven types for compatibility. Earn products are Vanilla, Lending, and LendingFixedRate. Allowed values: Vanilla, Lending, LendingFixedRate, Multiply, MultiplyFixedRate, Leverage, LeverageFixedRate.","name":"obligationTypes","in":"query"},{"schema":{"type":"string","description":"Include private-credit vault positions, earnings, and activity alongside Earn vaults. Also accepts other truthy/falsy strings such as \"1\"/\"0\", \"yes\"/\"no\", \"on\"/\"off\".","enum":["true","false"],"default":"false"},"required":false,"description":"Include private-credit vault positions, earnings, and activity alongside Earn vaults. Also accepts other truthy/falsy strings such as \"1\"/\"0\", \"yes\"/\"no\", \"on\"/\"off\".","name":"includePrivateCredit","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EarnUserSummaryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/earn/users/{userPubkey}/tokens/{tokenMint}/metrics/history":{"get":{"summary":"Get wallet token earnings and growth history","description":"Get total earn position value and interest earned per bucket across vaults and lending deposits for the requested obligation types. Lending obligations that owe debt now are left out with their whole history.","tags":["Earn"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"User wallet address"}]},"required":true,"description":"User wallet address","name":"userPubkey","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Token mint address"}]},"required":true,"description":"Token mint address","name":"tokenMint","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"default":["Vanilla","Lending","LendingFixedRate","Multiply","MultiplyFixedRate","Leverage","LeverageFixedRate"],"description":"Obligation types to include. Defaults to all seven types for compatibility. Earn products are Vanilla, Lending, and LendingFixedRate. Allowed values: Vanilla, Lending, LendingFixedRate, Multiply, MultiplyFixedRate, Leverage, LeverageFixedRate.","example":"Vanilla,Lending,LendingFixedRate"},"required":false,"description":"Obligation types to include. Defaults to all seven types for compatibility. Earn products are Vanilla, Lending, and LendingFixedRate. Allowed values: Vanilla, Lending, LendingFixedRate, Multiply, MultiplyFixedRate, Leverage, LeverageFixedRate.","name":"obligationTypes","in":"query"},{"schema":{"type":"string","description":"Include private-credit vault positions, earnings, and activity alongside Earn vaults. Also accepts other truthy/falsy strings such as \"1\"/\"0\", \"yes\"/\"no\", \"on\"/\"off\".","enum":["true","false"],"default":"false"},"required":false,"description":"Include private-credit vault positions, earnings, and activity alongside Earn vaults. Also accepts other truthy/falsy strings such as \"1\"/\"0\", \"yes\"/\"no\", \"on\"/\"off\".","name":"includePrivateCredit","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EarnUserTokenHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/earn/users/{userPubkey}/tokens/metrics/history":{"get":{"summary":"Get wallet earnings and growth history for all tokens","description":"Get earn history grouped by token mint across vaults and lending deposits for the requested obligation types. Lending obligations that owe debt now are left out with their whole history. Mints with no buckets in the range are omitted.","tags":["Earn"],"parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"User wallet address"}]},"required":true,"description":"User wallet address","name":"userPubkey","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"default":["Vanilla","Lending","LendingFixedRate","Multiply","MultiplyFixedRate","Leverage","LeverageFixedRate"],"description":"Obligation types to include. Defaults to all seven types for compatibility. Earn products are Vanilla, Lending, and LendingFixedRate. Allowed values: Vanilla, Lending, LendingFixedRate, Multiply, MultiplyFixedRate, Leverage, LeverageFixedRate.","example":"Vanilla,Lending,LendingFixedRate"},"required":false,"description":"Obligation types to include. Defaults to all seven types for compatibility. Earn products are Vanilla, Lending, and LendingFixedRate. Allowed values: Vanilla, Lending, LendingFixedRate, Multiply, MultiplyFixedRate, Leverage, LeverageFixedRate.","name":"obligationTypes","in":"query"},{"schema":{"type":"string","description":"Include private-credit vault positions, earnings, and activity alongside Earn vaults. Also accepts other truthy/falsy strings such as \"1\"/\"0\", \"yes\"/\"no\", \"on\"/\"off\".","enum":["true","false"],"default":"false"},"required":false,"description":"Include private-credit vault positions, earnings, and activity alongside Earn vaults. Also accepts other truthy/falsy strings such as \"1\"/\"0\", \"yes\"/\"no\", \"on\"/\"off\".","name":"includePrivateCredit","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":"1970-01-01T00:00:00.000Z","description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EarnUserTokensHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/underlying-yields/{mint}/history":{"get":{"summary":"Get underlying token yield history","description":"Get the native yield history for a reserve liquidity mint, with server-side source classification and combined LST alignment.","tags":["Yields"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"mint","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnderlyingYieldHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/prices/{mint}/history":{"get":{"summary":"Get token USD price history","description":"Returns one unrounded spot price in USD per bucket, preferring the most recently observed spot token ID throughout the request and filling its missing buckets from other spot IDs. Timestamps are bucket starts; gaps are possible. Start is inclusive and defaults to full history; end is exclusive and defaults to now.","tags":["Prices"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"mint","in":"path"},{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"],"default":"mainnet-beta","description":"Solana cluster environment","example":"mainnet-beta"},"required":false,"description":"Solana cluster environment","name":"env","in":"query"},{"schema":{"type":"string","enum":["hour","day"],"description":"Bucket frequency. Defaults to hour for a start-to-end range of at most 32 days, otherwise day."},"required":false,"description":"Bucket frequency. Defaults to hour for a start-to-end range of at most 32 days, otherwise day.","name":"frequency","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceHistoryV2Response"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/distributors":{"post":{"summary":"Create a distributor","description":"Registers a distributor under a unique name and returns its generated 5-character memo code. Private (authorized) API access only, please add a basic auth header to your request.","tags":["Distributors"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":64,"description":"Unique distributor name","example":"Sample Distributor"}},"required":["name"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Distributor"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why it was not authorized","example":"Not authorized for this request. Please include the basic auth headers."}},"required":["error"]}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing the conflicting resource","example":"Resource already exists"}},"required":["error"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/vaults/{pubkey}/distributor-transactions":{"get":{"summary":"Get distributor-tagged transactions of a vault","description":"Cursor-paginated list of deposits into and withdrawals out of a Kamino Earn vault whose transaction carried a distributor code, newest first. One row per instruction, so a transaction with several gives several rows. Private (authorized) API access only, please add a basic auth header to your request.","tags":["Distributors"],"parameters":[{"schema":{"$ref":"#/components/schemas/AddressBase58"},"required":true,"description":"Valid base58-encoded address","name":"pubkey","in":"path"},{"schema":{"type":"string","enum":["deposit","withdraw"],"description":"Only return this kind of transaction; omitted returns deposits and withdrawals","example":"deposit"},"required":false,"description":"Only return this kind of transaction; omitted returns deposits and withdrawals","name":"type","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"example":100,"description":"Maximum number of transactions to return (1-1000)"},"required":false,"description":"Maximum number of transactions to return (1-1000)","name":"limit","in":"query"},{"schema":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"},"required":false,"description":"Optional pagination token","name":"paginationToken","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTransactionsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why it was not authorized","example":"Not authorized for this request. Please include the basic auth headers."}},"required":["error"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/distributors/{code}/transactions":{"get":{"summary":"Get transactions tagged with a distributor code","description":"Cursor-paginated list of deposits and withdrawals, across every Kamino Earn vault, whose transaction carried this distributor code, newest first. One row per instruction. Private (authorized) API access only, please add a basic auth header to your request.","tags":["Distributors"],"parameters":[{"schema":{"type":"string","minLength":5,"maxLength":5,"description":"Distributor code, matched case-insensitively","example":"ex4mp"},"required":true,"description":"Distributor code, matched case-insensitively","name":"code","in":"path"},{"schema":{"type":"string","enum":["deposit","withdraw"],"description":"Only return this kind of transaction; omitted returns deposits and withdrawals","example":"deposit"},"required":false,"description":"Only return this kind of transaction; omitted returns deposits and withdrawals","name":"type","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"example":100,"description":"Maximum number of transactions to return (1-1000)"},"required":false,"description":"Maximum number of transactions to return (1-1000)","name":"limit","in":"query"},{"schema":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"},"required":false,"description":"Optional pagination token","name":"paginationToken","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTransactionsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why it was not authorized","example":"Not authorized for this request. Please include the basic auth headers."}},"required":["error"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/distributors/{code}/vaults/{vault}/transactions":{"get":{"summary":"Get transactions tagged with a distributor code on one vault","description":"Cursor-paginated list of deposits into and withdrawals out of one Kamino Earn vault whose transaction carried this distributor code, newest first. One row per instruction. Private (authorized) API access only, please add a basic auth header to your request.","tags":["Distributors"],"parameters":[{"schema":{"type":"string","minLength":5,"maxLength":5,"description":"Distributor code, matched case-insensitively","example":"ex4mp"},"required":true,"description":"Distributor code, matched case-insensitively","name":"code","in":"path"},{"schema":{"allOf":[{"$ref":"#/components/schemas/AddressBase58"},{"description":"Kamino Earn vault address","example":"HDsayqBsE7bTE6ZJLDozDNhDHgc6BsDB1DTn5TBXn8hE"}]},"required":true,"description":"Kamino Earn vault address","name":"vault","in":"path"},{"schema":{"type":"string","enum":["deposit","withdraw"],"description":"Only return this kind of transaction; omitted returns deposits and withdrawals","example":"deposit"},"required":false,"description":"Only return this kind of transaction; omitted returns deposits and withdrawals","name":"type","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"example":100,"description":"Maximum number of transactions to return (1-1000)"},"required":false,"description":"Maximum number of transactions to return (1-1000)","name":"limit","in":"query"},{"schema":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"},"required":false,"description":"Optional pagination token","name":"paginationToken","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTransactionsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why it was not authorized","example":"Not authorized for this request. Please include the basic auth headers."}},"required":["error"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kvaults/distributors/{code}/wallets":{"get":{"summary":"Get per-wallet totals for a distributor code","description":"For each wallet that transacted under this distributor code in the range: the total amount per token and direction, deposits and withdrawals as separate lines. Private (authorized) API access only, please add a basic auth header to your request.","tags":["Distributors"],"parameters":[{"schema":{"type":"string","minLength":5,"maxLength":5,"description":"Distributor code, matched case-insensitively","example":"ex4mp"},"required":true,"description":"Distributor code, matched case-insensitively","name":"code","in":"path"},{"schema":{"type":"string","enum":["deposit","withdraw"],"description":"Only return this kind of transaction; omitted returns deposits and withdrawals","example":"deposit"},"required":false,"description":"Only return this kind of transaction; omitted returns deposits and withdrawals","name":"type","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"example":100,"description":"Maximum number of wallets to return (1-1000)"},"required":false,"description":"Maximum number of wallets to return (1-1000)","name":"limit","in":"query"},{"schema":{"type":"string","example":"eyJsYXN0SWQiOjgxfQ==","description":"Optional pagination token"},"required":false,"description":"Optional pagination token","name":"paginationToken","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-01-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"start","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Date input (ISO 8601 string or epoch in ms)","examples":["2024-01-01T00:00:00.000Z",1704067200000],"example":"2020-02-01T00:00Z"},"required":false,"description":"Date input (ISO 8601 string or epoch in ms)","name":"end","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorWalletsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"High-level error message describing the failure","example":"Invalid query params"},"details":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Detailed validation issues (present only for validation errors)"}},"required":["error"],"description":"Bad request response (400)","example":{"error":"Invalid query request","details":[{"code":"invalid_union","errors":[[{"code":"custom","path":[],"message":"Invalid date string"}],[{"expected":"number","code":"invalid_type","path":[],"message":"Invalid input: expected number, received string"}]],"path":["start"],"message":"Invalid input"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing why it was not authorized","example":"Not authorized for this request. Please include the basic auth headers."}},"required":["error"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"string","description":"Error message describing why it was not found","example":"Account could not be found"}},"required":["metadata"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{}}