# Vaults

## GET /vaults

> Get all vaults info

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults":{"get":{"tags":["Vaults"],"description":"Get all vaults info","parameters":[{"schema":{"type":"string","description":"Filter vaults by status: true for active only, false for inactive only"},"required":false,"description":"Filter vaults by status: true for active only, false for inactive only","name":"live","in":"query"}],"responses":{"200":{"description":"Get all vaults info","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultInfo"}}},"required":["data"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultInfo":{"type":"object","properties":{"vaultType":{"type":"string","enum":["boring","nest","boringNest"]},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Canonical vault address (boring vault address or nest share OFT address)"},"nestShareOftAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestVaults":{"type":"array","items":{"type":"object","properties":{"nestVaultAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"asset":{"type":"string"},"chainAssets":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true},"assetAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"}},"required":["chainId","assetAddress"]},"minItems":1}},"required":["nestVaultAddress","chainAssets"]}},"nestComposers":{"type":"array","items":{"$ref":"#/components/schemas/PublicNestComposer"}},"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestAccountant":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chain":{"$ref":"#/components/schemas/ChainConfig"}},"required":["address","chain"],"description":"Address of the `NestAccountant` for the vault. If both `accountantAddress` and `nestAccountant` are defined for a vault, then `accountantAddress` is the legacy `AccountantWithRateProvider` and `nestAccountant` is the new `NestAccountant`."},"authorityAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"tellerContractAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"decimals":{"type":"number","description":"Default decimals for vault"},"decimalsOverride":{"type":"object","additionalProperties":{"type":"number"},"description":"Override for the number of decimals for the vault on specific chains"},"chain":{"$ref":"#/components/schemas/ChainConfig"},"solana":{"type":"object","properties":{"mintAddress":{"type":"string"},"composerAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"decimals":{"type":"number"},"startBlock":{"type":"number","description":"start block on Plume corresponding to launch of vault on Solana"}},"required":["mintAddress","startBlock"]},"liquidAssets":{"type":"array","items":{"$ref":"#/components/schemas/LiquidAsset"}},"slug":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"icon":{"type":"string"},"targetComposition":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["slug","name","description"]}},"sec30d":{"type":"number","nullable":true},"tvl":{"type":"number","nullable":true},"numHolders":{"type":"number","nullable":true},"volume24h":{"type":"number","nullable":true}},"required":["vaultType","vaultAddress","accountantAddress","authorityAddress","decimals","chain","liquidAssets","slug","name","symbol","icon","targetComposition","sec30d","tvl","numHolders","volume24h"]},"PublicNestComposer":{"type":"object","properties":{"asset":{"type":"string"},"composerAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"assetAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"}},"required":["asset","composerAddress"]},"ChainConfig":{"type":"object","properties":{"mainnet":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"plume":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"plasma":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"arbitrum":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"bsc":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"worldchain":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]}}},"LiquidAsset":{"type":"object","properties":{"contractAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"symbol":{"type":"string"},"iconUrl":{"type":"string","nullable":true},"decimals":{"type":"number"},"price":{"type":"number"},"chainId":{"type":"number"},"minimumSourceRules":{"type":"array","items":{"type":"object","properties":{"sourceChain":{"type":"integer","minimum":0,"exclusiveMinimum":true},"sourceParams":{"type":"object","properties":{"excludeWallets":{"type":"array","items":{"type":"string"}}}}},"required":["sourceChain"]}}},"required":["contractAddress","symbol","decimals","price","chainId"]}}}}
```

## GET /vaults/details

> Get VaultDetails for all vaults

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/details":{"get":{"tags":["Vaults"],"description":"Get VaultDetails for all vaults","parameters":[{"schema":{"type":"string","description":"Filter vaults by status: true for active only, false for inactive only"},"required":false,"description":"Filter vaults by status: true for active only, false for inactive only","name":"live","in":"query"},{"schema":{"type":"string","default":false},"required":false,"name":"liveLiquidity","in":"query"}],"responses":{"200":{"description":"VaultDetails for all vaults","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultDetails"}}},"required":["data"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultDetails":{"type":"object","properties":{"vaultType":{"type":"string","enum":["boring","nest","boringNest"]},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Canonical vault address (boring vault address or nest share OFT address)"},"nestShareOftAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestVaults":{"type":"array","items":{"type":"object","properties":{"nestVaultAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"asset":{"type":"string"},"chainAssets":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true},"assetAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"}},"required":["chainId","assetAddress"]},"minItems":1}},"required":["nestVaultAddress","chainAssets"]}},"nestComposers":{"type":"array","items":{"$ref":"#/components/schemas/PublicNestComposer"}},"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestAccountant":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chain":{"$ref":"#/components/schemas/ChainConfig"}},"required":["address","chain"],"description":"Address of the `NestAccountant` for the vault. If both `accountantAddress` and `nestAccountant` are defined for a vault, then `accountantAddress` is the legacy `AccountantWithRateProvider` and `nestAccountant` is the new `NestAccountant`."},"authorityAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"tellerContractAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"decimals":{"type":"number","description":"Default decimals for vault"},"decimalsOverride":{"type":"object","additionalProperties":{"type":"number"},"description":"Override for the number of decimals for the vault on specific chains"},"chain":{"$ref":"#/components/schemas/ChainConfig"},"solana":{"type":"object","properties":{"mintAddress":{"type":"string"},"composerAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"decimals":{"type":"number"},"startBlock":{"type":"number","description":"start block on Plume corresponding to launch of vault on Solana"}},"required":["mintAddress","startBlock"]},"liquidAssets":{"type":"array","items":{"$ref":"#/components/schemas/LiquidAsset"}},"slug":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"icon":{"type":"string"},"targetComposition":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["slug","name","description"]}},"tvl":{"type":"number","nullable":true},"tvl30DayChange":{"type":"number","nullable":true},"volume24h":{"type":"number","nullable":true},"apy":{"type":"object","properties":{"rolling7d":{"type":"number","nullable":true},"rolling30d":{"type":"number","nullable":true},"sec30d":{"type":"number","nullable":true}},"required":["rolling7d","rolling30d","sec30d"]},"tokenPrice":{"type":"number","nullable":true},"tokenPriceUpdatedAtEpoch":{"type":"number","nullable":true},"liquidFunds":{"type":"number","nullable":true},"liquidFundsRange":{"type":"number","nullable":true},"holders":{"type":"number","nullable":true},"tokenPriceUpdatedAt":{"type":"string","nullable":true,"format":"date-time"},"pendingRedemptions":{"type":"number","nullable":true},"pendingRedemptionsValue":{"type":"number","nullable":true},"shortfall":{"type":"number","nullable":true}},"required":["vaultType","vaultAddress","accountantAddress","authorityAddress","decimals","chain","liquidAssets","slug","name","symbol","icon","targetComposition","tvl","tvl30DayChange","volume24h","apy","tokenPrice","tokenPriceUpdatedAtEpoch","liquidFunds","liquidFundsRange","holders","tokenPriceUpdatedAt","pendingRedemptions","pendingRedemptionsValue","shortfall"]},"PublicNestComposer":{"type":"object","properties":{"asset":{"type":"string"},"composerAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"assetAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"}},"required":["asset","composerAddress"]},"ChainConfig":{"type":"object","properties":{"mainnet":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"plume":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"plasma":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"arbitrum":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"bsc":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"worldchain":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]}}},"LiquidAsset":{"type":"object","properties":{"contractAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"symbol":{"type":"string"},"iconUrl":{"type":"string","nullable":true},"decimals":{"type":"number"},"price":{"type":"number"},"chainId":{"type":"number"},"minimumSourceRules":{"type":"array","items":{"type":"object","properties":{"sourceChain":{"type":"integer","minimum":0,"exclusiveMinimum":true},"sourceParams":{"type":"object","properties":{"excludeWallets":{"type":"array","items":{"type":"string"}}}}},"required":["sourceChain"]}}},"required":["contractAddress","symbol","decimals","price","chainId"]}}}}
```

## GET /vaults/details-lite

> Get VaultDetailsLite for all vaults

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/details-lite":{"get":{"tags":["Vaults"],"description":"Get VaultDetailsLite for all vaults","parameters":[{"schema":{"type":"string","default":false},"required":false,"name":"liveLiquidity","in":"query"}],"responses":{"200":{"description":"VaultDetailsLite for all vaults","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultDetailsLite"}}},"required":["data"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultDetailsLite":{"type":"object","properties":{"vaultType":{"type":"string","enum":["boring","nest","boringNest"]},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Canonical vault address (boring vault address or nest share OFT address)"},"nestShareOftAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestVaults":{"type":"array","items":{"type":"object","properties":{"nestVaultAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"asset":{"type":"string"},"chainAssets":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true},"assetAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"}},"required":["chainId","assetAddress"]},"minItems":1}},"required":["nestVaultAddress","chainAssets"]}},"nestComposers":{"type":"array","items":{"$ref":"#/components/schemas/PublicNestComposer"}},"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestAccountant":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chain":{"$ref":"#/components/schemas/ChainConfig"}},"required":["address","chain"],"description":"Address of the `NestAccountant` for the vault. If both `accountantAddress` and `nestAccountant` are defined for a vault, then `accountantAddress` is the legacy `AccountantWithRateProvider` and `nestAccountant` is the new `NestAccountant`."},"authorityAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"tellerContractAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"decimals":{"type":"number","description":"Default decimals for vault"},"decimalsOverride":{"type":"object","additionalProperties":{"type":"number"},"description":"Override for the number of decimals for the vault on specific chains"},"chain":{"$ref":"#/components/schemas/ChainConfig"},"solana":{"type":"object","properties":{"mintAddress":{"type":"string"},"composerAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"decimals":{"type":"number"},"startBlock":{"type":"number","description":"start block on Plume corresponding to launch of vault on Solana"}},"required":["mintAddress","startBlock"]},"liquidAssets":{"type":"array","items":{"$ref":"#/components/schemas/LiquidAsset"}},"slug":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"icon":{"type":"string"},"targetComposition":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["slug","name","description"]}},"tvl":{"type":"number","nullable":true},"tvl30DayChange":{"type":"number","nullable":true},"volume24h":{"type":"number","nullable":true},"apy":{"type":"object","properties":{"rolling7d":{"type":"number","nullable":true},"rolling30d":{"type":"number","nullable":true},"sec30d":{"type":"number","nullable":true}},"required":["rolling7d","rolling30d","sec30d"]},"tokenPrice":{"type":"number","nullable":true},"tokenPriceUpdatedAtEpoch":{"type":"number","nullable":true},"liquidFunds":{"type":"number","nullable":true},"liquidFundsRange":{"type":"number","nullable":true},"holders":{"type":"number","nullable":true}},"required":["vaultType","vaultAddress","accountantAddress","authorityAddress","decimals","chain","liquidAssets","slug","name","symbol","icon","targetComposition","tvl","tvl30DayChange","volume24h","apy","tokenPrice","tokenPriceUpdatedAtEpoch","liquidFunds","liquidFundsRange","holders"]},"PublicNestComposer":{"type":"object","properties":{"asset":{"type":"string"},"composerAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"assetAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"}},"required":["asset","composerAddress"]},"ChainConfig":{"type":"object","properties":{"mainnet":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"plume":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"plasma":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"arbitrum":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"bsc":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"worldchain":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]}}},"LiquidAsset":{"type":"object","properties":{"contractAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"symbol":{"type":"string"},"iconUrl":{"type":"string","nullable":true},"decimals":{"type":"number"},"price":{"type":"number"},"chainId":{"type":"number"},"minimumSourceRules":{"type":"array","items":{"type":"object","properties":{"sourceChain":{"type":"integer","minimum":0,"exclusiveMinimum":true},"sourceParams":{"type":"object","properties":{"excludeWallets":{"type":"array","items":{"type":"string"}}}}},"required":["sourceChain"]}}},"required":["contractAddress","symbol","decimals","price","chainId"]}}}}
```

## GET /vaults/apy

> Get 7d, 30d and SEC 30d APYs for all vaults. \`apy\` is the composition-weighted yield APY based on underlying yield-bearing assets (liquid assets are excluded from the APY denominator). \`navApy\` is the price-delta (NAV-based) APY computed from vault token price changes.

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/apy":{"get":{"tags":["Vaults"],"description":"Get 7d, 30d and SEC 30d APYs for all vaults. `apy` is the composition-weighted yield APY based on underlying yield-bearing assets (liquid assets are excluded from the APY denominator). `navApy` is the price-delta (NAV-based) APY computed from vault token price changes.","parameters":[{"schema":{"type":"string","default":false},"required":false,"name":"includeBreakdown","in":"query"}],"responses":{"200":{"description":"VaultApy for all vaults","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultApy"}}},"required":["data"]}}}}}}}},"components":{"schemas":{"VaultApy":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"apy":{"type":"object","properties":{"rolling7d":{"type":"number","nullable":true},"rolling30d":{"type":"number","nullable":true},"sec30d":{"type":"number","nullable":true}},"required":["rolling7d","rolling30d","sec30d"],"description":"Composition-weighted yield APY based on underlying yield-bearing assets. Liquid assets do NOT dilute this value (liquid assets are excluded from the APY denominator)."},"navApy":{"type":"object","properties":{"rolling7d":{"type":"number","nullable":true},"rolling30d":{"type":"number","nullable":true},"sec30d":{"type":"number","nullable":true}},"required":["rolling7d","rolling30d","sec30d"],"description":"Price-delta (NAV-based) APY calculated from vault token price changes over time."},"breakdown":{"type":"object","properties":{"totalValue":{"type":"number"},"liquidAssets":{"type":"object","properties":{"totalValue":{"type":"number"},"weight":{"type":"number"}},"required":["totalValue","weight"]},"yieldAssets":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"value":{"type":"number"},"weight":{"type":"number"},"apy":{"type":"object","properties":{"rolling7d":{"type":"number","nullable":true},"rolling30d":{"type":"number","nullable":true},"sec30d":{"type":"number","nullable":true}},"required":["rolling7d","rolling30d","sec30d"]}},"required":["slug","value","weight","apy"]}}},"required":["totalValue","liquidAssets","yieldAssets"],"description":"Optional breakdown of how composition APY is calculated"},"errors":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","description":"The external API or service that caused the error"},"operation":{"type":"string","description":"The operation that failed"},"message":{"type":"string","description":"Human-readable error message"},"code":{"type":"string","enum":["TIMEOUT","NETWORK_ERROR","EXTERNAL_API_ERROR","UNKNOWN_ERROR"],"description":"Error classification code"},"timestamp":{"type":"number","description":"Unix timestamp in seconds when error occurred"}},"required":["source","operation","message","timestamp"]},"description":"Non-fatal errors that occurred during request processing (e.g., external API timeouts)"}},"required":["vaultAddress","apy","navApy"]}}}}
```

## GET /vaults/tvl

> Get VaultTVL for all vaults

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/tvl":{"get":{"tags":["Vaults"],"description":"Get VaultTVL for all vaults","responses":{"200":{"description":"VaultTVL for all vaults","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultTvl"}}},"required":["data"]}}}}}}}},"components":{"schemas":{"VaultTvl":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"tvl":{"type":"number","nullable":true}},"required":["vaultAddress","tvl"]}}}}
```

## GET /vaults/volume

> Get last 24h volume for all vaults

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/volume":{"get":{"tags":["Vaults"],"description":"Get last 24h volume for all vaults","responses":{"200":{"description":"Latest 24h volume for all vaults","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultVolume"}}},"required":["data"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultVolume":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"volume24h":{"type":"number","nullable":true}},"required":["vaultAddress","volume24h"]}}}}
```

## GET /vaults/holders

> Get number of holders for all vaults and top holders for each vault

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/holders":{"get":{"tags":["Vaults"],"description":"Get number of holders for all vaults and top holders for each vault","parameters":[{"schema":{"type":"number","nullable":true,"description":"Optional chain ID"},"required":false,"description":"Optional chain ID","name":"chainId","in":"query"}],"responses":{"200":{"description":"VaultHolders for all vaults","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultHolders"}}},"required":["data"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultHolders":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"totalHolders":{"type":"number","nullable":true},"holders":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"number"},"user":{"anyOf":[{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},{"type":"string"}]},"balance":{"type":"number"},"holderSince":{"type":"number"}},"required":["chainId","user","balance","holderSince"]},"description":"Top holders for the vault by balance"}},"required":["vaultAddress","totalHolders","holders"]}}}}
```

## GET /vaults/stats

> Get global TVL, all-time volume, and holder count across all vaults and chains

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/stats":{"get":{"tags":["Vaults"],"description":"Get global TVL, all-time volume, and holder count across all vaults and chains","parameters":[{"schema":{"type":"string","default":false},"required":false,"name":"includeBreakdown","in":"query"}],"responses":{"200":{"description":"Global vault stats","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultsStats"}},"required":["data"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultsStats":{"type":"object","properties":{"totalTvl":{"type":"number","description":"Current TVL summed across all vaults and chains"},"totalVolumeAllTime":{"type":"number","description":"All-time gross volume (deposits + redemptions) across all vaults and chains"},"totalHolders":{"type":"number","description":"Current holder count with chain-level dedupe per vault token (same user in same vault across chains counts once)"}},"required":["totalTvl","totalVolumeAllTime","totalHolders"]}}}}
```

## GET /vaults/recent-transactions

> Get recent transactions for all vaults

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/recent-transactions":{"get":{"tags":["Vaults"],"description":"Get recent transactions for all vaults","parameters":[{"schema":{"type":"number","nullable":true,"description":"Optional chain ID"},"required":false,"description":"Optional chain ID","name":"chainId","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":10,"description":"Maximum number of transactions per vault to return"},"required":false,"description":"Maximum number of transactions per vault to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Recent transactions for all vaults","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"transactionCount7d":{"type":"number","description":"Number of transactions in the last 7 days"},"recentTransactions":{"type":"array","items":{"type":"object","properties":{"transactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Transaction hash"},"logIndex":{"type":"integer","description":"Log index of the event within the transaction receipt"},"transactionType":{"type":"string","enum":["DEPOSIT","WITHDRAW_REQUEST","WITHDRAW_FULFILL","WITHDRAW_UPDATE","WITHDRAW_CLAIM","PRE_DEPOSIT_MIGRATION","WITHDRAW_INSTANT"]},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Vault address"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"User address"},"createdAt":{"type":"number","description":"Transaction created at in epoch seconds"},"shares":{"type":"number","description":"Shares"},"sharesTokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Shares token address"},"assets":{"type":"number","nullable":true,"description":"Assets"},"assetsTokenAddress":{"type":"string","nullable":true,"pattern":"^0x[a-fA-F0-9]+$","description":"Assets token address"},"chainId":{"type":"number","description":"Chain ID"}},"required":["transactionHash","logIndex","transactionType","vaultAddress","user","createdAt","shares","sharesTokenAddress","assets","assetsTokenAddress","chainId"]}}},"required":["vaultAddress","transactionCount7d","recentTransactions"]}}},"required":["data"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}}}
```

## GET /vaults/{slug}/details

> Get VaultDetails by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/details":{"get":{"tags":["Vaults"],"description":"Get VaultDetails by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"string","default":false},"required":false,"name":"liveLiquidity","in":"query"}],"responses":{"200":{"description":"Vault details by slug","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultDetails"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultDetails":{"type":"object","properties":{"vaultType":{"type":"string","enum":["boring","nest","boringNest"]},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Canonical vault address (boring vault address or nest share OFT address)"},"nestShareOftAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestVaults":{"type":"array","items":{"type":"object","properties":{"nestVaultAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"asset":{"type":"string"},"chainAssets":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true},"assetAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"}},"required":["chainId","assetAddress"]},"minItems":1}},"required":["nestVaultAddress","chainAssets"]}},"nestComposers":{"type":"array","items":{"$ref":"#/components/schemas/PublicNestComposer"}},"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestAccountant":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chain":{"$ref":"#/components/schemas/ChainConfig"}},"required":["address","chain"],"description":"Address of the `NestAccountant` for the vault. If both `accountantAddress` and `nestAccountant` are defined for a vault, then `accountantAddress` is the legacy `AccountantWithRateProvider` and `nestAccountant` is the new `NestAccountant`."},"authorityAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"tellerContractAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"decimals":{"type":"number","description":"Default decimals for vault"},"decimalsOverride":{"type":"object","additionalProperties":{"type":"number"},"description":"Override for the number of decimals for the vault on specific chains"},"chain":{"$ref":"#/components/schemas/ChainConfig"},"solana":{"type":"object","properties":{"mintAddress":{"type":"string"},"composerAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"decimals":{"type":"number"},"startBlock":{"type":"number","description":"start block on Plume corresponding to launch of vault on Solana"}},"required":["mintAddress","startBlock"]},"liquidAssets":{"type":"array","items":{"$ref":"#/components/schemas/LiquidAsset"}},"slug":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"icon":{"type":"string"},"targetComposition":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["slug","name","description"]}},"tvl":{"type":"number","nullable":true},"tvl30DayChange":{"type":"number","nullable":true},"volume24h":{"type":"number","nullable":true},"apy":{"type":"object","properties":{"rolling7d":{"type":"number","nullable":true},"rolling30d":{"type":"number","nullable":true},"sec30d":{"type":"number","nullable":true}},"required":["rolling7d","rolling30d","sec30d"]},"tokenPrice":{"type":"number","nullable":true},"tokenPriceUpdatedAtEpoch":{"type":"number","nullable":true},"liquidFunds":{"type":"number","nullable":true},"liquidFundsRange":{"type":"number","nullable":true},"holders":{"type":"number","nullable":true},"tokenPriceUpdatedAt":{"type":"string","nullable":true,"format":"date-time"},"pendingRedemptions":{"type":"number","nullable":true},"pendingRedemptionsValue":{"type":"number","nullable":true},"shortfall":{"type":"number","nullable":true}},"required":["vaultType","vaultAddress","accountantAddress","authorityAddress","decimals","chain","liquidAssets","slug","name","symbol","icon","targetComposition","tvl","tvl30DayChange","volume24h","apy","tokenPrice","tokenPriceUpdatedAtEpoch","liquidFunds","liquidFundsRange","holders","tokenPriceUpdatedAt","pendingRedemptions","pendingRedemptionsValue","shortfall"]},"PublicNestComposer":{"type":"object","properties":{"asset":{"type":"string"},"composerAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"assetAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"}},"required":["asset","composerAddress"]},"ChainConfig":{"type":"object","properties":{"mainnet":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"plume":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"plasma":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"arbitrum":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"bsc":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"worldchain":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]}}},"LiquidAsset":{"type":"object","properties":{"contractAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"symbol":{"type":"string"},"iconUrl":{"type":"string","nullable":true},"decimals":{"type":"number"},"price":{"type":"number"},"chainId":{"type":"number"},"minimumSourceRules":{"type":"array","items":{"type":"object","properties":{"sourceChain":{"type":"integer","minimum":0,"exclusiveMinimum":true},"sourceParams":{"type":"object","properties":{"excludeWallets":{"type":"array","items":{"type":"string"}}}}},"required":["sourceChain"]}}},"required":["contractAddress","symbol","decimals","price","chainId"]}}}}
```

## GET /vaults/{slug}/details-lite

> Get VaultDetailsLite by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/details-lite":{"get":{"tags":["Vaults"],"description":"Get VaultDetailsLite by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"string","default":false},"required":false,"name":"liveLiquidity","in":"query"}],"responses":{"200":{"description":"Vault details by slug","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultDetailsLite"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultDetailsLite":{"type":"object","properties":{"vaultType":{"type":"string","enum":["boring","nest","boringNest"]},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Canonical vault address (boring vault address or nest share OFT address)"},"nestShareOftAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestVaults":{"type":"array","items":{"type":"object","properties":{"nestVaultAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"asset":{"type":"string"},"chainAssets":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true},"assetAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"}},"required":["chainId","assetAddress"]},"minItems":1}},"required":["nestVaultAddress","chainAssets"]}},"nestComposers":{"type":"array","items":{"$ref":"#/components/schemas/PublicNestComposer"}},"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestAccountant":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chain":{"$ref":"#/components/schemas/ChainConfig"}},"required":["address","chain"],"description":"Address of the `NestAccountant` for the vault. If both `accountantAddress` and `nestAccountant` are defined for a vault, then `accountantAddress` is the legacy `AccountantWithRateProvider` and `nestAccountant` is the new `NestAccountant`."},"authorityAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"tellerContractAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"decimals":{"type":"number","description":"Default decimals for vault"},"decimalsOverride":{"type":"object","additionalProperties":{"type":"number"},"description":"Override for the number of decimals for the vault on specific chains"},"chain":{"$ref":"#/components/schemas/ChainConfig"},"solana":{"type":"object","properties":{"mintAddress":{"type":"string"},"composerAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"decimals":{"type":"number"},"startBlock":{"type":"number","description":"start block on Plume corresponding to launch of vault on Solana"}},"required":["mintAddress","startBlock"]},"liquidAssets":{"type":"array","items":{"$ref":"#/components/schemas/LiquidAsset"}},"slug":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"icon":{"type":"string"},"targetComposition":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["slug","name","description"]}},"tvl":{"type":"number","nullable":true},"tvl30DayChange":{"type":"number","nullable":true},"volume24h":{"type":"number","nullable":true},"apy":{"type":"object","properties":{"rolling7d":{"type":"number","nullable":true},"rolling30d":{"type":"number","nullable":true},"sec30d":{"type":"number","nullable":true}},"required":["rolling7d","rolling30d","sec30d"]},"tokenPrice":{"type":"number","nullable":true},"tokenPriceUpdatedAtEpoch":{"type":"number","nullable":true},"liquidFunds":{"type":"number","nullable":true},"liquidFundsRange":{"type":"number","nullable":true},"holders":{"type":"number","nullable":true}},"required":["vaultType","vaultAddress","accountantAddress","authorityAddress","decimals","chain","liquidAssets","slug","name","symbol","icon","targetComposition","tvl","tvl30DayChange","volume24h","apy","tokenPrice","tokenPriceUpdatedAtEpoch","liquidFunds","liquidFundsRange","holders"]},"PublicNestComposer":{"type":"object","properties":{"asset":{"type":"string"},"composerAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"assetAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"}},"required":["asset","composerAddress"]},"ChainConfig":{"type":"object","properties":{"mainnet":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"plume":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"plasma":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"arbitrum":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"bsc":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"worldchain":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]}}},"LiquidAsset":{"type":"object","properties":{"contractAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"symbol":{"type":"string"},"iconUrl":{"type":"string","nullable":true},"decimals":{"type":"number"},"price":{"type":"number"},"chainId":{"type":"number"},"minimumSourceRules":{"type":"array","items":{"type":"object","properties":{"sourceChain":{"type":"integer","minimum":0,"exclusiveMinimum":true},"sourceParams":{"type":"object","properties":{"excludeWallets":{"type":"array","items":{"type":"string"}}}}},"required":["sourceChain"]}}},"required":["contractAddress","symbol","decimals","price","chainId"]}}}}
```

## GET /vaults/{slug}/apy

> Get Vault APY by slug. \`apy\` is the composition-weighted yield APY based on underlying yield-bearing assets (liquid assets are excluded from the APY denominator). \`navApy\` is the price-delta (NAV-based) APY computed from vault token price changes.

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/apy":{"get":{"tags":["Vaults"],"description":"Get Vault APY by slug. `apy` is the composition-weighted yield APY based on underlying yield-bearing assets (liquid assets are excluded from the APY denominator). `navApy` is the price-delta (NAV-based) APY computed from vault token price changes.","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"string","default":false},"required":false,"name":"includeBreakdown","in":"query"}],"responses":{"200":{"description":"Vault APY","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultApy"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultApy":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"apy":{"type":"object","properties":{"rolling7d":{"type":"number","nullable":true},"rolling30d":{"type":"number","nullable":true},"sec30d":{"type":"number","nullable":true}},"required":["rolling7d","rolling30d","sec30d"],"description":"Composition-weighted yield APY based on underlying yield-bearing assets. Liquid assets do NOT dilute this value (liquid assets are excluded from the APY denominator)."},"navApy":{"type":"object","properties":{"rolling7d":{"type":"number","nullable":true},"rolling30d":{"type":"number","nullable":true},"sec30d":{"type":"number","nullable":true}},"required":["rolling7d","rolling30d","sec30d"],"description":"Price-delta (NAV-based) APY calculated from vault token price changes over time."},"breakdown":{"type":"object","properties":{"totalValue":{"type":"number"},"liquidAssets":{"type":"object","properties":{"totalValue":{"type":"number"},"weight":{"type":"number"}},"required":["totalValue","weight"]},"yieldAssets":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"value":{"type":"number"},"weight":{"type":"number"},"apy":{"type":"object","properties":{"rolling7d":{"type":"number","nullable":true},"rolling30d":{"type":"number","nullable":true},"sec30d":{"type":"number","nullable":true}},"required":["rolling7d","rolling30d","sec30d"]}},"required":["slug","value","weight","apy"]}}},"required":["totalValue","liquidAssets","yieldAssets"],"description":"Optional breakdown of how composition APY is calculated"},"errors":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","description":"The external API or service that caused the error"},"operation":{"type":"string","description":"The operation that failed"},"message":{"type":"string","description":"Human-readable error message"},"code":{"type":"string","enum":["TIMEOUT","NETWORK_ERROR","EXTERNAL_API_ERROR","UNKNOWN_ERROR"],"description":"Error classification code"},"timestamp":{"type":"number","description":"Unix timestamp in seconds when error occurred"}},"required":["source","operation","message","timestamp"]},"description":"Non-fatal errors that occurred during request processing (e.g., external API timeouts)"}},"required":["vaultAddress","apy","navApy"]}}}}
```

## GET /vaults/{slug}/tvl

> Get Vault TVL by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/tvl":{"get":{"tags":["Vaults"],"description":"Get Vault TVL by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"}],"responses":{"200":{"description":"Vault TVL","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultTvl"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultTvl":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"tvl":{"type":"number","nullable":true}},"required":["vaultAddress","tvl"]}}}}
```

## GET /vaults/{slug}

> Get VaultInfo by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}":{"get":{"tags":["Vaults"],"description":"Get VaultInfo by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"}],"responses":{"200":{"description":"VaultInfo","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultInfo"}},"required":["data"]}}}},"400":{"description":"Invalid slug","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultInfo":{"type":"object","properties":{"vaultType":{"type":"string","enum":["boring","nest","boringNest"]},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Canonical vault address (boring vault address or nest share OFT address)"},"nestShareOftAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestVaults":{"type":"array","items":{"type":"object","properties":{"nestVaultAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"asset":{"type":"string"},"chainAssets":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true},"assetAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"}},"required":["chainId","assetAddress"]},"minItems":1}},"required":["nestVaultAddress","chainAssets"]}},"nestComposers":{"type":"array","items":{"$ref":"#/components/schemas/PublicNestComposer"}},"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestAccountant":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chain":{"$ref":"#/components/schemas/ChainConfig"}},"required":["address","chain"],"description":"Address of the `NestAccountant` for the vault. If both `accountantAddress` and `nestAccountant` are defined for a vault, then `accountantAddress` is the legacy `AccountantWithRateProvider` and `nestAccountant` is the new `NestAccountant`."},"authorityAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"tellerContractAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"decimals":{"type":"number","description":"Default decimals for vault"},"decimalsOverride":{"type":"object","additionalProperties":{"type":"number"},"description":"Override for the number of decimals for the vault on specific chains"},"chain":{"$ref":"#/components/schemas/ChainConfig"},"solana":{"type":"object","properties":{"mintAddress":{"type":"string"},"composerAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"decimals":{"type":"number"},"startBlock":{"type":"number","description":"start block on Plume corresponding to launch of vault on Solana"}},"required":["mintAddress","startBlock"]},"liquidAssets":{"type":"array","items":{"$ref":"#/components/schemas/LiquidAsset"}},"slug":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"icon":{"type":"string"},"targetComposition":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["slug","name","description"]}},"sec30d":{"type":"number","nullable":true},"tvl":{"type":"number","nullable":true},"numHolders":{"type":"number","nullable":true},"volume24h":{"type":"number","nullable":true}},"required":["vaultType","vaultAddress","accountantAddress","authorityAddress","decimals","chain","liquidAssets","slug","name","symbol","icon","targetComposition","sec30d","tvl","numHolders","volume24h"]},"PublicNestComposer":{"type":"object","properties":{"asset":{"type":"string"},"composerAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"assetAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"}},"required":["asset","composerAddress"]},"ChainConfig":{"type":"object","properties":{"mainnet":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"plume":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"plasma":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"arbitrum":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"bsc":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]},"worldchain":{"type":"object","properties":{"startBlock":{"type":"number"}},"required":["startBlock"]}}},"LiquidAsset":{"type":"object","properties":{"contractAddress":{"type":"string","pattern":"^0x[a-f0-9]+$"},"symbol":{"type":"string"},"iconUrl":{"type":"string","nullable":true},"decimals":{"type":"number"},"price":{"type":"number"},"chainId":{"type":"number"},"minimumSourceRules":{"type":"array","items":{"type":"object","properties":{"sourceChain":{"type":"integer","minimum":0,"exclusiveMinimum":true},"sourceParams":{"type":"object","properties":{"excludeWallets":{"type":"array","items":{"type":"string"}}}}},"required":["sourceChain"]}}},"required":["contractAddress","symbol","decimals","price","chainId"]}}}}
```

## GET /vaults/{slug}/holders

> Get total number of holders and top holders for a vault by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/holders":{"get":{"tags":["Vaults"],"description":"Get total number of holders and top holders for a vault by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Optional chain ID"},"required":false,"description":"Optional chain ID","name":"chainId","in":"query"}],"responses":{"200":{"description":"Vault holders","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultHolders"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultHolders":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"totalHolders":{"type":"number","nullable":true},"holders":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"number"},"user":{"anyOf":[{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},{"type":"string"}]},"balance":{"type":"number"},"holderSince":{"type":"number"}},"required":["chainId","user","balance","holderSince"]},"description":"Top holders for the vault by balance"}},"required":["vaultAddress","totalHolders","holders"]}}}}
```

## GET /vaults/{slug}/volume

> Get latest 24h volume for a vault by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/volume":{"get":{"tags":["Vaults"],"description":"Get latest 24h volume for a vault by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"}],"responses":{"200":{"description":"Vault volume","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultVolume"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultVolume":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"volume24h":{"type":"number","nullable":true}},"required":["vaultAddress","volume24h"]}}}}
```

## GET /vaults/{slug}/pending-redemptions

> Get Vault pending redemptions by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/pending-redemptions":{"get":{"tags":["Vaults"],"description":"Get Vault pending redemptions by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Optional expiration start date filter. Defaults to 30 days ago if not provided."},"required":false,"description":"Optional expiration start date filter. Defaults to 30 days ago if not provided.","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"description":"Optional expiration end date"},"required":false,"description":"Optional expiration end date","name":"endDate","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Optional user address"},"required":false,"description":"Optional user address","name":"user","in":"query"},{"schema":{"type":"number","nullable":true,"description":"Optional chain ID"},"required":false,"description":"Optional chain ID","name":"chainId","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Optional atomic queue address. Only applies to atomicQueue redemptions."},"required":false,"description":"Optional atomic queue address. Only applies to atomicQueue redemptions.","name":"queueAddress","in":"query"},{"schema":{"type":"string","default":true,"description":"Optional boolean filter for only valid redemptions. Defaults to true. Only applies to atomicQueue redemptions"},"required":false,"description":"Optional boolean filter for only valid redemptions. Defaults to true. Only applies to atomicQueue redemptions","name":"onlyValid","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Optional asset address (NestVault only)"},"required":false,"description":"Optional asset address (NestVault only)","name":"assetAddress","in":"query"},{"schema":{"type":"string","enum":["atomicQueue","nest","all"],"description":"Optional redemption type. Defaults to atomicQueue for boring vaults and nest for nest vaults if not specified. If \"all\" is specified, all redemptions will be returned."},"required":false,"description":"Optional redemption type. Defaults to atomicQueue for boring vaults and nest for nest vaults if not specified. If \"all\" is specified, all redemptions will be returned.","name":"redemptionType","in":"query"}],"responses":{"200":{"description":"Vault's PendingRedemption(s)","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultPendingRedemptionsUnion"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultPendingRedemptionsUnion":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"pendingRedemptions":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/AtomicQueuePendingRedemptionEntry"},{"$ref":"#/components/schemas/NestVaultPendingRedemptionResponseEntry"}],"discriminator":{"propertyName":"redemptionType","mapping":{"atomicQueue":"#/components/schemas/AtomicQueuePendingRedemptionEntry","nest":"#/components/schemas/NestVaultPendingRedemptionResponseEntry"}}}}},"required":["vaultAddress","pendingRedemptions"]},"AtomicQueuePendingRedemptionEntry":{"type":"object","properties":{"requestTransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"amount":{"type":"number"},"requestedAt":{"type":"number"},"expiresAt":{"type":"number"},"queueAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"wantTokenContractAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"minPrice":{"type":"number","description":"The price in terms of `want` asset the user wants their `offer` assets 'sold' at"},"isValid":{"type":"boolean","description":"Whether the redemption is valid. False if the redemption is expired or invalid."},"redemptionType":{"type":"string","enum":["atomicQueue"]}},"required":["requestTransactionHash","user","chainId","amount","requestedAt","expiresAt","queueAddress","wantTokenContractAddress","minPrice","isValid","redemptionType"]},"NestVaultPendingRedemptionResponseEntry":{"allOf":[{"$ref":"#/components/schemas/NestVaultPendingRedemptionEntry"},{"type":"object","properties":{"redemptionType":{"type":"string","enum":["nest"]}},"required":["redemptionType"]}]},"NestVaultPendingRedemptionEntry":{"type":"object","properties":{"requestTransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestVaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"assetAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"initialShares":{"type":"number"},"currentPendingShares":{"type":"number"},"currentRedeemableShares":{"type":"number"},"requestedAt":{"type":"number"},"lastUpdatedAt":{"type":"number"},"operatorApproved":{"type":"boolean"}},"required":["requestTransactionHash","nestVaultAddress","user","chainId","assetAddress","initialShares","currentPendingShares","currentRedeemableShares","requestedAt","lastUpdatedAt","operatorApproved"]}}}}
```

## GET /vaults/{slug}/failed-redemptions

> Get Vault failed redemptions by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/failed-redemptions":{"get":{"tags":["Vaults"],"description":"Get Vault failed redemptions by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Optional expiration start date filter. Defaults to 30 days ago if not provided."},"required":false,"description":"Optional expiration start date filter. Defaults to 30 days ago if not provided.","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"description":"Optional expiration end date"},"required":false,"description":"Optional expiration end date","name":"endDate","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Optional user address"},"required":false,"description":"Optional user address","name":"user","in":"query"},{"schema":{"type":"number","nullable":true,"description":"Optional chain ID"},"required":false,"description":"Optional chain ID","name":"chainId","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Optional atomic queue address. Only applies to atomicQueue redemptions."},"required":false,"description":"Optional atomic queue address. Only applies to atomicQueue redemptions.","name":"queueAddress","in":"query"}],"responses":{"200":{"description":"Vault's FailedRedemption(s) for the given user","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultFailedRedemptions"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultFailedRedemptions":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"failedRedemptions":{"type":"array","items":{"type":"object","properties":{"requestTransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"amount":{"type":"number"},"requestedAt":{"type":"number"},"expiresAt":{"type":"number"},"queueAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"wantTokenContractAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"minPrice":{"type":"number","description":"The price in terms of `want` asset the user wants their `offer` assets 'sold' at"},"isValid":{"type":"boolean","description":"Whether the redemption is valid. False if the redemption is expired or invalid."}},"required":["requestTransactionHash","user","chainId","amount","requestedAt","expiresAt","queueAddress","wantTokenContractAddress","minPrice","isValid"]}}},"required":["vaultAddress","failedRedemptions"]}}}}
```

## GET /vaults/{slug}/fulfilled-redemptions

> Get Vault fulfilled redemptions by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/fulfilled-redemptions":{"get":{"tags":["Vaults"],"description":"Get Vault fulfilled redemptions by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Optional fulfillment start date filter. Defaults to 30 days ago if not provided."},"required":false,"description":"Optional fulfillment start date filter. Defaults to 30 days ago if not provided.","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"description":"Optional fulfillment end date"},"required":false,"description":"Optional fulfillment end date","name":"endDate","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Optional user address"},"required":false,"description":"Optional user address","name":"user","in":"query"},{"schema":{"type":"number","nullable":true,"description":"Optional chain ID"},"required":false,"description":"Optional chain ID","name":"chainId","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Optional atomic queue address. Only applies to atomicQueue redemptions."},"required":false,"description":"Optional atomic queue address. Only applies to atomicQueue redemptions.","name":"queueAddress","in":"query"},{"schema":{"type":"string","enum":["atomicQueue","nest","all"],"description":"Optional redemption type. Defaults to atomicQueue for boring vaults and nest for nest vaults if not specified. If \"all\" is specified, all redemptions will be returned."},"required":false,"description":"Optional redemption type. Defaults to atomicQueue for boring vaults and nest for nest vaults if not specified. If \"all\" is specified, all redemptions will be returned.","name":"redemptionType","in":"query"}],"responses":{"200":{"description":"Vault's FulfilledRedemption(s) for the given user","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultFulfilledRedemptions"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultFulfilledRedemptions":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"fulfilledRedemptions":{"type":"array","items":{"$ref":"#/components/schemas/FulfilledRedemption"}}},"required":["vaultAddress","fulfilledRedemptions"]},"FulfilledRedemption":{"type":"object","properties":{"transactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"offerAmountSpent":{"type":"number"},"wantAmountReceived":{"type":"number"},"chainId":{"type":"number"},"fulfilledAt":{"type":"number"}},"required":["transactionHash","user","offerAmountSpent","wantAmountReceived","chainId","fulfilledAt"]}}}}
```

## GET /vaults/{slug}/user/{user}/pending-redemptions

> Get summary and breakdown of pending redemptions for a specific user for a given vault slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/user/{user}/pending-redemptions":{"get":{"tags":["Vaults"],"description":"Get summary and breakdown of pending redemptions for a specific user for a given vault slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"string","minLength":1,"description":"User wallet address."},"required":true,"description":"User wallet address.","name":"user","in":"path"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Optional asset address to filter by"},"required":false,"description":"Optional asset address to filter by","name":"assetAddress","in":"query"}],"responses":{"200":{"description":"Vault's PendingRedemption(s) for the given user","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"pendingRedemptionSummary":{"type":"array","items":{"$ref":"#/components/schemas/NestVaultPendingRedemptionSummary"}}},"required":["pendingRedemptionSummary"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"NestVaultPendingRedemptionSummary":{"type":"object","properties":{"assetAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"currentPendingShares":{"type":"number"},"currentRedeemableShares":{"type":"number"},"currentClaimableAssets":{"type":"number"},"pendingRedemptions":{"type":"array","items":{"$ref":"#/components/schemas/NestVaultPendingRedemptionEntryWithHistory"}}},"required":["assetAddress","currentPendingShares","currentRedeemableShares","currentClaimableAssets","pendingRedemptions"]},"NestVaultPendingRedemptionEntryWithHistory":{"allOf":[{"$ref":"#/components/schemas/NestVaultPendingRedemptionBase"},{"type":"object","properties":{"currentClaimableAssets":{"type":"number"},"claimableAssetsSource":{"type":"string","enum":["estimated_per_request"]},"processedHistory":{"type":"array","items":{"$ref":"#/components/schemas/NestVaultProcessedRedemption"}}},"required":["currentClaimableAssets","claimableAssetsSource","processedHistory"]}]},"NestVaultPendingRedemptionBase":{"type":"object","properties":{"requestTransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestVaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"assetAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"initialShares":{"type":"number"},"currentPendingShares":{"type":"number"},"currentRedeemableShares":{"type":"number"},"requestedAt":{"type":"number"},"lastUpdatedAt":{"type":"number"},"operatorApproved":{"type":"boolean"}},"required":["requestTransactionHash","nestVaultAddress","user","chainId","assetAddress","initialShares","currentPendingShares","currentRedeemableShares","requestedAt","lastUpdatedAt","operatorApproved"]},"NestVaultProcessedRedemption":{"type":"object","properties":{"nestShareAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nestVaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"assetAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"requestTransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"transactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"logIndex":{"type":"number"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"updateType":{"type":"string","enum":["UPDATE_REDEEM","FULFILL_REDEEM","REDEEM","INSTANT_REDEEM"]},"sharesProcessed":{"type":"number"},"assetsProcessed":{"type":"number"},"processedAt":{"type":"number"},"redemptionRequestedAt":{"type":"number"}},"required":["nestShareAddress","nestVaultAddress","assetAddress","requestTransactionHash","transactionHash","logIndex","user","chainId","updateType","sharesProcessed","assetsProcessed","processedAt","redemptionRequestedAt"]}}}}
```

## GET /vaults/{slug}/last-price-update

> Get the latest indexed price updates for a vault by slug, filtered to the requested accountant or the default pricing accountant per chain

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/last-price-update":{"get":{"tags":["Vaults"],"description":"Get the latest indexed price updates for a vault by slug, filtered to the requested accountant or the default pricing accountant per chain","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Optional chain ID"},"required":false,"description":"Optional chain ID","name":"chainId","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Optional accountant address. If omitted, the endpoint uses the vault pricing accountant for each requested chain."},"required":false,"description":"Optional accountant address. If omitted, the endpoint uses the vault pricing accountant for each requested chain.","name":"accountantAddress","in":"query"}],"responses":{"200":{"description":"Vault latest price updates","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultLastPriceUpdate"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultLastPriceUpdate":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"lastPriceUpdates":{"type":"array","items":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Accountant contract that emitted the price update event."},"chainId":{"type":"number"},"price":{"type":"number"},"prevPrice":{"type":"number"},"updatedAt":{"type":"number"}},"required":["accountantAddress","chainId","price","prevPrice","updatedAt"]},"description":"Latest indexed price update for the requested accountant, or for the default pricing accountant on each configured chain when no accountant is specified."}},"required":["vaultAddress","lastPriceUpdates"]}}}}
```

## GET /vaults/{slug}/recent-transactions

> Get recent transactions for a vault by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/recent-transactions":{"get":{"tags":["Vaults"],"description":"Get recent transactions for a vault by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Optional chain ID"},"required":false,"description":"Optional chain ID","name":"chainId","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":10,"description":"Maximum number of transactions to return"},"required":false,"description":"Maximum number of transactions to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Recent transactions for the specified vault by slug","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"transactionCount7d":{"type":"number","description":"Number of transactions in the last 7 days"},"recentTransactions":{"type":"array","items":{"type":"object","properties":{"transactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Transaction hash"},"logIndex":{"type":"integer","description":"Log index of the event within the transaction receipt"},"transactionType":{"type":"string","enum":["DEPOSIT","WITHDRAW_REQUEST","WITHDRAW_FULFILL","WITHDRAW_UPDATE","WITHDRAW_CLAIM","PRE_DEPOSIT_MIGRATION","WITHDRAW_INSTANT"]},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Vault address"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"User address"},"createdAt":{"type":"number","description":"Transaction created at in epoch seconds"},"shares":{"type":"number","description":"Shares"},"sharesTokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Shares token address"},"assets":{"type":"number","nullable":true,"description":"Assets"},"assetsTokenAddress":{"type":"string","nullable":true,"pattern":"^0x[a-fA-F0-9]+$","description":"Assets token address"},"chainId":{"type":"number","description":"Chain ID"}},"required":["transactionHash","logIndex","transactionType","vaultAddress","user","createdAt","shares","sharesTokenAddress","assets","assetsTokenAddress","chainId"]}}},"required":["vaultAddress","transactionCount7d","recentTransactions"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}}}
```

## GET /vaults/{slug}/liquid-funds

> Get Liquid Funds by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/liquid-funds":{"get":{"tags":["Vaults"],"description":"Get Liquid Funds by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"string","default":false},"required":false,"name":"liveLiquidity","in":"query"}],"responses":{"200":{"description":"Liquid Funds","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"liquidFunds":{"type":"number","description":"Sum of all the liquidAsset balances for the vault."},"breakdown":{"type":"array","items":{"type":"object","properties":{"assetAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"balance":{"type":"number"}},"required":["assetAddress","chainId","balance"]},"description":"Breakdown of liquid funds by asset and chain."}},"required":["vaultAddress","liquidFunds","breakdown"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}}}
```

## GET /vaults/{slug}/price

> Get the NAV, price and total supply for a vault by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/price":{"get":{"tags":["Vaults"],"description":"Get the NAV, price and total supply for a vault by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"}],"responses":{"200":{"description":"Vault last price update","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultPriceInfo"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"VaultPriceInfo":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"nav":{"type":"number"},"price":{"type":"number"},"totalSupply":{"type":"number"},"interpolatedPrice":{"type":"number","description":"Synthetic interpolated price derived from the latest real price update and a fixed APR. Present only for supported vaults."}},"required":["vaultAddress","nav","price","totalSupply"]}}}}
```

## GET /vaults/{slug}/price-range

> Get the upper and lower bounds for price update for a vault by slug and chainId

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/price-range":{"get":{"tags":["Vaults"],"description":"Get the upper and lower bounds for price update for a vault by slug and chainId","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"default":98866,"description":"Chain ID. Defaults to Plume: 98866"},"required":false,"description":"Chain ID. Defaults to Plume: 98866","name":"chainId","in":"query"}],"responses":{"200":{"description":"Vault last price update","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"upperBound":{"type":"number","description":"Upper bound for price update"},"lowerBound":{"type":"number","description":"Lower bound for price update"}},"required":["upperBound","lowerBound"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}}}
```

## GET /vaults/{slug}/positions

> Get the asset positions for a vault by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/positions":{"get":{"tags":["Vaults"],"description":"Get the asset positions for a vault by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"string","default":false},"required":false,"name":"liveLiquidity","in":"query"}],"responses":{"200":{"description":"Vault asset positions","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"positions":{"type":"object","properties":{"liquidAssets":{"type":"array","items":{"type":"object","properties":{"tokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"symbol":{"type":"string","nullable":true},"position":{"type":"object","properties":{"value":{"type":"number"}},"required":["value"]},"pendingTransactions":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number"}},"required":["value"]}}},"required":["tokenAddress","chainId","symbol","position","pendingTransactions"]}},"yieldAssets":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"tokens":{"type":"array","items":{"type":"object","properties":{"tokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"symbol":{"type":"string","nullable":true},"position":{"type":"object","properties":{"amount":{"type":"number"},"price":{"type":"number"},"value":{"type":"number"},"yield":{"$ref":"#/components/schemas/yield"}},"required":["amount","price","value","yield"]},"pendingTransactions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["PendingDeposit","PendingWithdrawal"]},"amount":{"type":"number"},"price":{"type":"number"},"value":{"type":"number"},"requestId":{"type":"number"}},"required":["type","amount","price","value"]}}},"required":["tokenAddress","chainId","symbol","position","pendingTransactions"]}}},"required":["slug","tokens"]}}},"required":["liquidAssets","yieldAssets"]},"supplyByChain":{"type":"object","additionalProperties":{"type":"object","properties":{"supply":{"type":"number","nullable":true}},"required":["supply"]}},"errors":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","description":"The external API or service that caused the error"},"operation":{"type":"string","description":"The operation that failed"},"message":{"type":"string","description":"Human-readable error message"},"code":{"type":"string","enum":["TIMEOUT","NETWORK_ERROR","EXTERNAL_API_ERROR","UNKNOWN_ERROR"],"description":"Error classification code"},"timestamp":{"type":"number","description":"Unix timestamp in seconds when error occurred"}},"required":["source","operation","message","timestamp"]},"description":"Non-fatal errors that occurred during request processing (e.g., external API timeouts)"}},"required":["vaultAddress","positions","supplyByChain"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"yield":{"type":"number","nullable":true,"description":"yield from position, if available"}}}}
```

## GET /vaults/{slug}/token-minimums

> Get token minimums for a single vault by slug

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/token-minimums":{"get":{"tags":["Vaults"],"description":"Get token minimums for a single vault by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"}],"responses":{"200":{"description":"Token minimums for the vault","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"vaultAddress":{"type":"string"},"slug":{"type":"string"},"symbol":{"type":"string"},"minimums":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"number"},"tokenSymbol":{"type":"string"},"tokenAddress":{"type":"string"},"minimum":{"type":"number"}},"required":["chainId","tokenSymbol","tokenAddress","minimum"]}}},"required":["vaultAddress","slug","symbol","minimums"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}}}
```

## GET /vaults/{slug}/price-report

> Download a PDF price report for a vault containing asset composition, shares by chain, and calculated price

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/price-report":{"get":{"tags":["Vaults"],"description":"Download a PDF price report for a vault containing asset composition, shares by chain, and calculated price","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"}],"responses":{"200":{"description":"PDF price report file","content":{"application/pdf":{"schema":{"nullable":true}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}}}
```

## GET /vaults/{slug}/security-audit-report

> Download a PDF security audit report scaffold for a vault with the shared report header and footer

```json
{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"paths":{"/vaults/{slug}/security-audit-report":{"get":{"tags":["Vaults"],"description":"Download a PDF security audit report scaffold for a vault with the shared report header and footer","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault."},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"}],"responses":{"200":{"description":"PDF security audit report file","content":{"application/pdf":{"schema":{"nullable":true}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}}}
```
