{"openapi":"3.0.0","info":{"title":"Nest API","version":"1.0.0"},"servers":[{"url":"https://api.nest.credit/v1","description":"Nest API Server"}],"components":{"schemas":{"VaultInfo":{"type":"object","properties":{"complianceVersion":{"type":"string","enum":["v1","v2"]},"complianceVersionByChain":{"type":"object","additionalProperties":{"type":"string","enum":["v1","v2"]}},"complianceDeployments":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string","enum":["v1","v2"]},"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true},"enabled":{"type":"boolean"},"proxyAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"hookAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"apiChain":{"type":"string"},"startBlock":{"type":"integer","minimum":0}},"required":["version","chainId","enabled","proxyAddress"]}},"vaultType":{"type":"string","enum":["boring","nest","boringNest"]},"category":{"type":"string","enum":["nestVault","plumeAsset"]},"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]+$"},"isHubAccountant":{"type":"boolean","description":"Deprecated aggregate compatibility flag. Use `nestAccountant.chain[chain].accountantType` to select the NestHubAccountant vs NestSpokeAccountant state ABI per chain.","example":false},"nestAccountant":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"isHub":{"type":"boolean","description":"Deprecated aggregate compatibility flag. Use chain-level `accountantType` entries instead.","example":false},"chain":{"$ref":"#/components/schemas/ChainConfig"}},"required":["address","chain"],"description":"Nest accountant metadata for nest-style vaults. For `nest` vaults, `accountantAddress` and `nestAccountant.address` refer to the same Nest accountant. For `boringNest` vaults, `accountantAddress` is the original pricing accountant and `nestAccountant.address` is the rollout accountant; use chain-level `accountantAddress` when present and `accountantType` to select the exact state ABI."},"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","example":[{"56":18}]},"chain":{"$ref":"#/components/schemas/ChainConfig"},"solana":{"type":"object","properties":{"mintAddress":{"type":"string"},"oftStoreAddress":{"type":"string","description":"LayerZero OFT store/config account address on Solana"},"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","oftStoreAddress","startBlock"]},"liquidAssets":{"type":"array","items":{"$ref":"#/components/schemas/LiquidAsset"}},"slug":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"icon":{"type":"string"},"iconMini":{"type":"string","nullable":true},"targetComposition":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"image":{"type":"string","nullable":true}},"required":["slug","name","description"]}},"targetApy":{"type":"number","nullable":true,"description":"APY of vault's reported yield. Present when vault's current calculated APYs are not representative of vault yield."},"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","targetApy","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]+$"},"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true},"complianceVersion":{"type":"string","enum":["v1","v2"]},"cctpDepositEnabled":{"type":"boolean"},"depositAndSendDestinations":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true},"eid":{"type":"integer","minimum":0,"exclusiveMinimum":true}},"required":["chainId","eid"]},"description":"Candidate EVM mint destinations. Quote/build checks live permissions and reciprocal peers; registration alone does not imply readiness."},"startBlock":{"type":"integer","minimum":0}},"required":["asset","composerAddress"]},"ChainConfig":{"type":"object","properties":{"mainnet":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"startBlock":{"type":"number"},"accountantType":{"type":"string","enum":["hub","spoke","nest"],"description":"Nest accountant role on this chain. Nest and hub accountants use the full NestAccountant state ABI; spokes use the NestSpokeAccountant state ABI.","example":"spoke"}},"required":["startBlock"]},"base":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"startBlock":{"type":"number"},"accountantType":{"type":"string","enum":["hub","spoke","nest"],"description":"Nest accountant role on this chain. Nest and hub accountants use the full NestAccountant state ABI; spokes use the NestSpokeAccountant state ABI.","example":"spoke"}},"required":["startBlock"]},"plume":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"startBlock":{"type":"number"},"accountantType":{"type":"string","enum":["hub","spoke","nest"],"description":"Nest accountant role on this chain. Nest and hub accountants use the full NestAccountant state ABI; spokes use the NestSpokeAccountant state ABI.","example":"spoke"}},"required":["startBlock"]},"plasma":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"startBlock":{"type":"number"},"accountantType":{"type":"string","enum":["hub","spoke","nest"],"description":"Nest accountant role on this chain. Nest and hub accountants use the full NestAccountant state ABI; spokes use the NestSpokeAccountant state ABI.","example":"spoke"}},"required":["startBlock"]},"arbitrum":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"startBlock":{"type":"number"},"accountantType":{"type":"string","enum":["hub","spoke","nest"],"description":"Nest accountant role on this chain. Nest and hub accountants use the full NestAccountant state ABI; spokes use the NestSpokeAccountant state ABI.","example":"spoke"}},"required":["startBlock"]},"bsc":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"startBlock":{"type":"number"},"accountantType":{"type":"string","enum":["hub","spoke","nest"],"description":"Nest accountant role on this chain. Nest and hub accountants use the full NestAccountant state ABI; spokes use the NestSpokeAccountant state ABI.","example":"spoke"}},"required":["startBlock"]},"worldchain":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"startBlock":{"type":"number"},"accountantType":{"type":"string","enum":["hub","spoke","nest"],"description":"Nest accountant role on this chain. Nest and hub accountants use the full NestAccountant state ABI; spokes use the NestSpokeAccountant state ABI.","example":"spoke"}},"required":["startBlock"]},"avalanche":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"startBlock":{"type":"number"},"accountantType":{"type":"string","enum":["hub","spoke","nest"],"description":"Nest accountant role on this chain. Nest and hub accountants use the full NestAccountant state ABI; spokes use the NestSpokeAccountant state ABI.","example":"spoke"}},"required":["startBlock"]},"arc":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"startBlock":{"type":"number"},"accountantType":{"type":"string","enum":["hub","spoke","nest"],"description":"Nest accountant role on this chain. Nest and hub accountants use the full NestAccountant state ABI; spokes use the NestSpokeAccountant state ABI.","example":"spoke"}},"required":["startBlock"]},"morph":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"startBlock":{"type":"number"},"accountantType":{"type":"string","enum":["hub","spoke","nest"],"description":"Nest accountant role on this chain. Nest and hub accountants use the full NestAccountant state ABI; spokes use the NestSpokeAccountant state ABI.","example":"spoke"}},"required":["startBlock"]},"robinhood":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"startBlock":{"type":"number"},"accountantType":{"type":"string","enum":["hub","spoke","nest"],"description":"Nest accountant role on this chain. Nest and hub accountants use the full NestAccountant state ABI; spokes use the NestSpokeAccountant state ABI.","example":"spoke"}},"required":["startBlock"]},"monad":{"type":"object","properties":{"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"startBlock":{"type":"number"},"accountantType":{"type":"string","enum":["hub","spoke","nest"],"description":"Nest accountant role on this chain. Nest and hub accountants use the full NestAccountant state ABI; spokes use the NestSpokeAccountant state ABI.","example":"spoke"}},"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"]},"VaultDetails":{"type":"object","properties":{"complianceVersion":{"type":"string","enum":["v1","v2"]},"complianceVersionByChain":{"type":"object","additionalProperties":{"type":"string","enum":["v1","v2"]}},"complianceDeployments":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string","enum":["v1","v2"]},"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true},"enabled":{"type":"boolean"},"proxyAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"hookAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"apiChain":{"type":"string"},"startBlock":{"type":"integer","minimum":0}},"required":["version","chainId","enabled","proxyAddress"]}},"vaultType":{"type":"string","enum":["boring","nest","boringNest"]},"category":{"type":"string","enum":["nestVault","plumeAsset"]},"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]+$"},"isHubAccountant":{"type":"boolean","description":"Deprecated aggregate compatibility flag. Use `nestAccountant.chain[chain].accountantType` to select the NestHubAccountant vs NestSpokeAccountant state ABI per chain.","example":false},"nestAccountant":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"isHub":{"type":"boolean","description":"Deprecated aggregate compatibility flag. Use chain-level `accountantType` entries instead.","example":false},"chain":{"$ref":"#/components/schemas/ChainConfig"}},"required":["address","chain"],"description":"Nest accountant metadata for nest-style vaults. For `nest` vaults, `accountantAddress` and `nestAccountant.address` refer to the same Nest accountant. For `boringNest` vaults, `accountantAddress` is the original pricing accountant and `nestAccountant.address` is the rollout accountant; use chain-level `accountantAddress` when present and `accountantType` to select the exact state ABI."},"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","example":[{"56":18}]},"chain":{"$ref":"#/components/schemas/ChainConfig"},"solana":{"type":"object","properties":{"mintAddress":{"type":"string"},"oftStoreAddress":{"type":"string","description":"LayerZero OFT store/config account address on Solana"},"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","oftStoreAddress","startBlock"]},"liquidAssets":{"type":"array","items":{"$ref":"#/components/schemas/LiquidAsset"}},"slug":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"icon":{"type":"string"},"iconMini":{"type":"string","nullable":true},"targetComposition":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"image":{"type":"string","nullable":true}},"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"]},"VaultDetailsLite":{"type":"object","properties":{"complianceVersion":{"type":"string","enum":["v1","v2"]},"complianceVersionByChain":{"type":"object","additionalProperties":{"type":"string","enum":["v1","v2"]}},"complianceDeployments":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string","enum":["v1","v2"]},"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true},"enabled":{"type":"boolean"},"proxyAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"hookAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"apiChain":{"type":"string"},"startBlock":{"type":"integer","minimum":0}},"required":["version","chainId","enabled","proxyAddress"]}},"vaultType":{"type":"string","enum":["boring","nest","boringNest"]},"category":{"type":"string","enum":["nestVault","plumeAsset"]},"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]+$"},"isHubAccountant":{"type":"boolean","description":"Deprecated aggregate compatibility flag. Use `nestAccountant.chain[chain].accountantType` to select the NestHubAccountant vs NestSpokeAccountant state ABI per chain.","example":false},"nestAccountant":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"isHub":{"type":"boolean","description":"Deprecated aggregate compatibility flag. Use chain-level `accountantType` entries instead.","example":false},"chain":{"$ref":"#/components/schemas/ChainConfig"}},"required":["address","chain"],"description":"Nest accountant metadata for nest-style vaults. For `nest` vaults, `accountantAddress` and `nestAccountant.address` refer to the same Nest accountant. For `boringNest` vaults, `accountantAddress` is the original pricing accountant and `nestAccountant.address` is the rollout accountant; use chain-level `accountantAddress` when present and `accountantType` to select the exact state ABI."},"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","example":[{"56":18}]},"chain":{"$ref":"#/components/schemas/ChainConfig"},"solana":{"type":"object","properties":{"mintAddress":{"type":"string"},"oftStoreAddress":{"type":"string","description":"LayerZero OFT store/config account address on Solana"},"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","oftStoreAddress","startBlock"]},"liquidAssets":{"type":"array","items":{"$ref":"#/components/schemas/LiquidAsset"}},"slug":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"icon":{"type":"string"},"iconMini":{"type":"string","nullable":true},"targetComposition":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"image":{"type":"string","nullable":true}},"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"]},"VaultFeeHistory":{"type":"object","properties":{"slug":{"type":"string","description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"managementFee":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"UTC calendar date in YYYY-MM-DD format.","example":"2026-06-12"},"value":{"type":"number","description":"Daily summed fee value in USD.","example":1250.5}},"required":["date","value"]}},"performanceFee":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"UTC calendar date in YYYY-MM-DD format.","example":"2026-06-12"},"value":{"type":"number","description":"Daily summed fee value in USD.","example":1250.5}},"required":["date","value"]}},"instantRedemptionFee":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"UTC calendar date in YYYY-MM-DD format.","example":"2026-06-12"},"value":{"type":"number","description":"Daily summed fee value in USD.","example":1250.5}},"required":["date","value"]}},"depositFee":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"UTC calendar date in YYYY-MM-DD format.","example":"2026-06-12"},"value":{"type":"number","description":"Daily summed fee value in USD.","example":1250.5}},"required":["date","value"]}},"redemptionFee":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"UTC calendar date in YYYY-MM-DD format.","example":"2026-06-12"},"value":{"type":"number","description":"Daily summed fee value in USD.","example":1250.5}},"required":["date","value"]}},"feesClaimed":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"UTC calendar date in YYYY-MM-DD format.","example":"2026-06-12"},"value":{"type":"number","description":"Claimed fee-asset amount, normalized using the asset ERC-20 decimals.","example":1250.5}},"required":["date","value"]}}},"required":["slug","managementFee","performanceFee","instantRedemptionFee","depositFee","redemptionFee","feesClaimed"]},"VaultApy":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"targetApy":{"type":"number","nullable":true,"description":"APY of vault's reported yield. Present when vault's current calculated APYs are not representative of vault yield."},"apy":{"type":"object","properties":{"rolling7d":{"type":"number","nullable":true},"rolling30d":{"type":"number","nullable":true},"sec30d":{"type":"number","nullable":true}},"required":["rolling7d","rolling30d","sec30d"],"description":"Legacy alias for compositionApy. 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)."},"compositionApy":{"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"]},"offChainValue":{"type":"number"},"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","example":"superstate"},"operation":{"type":"string","description":"The operation that failed","example":"getPendingTransactions"},"message":{"type":"string","description":"Human-readable error message","example":"superstate getPendingTransactions timed out after 10000ms"},"code":{"type":"string","enum":["TIMEOUT","NETWORK_ERROR","EXTERNAL_API_ERROR","UNKNOWN_ERROR"],"description":"Error classification code","example":"TIMEOUT"},"timestamp":{"type":"number","description":"Unix timestamp in seconds when error occurred","example":1704067200}},"required":["source","operation","message","timestamp"]},"description":"Non-fatal errors that occurred during request processing (e.g., external API timeouts)"}},"required":["vaultAddress","targetApy","apy","compositionApy","navApy"]},"VaultTvl":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"tvl":{"type":"number","nullable":true}},"required":["vaultAddress","tvl"]},"VaultVolume":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"volume24h":{"type":"number","nullable":true}},"required":["vaultAddress","volume24h"]},"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"]},"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"]},"VaultApyHistory":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"history":{"type":"array","items":{"type":"object","properties":{"day":{"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"],"description":"Legacy alias for compositionApy. Composition-weighted yield APY for this day (liquid assets excluded from APY denominator)."},"compositionApy":{"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 for this day (liquid assets excluded from 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 for this day."}},"required":["day","apy","compositionApy","navApy"]},"description":"Only fully settled UTC days are included. Because the current UTC day is not yet settled, it is omitted even when it falls within the requested date range."},"errors":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","description":"The external API or service that caused the error","example":"superstate"},"operation":{"type":"string","description":"The operation that failed","example":"getPendingTransactions"},"message":{"type":"string","description":"Human-readable error message","example":"superstate getPendingTransactions timed out after 10000ms"},"code":{"type":"string","enum":["TIMEOUT","NETWORK_ERROR","EXTERNAL_API_ERROR","UNKNOWN_ERROR"],"description":"Error classification code","example":"TIMEOUT"},"timestamp":{"type":"number","description":"Unix timestamp in seconds when error occurred","example":1704067200}},"required":["source","operation","message","timestamp"]},"description":"Non-fatal errors that occurred during request processing (e.g., external API timeouts)"}},"required":["vaultAddress","history"]},"VaultTvlHistory":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"history":{"type":"array","items":{"type":"object","properties":{"day":{"type":"number"},"tvl":{"type":"number","nullable":true,"description":"TVL at close of day"}},"required":["day","tvl"]}}},"required":["vaultAddress","history"]},"VaultHoldersHistory":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"history":{"type":"array","items":{"type":"object","properties":{"day":{"type":"number"},"chainId":{"type":"number"},"start":{"type":"number","nullable":true},"end":{"type":"number","nullable":true},"min":{"type":"number","nullable":true},"max":{"type":"number","nullable":true},"average":{"type":"number","nullable":true},"count":{"type":"number","nullable":true}},"required":["day","chainId","start","end","min","max","average","count"]}}},"required":["vaultAddress","history"]},"VaultVolumeHistory":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"history":{"type":"array","items":{"type":"object","properties":{"day":{"type":"number"},"volume24h":{"type":"number","nullable":true}},"required":["day","volume24h"]}}},"required":["vaultAddress","history"]},"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"},{"$ref":"#/components/schemas/SolanaNestVaultPendingRedemptionResponseEntry"}],"discriminator":{"propertyName":"redemptionType","mapping":{"atomicQueue":"#/components/schemas/AtomicQueuePendingRedemptionEntry","nest":"#/components/schemas/NestVaultPendingRedemptionResponseEntry","solanaNest":"#/components/schemas/SolanaNestVaultPendingRedemptionResponseEntry"}}}}},"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"},"initialSharesRaw":{"type":"string","pattern":"^-?\\d+$","description":"Exact integer string preserving the original base-unit bigint value.","example":"708456132396282021"},"currentPendingShares":{"type":"number"},"currentPendingSharesRaw":{"type":"string","pattern":"^-?\\d+$","description":"Exact integer string preserving the original base-unit bigint value.","example":"708456132396282021"},"currentRedeemableShares":{"type":"number"},"currentRedeemableSharesRaw":{"type":"string","pattern":"^-?\\d+$","description":"Exact integer string preserving the original base-unit bigint value.","example":"708456132396282021"},"requestedAt":{"type":"number"},"lastUpdatedAt":{"type":"number"},"operatorApproved":{"type":"boolean"}},"required":["requestTransactionHash","nestVaultAddress","user","chainId","assetAddress","initialShares","initialSharesRaw","currentPendingShares","currentPendingSharesRaw","currentRedeemableShares","currentRedeemableSharesRaw","requestedAt","lastUpdatedAt","operatorApproved"]},"SolanaNestVaultPendingRedemptionResponseEntry":{"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]+$"},"composerAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"complianceVersion":{"type":"string","enum":["v1","v2"]},"requestTransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"userBase58":{"type":"string"},"receiver":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"receiverBase58":{"type":"string"},"chainId":{"type":"number"},"srcEid":{"type":"number"},"initialShares":{"type":"number"},"initialSharesRaw":{"type":"string","pattern":"^-?\\d+$","description":"Exact integer string preserving the original base-unit bigint value.","example":"708456132396282021"},"currentPendingShares":{"type":"number"},"currentPendingSharesRaw":{"type":"string","pattern":"^-?\\d+$","description":"Exact integer string preserving the original base-unit bigint value.","example":"708456132396282021"},"currentRedeemableShares":{"type":"number"},"currentRedeemableSharesRaw":{"type":"string","pattern":"^-?\\d+$","description":"Exact integer string preserving the original base-unit bigint value.","example":"708456132396282021"},"requestedAt":{"type":"number"},"redemptionType":{"type":"string","enum":["solanaNest"]}},"required":["nestShareAddress","nestVaultAddress","assetAddress","composerAddress","requestTransactionHash","user","userBase58","receiver","receiverBase58","chainId","srcEid","initialShares","initialSharesRaw","currentPendingShares","currentPendingSharesRaw","currentRedeemableShares","currentRedeemableSharesRaw","requestedAt","redemptionType"]},"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"]},"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"]},"NestVaultPendingRedemptionSummary":{"type":"object","properties":{"assetAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"currentPendingShares":{"type":"number"},"currentPendingSharesRaw":{"type":"string","pattern":"^-?\\d+$","description":"Exact integer string preserving the original base-unit bigint value.","example":"708456132396282021"},"currentRedeemableShares":{"type":"number"},"currentRedeemableSharesRaw":{"type":"string","pattern":"^-?\\d+$","description":"Exact integer string preserving the original base-unit bigint value.","example":"708456132396282021"},"currentClaimableAssets":{"type":"number"},"pendingRedemptions":{"type":"array","items":{"$ref":"#/components/schemas/NestVaultPendingRedemptionEntryWithHistory"}}},"required":["assetAddress","currentPendingShares","currentPendingSharesRaw","currentRedeemableShares","currentRedeemableSharesRaw","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"]}]},"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","INVALID_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"]},"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"},"initialSharesRaw":{"type":"string","pattern":"^-?\\d+$","description":"Exact integer string preserving the original base-unit bigint value.","example":"708456132396282021"},"currentPendingShares":{"type":"number"},"currentPendingSharesRaw":{"type":"string","pattern":"^-?\\d+$","description":"Exact integer string preserving the original base-unit bigint value.","example":"708456132396282021"},"currentRedeemableShares":{"type":"number"},"currentRedeemableSharesRaw":{"type":"string","pattern":"^-?\\d+$","description":"Exact integer string preserving the original base-unit bigint value.","example":"708456132396282021"},"requestedAt":{"type":"number"},"lastUpdatedAt":{"type":"number"},"operatorApproved":{"type":"boolean"}},"required":["requestTransactionHash","nestVaultAddress","user","chainId","assetAddress","initialShares","initialSharesRaw","currentPendingShares","currentPendingSharesRaw","currentRedeemableShares","currentRedeemableSharesRaw","requestedAt","lastUpdatedAt","operatorApproved"]},"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.","example":"0x1234567890123456789012345678901234567890"},"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"]},"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"]},"yield":{"type":"number","nullable":true,"description":"yield from position, if available"},"VaultAuthority":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"accountantAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Accountant address of the vault","example":"0x1234567890123456789012345678901234567890"},"isHubAccountant":{"type":"boolean","description":"Deprecated aggregate compatibility flag. Use `nestAccountant.chain[chain].accountantType` to select the NestHubAccountant vs NestSpokeAccountant state ABI per chain.","example":false},"nestAccountant":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chain":{"$ref":"#/components/schemas/ChainConfig"}},"required":["address","chain"],"description":"Nest accountant metadata for nest and boringNest vaults."},"nestAuthority":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chain":{"$ref":"#/components/schemas/ChainConfig"}},"required":["address","chain"],"description":"Separate authority governing the Nest accountant and deposit vaults when the share retains its legacy authority."},"authority":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Authority contract address for the share token and legacy stack. Use nestAuthority for the migrated stack when present.","example":"0x1234567890123456789012345678901234567890"}},"required":["vaultAddress","accountantAddress","authority"]},"VaultRoleAssignmentsPaginated":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"roleAssignments":{"type":"array","items":{"$ref":"#/components/schemas/RoleAssignment"},"description":"List of role assignments for the vault"},"pageInfo":{"type":"object","properties":{"endCursor":{"type":"string","nullable":true,"description":"Cursor to fetch the next page of results"},"hasNextPage":{"type":"boolean","description":"Whether another page of results is available"}},"required":["endCursor","hasNextPage"]}},"required":["vaultAddress","roleAssignments","pageInfo"]},"RoleAssignment":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"User address with the role assignment","example":"0x1234567890123456789012345678901234567890"},"role":{"type":"string","enum":["STRATEGIST","MANAGER","TELLER","UPDATE_EXCHANGE_RATE","SOLVER","PAUSER","DEPOSITOR"],"description":"Role assigned to the user","example":"STRATEGIST"},"enabled":{"type":"boolean","description":"Whether the role assignment is enabled","example":true},"chainId":{"type":"number","description":"Chain ID where the role assignment exists","example":1}},"required":["vaultAddress","user","role","enabled","chainId"]},"VaultPendingRedemptions":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"pendingRedemptions":{"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","pendingRedemptions"]},"VaultCompositionHistory":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"history":{"type":"array","items":{"type":"object","properties":{"day":{"type":"number","description":"Unix timestamp at start of day (UTC)"},"totalValue":{"type":"number","description":"Total vault value in USD"},"liquidAssets":{"type":"object","properties":{"totalValue":{"type":"number","description":"Total value of liquid assets in USD"},"weight":{"type":"number","description":"Proportion of vault total value (0-1)"},"assets":{"type":"array","items":{"type":"object","properties":{"assetAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"value":{"type":"number","description":"Value in USD"}},"required":["assetAddress","chainId","value"]},"description":"Individual liquid asset positions"}},"required":["totalValue","weight","assets"]},"offChainValue":{"type":"number","description":"Off-chain value in USD"},"yieldAssets":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"Unique identifier for the yield asset"},"totalValue":{"type":"number","description":"Total value across all tokens in USD"},"weight":{"type":"number","description":"Proportion of vault total value (0-1)"},"tokens":{"type":"array","items":{"type":"object","properties":{"tokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"isPending":{"type":"boolean","description":"When true, this token entry represents pending (in-transit) redemption value rather than an on-chain token balance."},"balance":{"type":"number","description":"Token balance in native units"},"price":{"type":"number","description":"Price per token in USD"},"value":{"type":"number","description":"Total value in USD (balance * price)"}},"required":["tokenAddress","chainId","balance","price","value"]},"description":"Individual token positions within this yield asset"}},"required":["slug","totalValue","weight","tokens"]}}},"required":["day","totalValue","liquidAssets","yieldAssets"]}}},"required":["vaultAddress","history"]},"VaultPerformanceHistory":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"assets":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["slug","name"]}},"history":{"type":"array","items":{"type":"object","properties":{"day":{"type":"number"},"vault":{"type":"object","properties":{"price":{"type":"number","nullable":true},"tvl":{"type":"number","nullable":true},"liquidFunds":{"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"]},"navApy":{"type":"object","properties":{"rolling7d":{"type":"number","nullable":true},"rolling30d":{"type":"number","nullable":true},"sec30d":{"type":"number","nullable":true}},"required":["rolling7d","rolling30d","sec30d"]}},"required":["price","tvl","liquidFunds","apy","navApy"]},"assets":{"type":"object","additionalProperties":{"type":"object","properties":{"price":{"type":"number","nullable":true},"apy7d":{"type":"number","nullable":true},"apy30d":{"type":"number","nullable":true},"compositionPct":{"type":"number","nullable":true}},"required":["price","apy7d","apy30d","compositionPct"]}}},"required":["day","vault"]},"description":"Current UTC day entries may include price, TVL, and liquid funds, but `apy` and `navApy` remain null until that UTC day is fully settled."}},"required":["vaultAddress","assets","history"]},"PredicateMessage":{"type":"object","properties":{"taskId":{"type":"string","nullable":true},"expireByBlockNumber":{"type":"number","nullable":true,"deprecated":true,"description":"Deprecated field. Use `expireByTime` instead."},"expireByTime":{"type":"number","nullable":true},"signerAddresses":{"type":"array","items":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"}},"signatures":{"type":"array","items":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"}}},"required":["taskId","expireByBlockNumber","expireByTime","signerAddresses","signatures"]},"PredicateV2Attestation":{"type":"object","nullable":true,"properties":{"uuid":{"type":"string"},"expiration":{"type":"number","description":"Unix timestamp (seconds) the attestation expires at."},"attester":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"signature":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"}},"required":["uuid","expiration","attester","signature"]},"PredicateV2Reason":{"type":"object","nullable":true,"properties":{"code":{"type":"string","nullable":true},"message":{"type":"string","nullable":true}},"required":["code","message"]}},"parameters":{}},"paths":{"/vaults":{"get":{"tags":["Vaults"],"description":"Get all vaults info","parameters":[{"schema":{"type":"string","default":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","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","example":"Bad Request"}},"required":["error"]}}}}}}},"/vaults/details":{"get":{"tags":["Vaults"],"description":"Get VaultDetails for all vaults","parameters":[{"schema":{"type":"string","default":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","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","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/details-lite":{"get":{"tags":["Vaults"],"description":"Get VaultDetailsLite for all vaults","parameters":[{"schema":{"type":"string","default":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","in":"query"},{"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","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/fees/config/history":{"get":{"tags":["Vaults"],"description":"Get fee configuration update history across all indexed vaults and chains.","parameters":[{"schema":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"description":"Optional vault slug list. Repeat the query parameter to request multiple vaults."},"required":false,"description":"Optional vault slug list. Repeat the query parameter to request multiple vaults.","name":"slug","in":"query"},{"schema":{"type":"string","pattern":"^\\d+$","description":"Inclusive Unix timestamp in seconds, encoded as a decimal string.","example":"1767225600"},"required":false,"description":"Inclusive Unix timestamp in seconds, encoded as a decimal string.","name":"startTimestamp","in":"query"},{"schema":{"type":"string","pattern":"^\\d+$","description":"Inclusive Unix timestamp in seconds, encoded as a decimal string.","example":"1767225600"},"required":false,"description":"Inclusive Unix timestamp in seconds, encoded as a decimal string.","name":"endTimestamp","in":"query"},{"schema":{"type":"string","enum":["managementFee","performanceFee","hurdleRate","holdbackRate","crystallizationWindow","epochsPerWindow"],"description":"Optional fee configuration update type.","example":"managementFee"},"required":false,"description":"Optional fee configuration update type.","name":"type","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"Maximum number of updates to return.","example":50},"required":false,"description":"Maximum number of updates to return.","name":"limit","in":"query"},{"schema":{"type":"string","description":"Opaque cursor returned by the previous page."},"required":false,"description":"Opaque cursor returned by the previous page.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Fee configuration update history, ordered newest first.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"integer","minimum":0,"description":"Block timestamp in Unix seconds.","example":1767225600},"transactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Transaction that emitted the configuration update."},"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Chain where the update was emitted.","example":98866},"slug":{"type":"string","description":"Vault slug associated with the accountant.","example":"nest-alpha-vault"},"eventType":{"type":"string","enum":["managementFee","performanceFee","hurdleRate","holdbackRate","crystallizationWindow","epochsPerWindow"]},"oldValue":{"type":"integer","nullable":true,"minimum":0,"description":"Previous raw uint32 configuration value, or null for the initial configuration.","example":10000},"newValue":{"type":"integer","minimum":0,"description":"New raw uint32 configuration value.","example":15000}},"required":["timestamp","transactionHash","chainId","slug","eventType","oldValue","newValue"]}},"pageInfo":{"type":"object","properties":{"endCursor":{"type":"string","nullable":true,"description":"Cursor to fetch the next page, or null when the page is empty."},"hasNextPage":{"type":"boolean","description":"Whether another page of results is available."}},"required":["endCursor","hasNextPage"]}},"required":["data","pageInfo"]}}}},"400":{"description":"Invalid timestamp range or fee configuration update type.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/fees":{"get":{"tags":["Vaults"],"description":"Get daily accrued and claimed fees by vault across all indexed chains.","parameters":[{"schema":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"description":"Optional vault slug list. Repeat the query parameter to request multiple vaults."},"required":false,"description":"Optional vault slug list. Repeat the query parameter to request multiple vaults.","name":"slug","in":"query"},{"schema":{"type":"string","description":"Inclusive UTC start date. Defaults to one calendar year before endDate.","example":"2025-06-12"},"required":false,"description":"Inclusive UTC start date. Defaults to one calendar year before endDate.","name":"startDate","in":"query"},{"schema":{"type":"string","description":"Inclusive UTC end date. Defaults to today.","example":"2026-06-12"},"required":false,"description":"Inclusive UTC end date. Defaults to today.","name":"endDate","in":"query"}],"responses":{"200":{"description":"Daily fee history for the requested vaults.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultFeeHistory"}}},"required":["data"]}}}},"400":{"description":"Invalid date range or unknown vault slug.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/apy":{"get":{"tags":["Vaults"],"description":"Get 7d, 30d and SEC 30d APYs for all vaults. `compositionApy` is the composition-weighted yield APY based on underlying yield-bearing assets (liquid assets and off-chain value are excluded from the APY denominator). `apy` is a legacy alias for `compositionApy`. `navApy` is the price-delta (NAV-based) APY computed from vault token price changes. `targetApy` is the APY of vault's reported yield. It is present when vault's current calculated APYs are not representative of vault yield.","parameters":[{"schema":{"type":"string","default":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","in":"query"},{"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"]}}}}}}},"/vaults/tvl":{"get":{"tags":["Vaults"],"description":"Get VaultTVL for all vaults","parameters":[{"schema":{"type":"string","default":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","in":"query"},{"schema":{"type":"string","default":false},"required":false,"name":"liveLiquidity","in":"query"}],"responses":{"200":{"description":"VaultTVL for all vaults","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultTvl"}}},"required":["data"]}}}}}}},"/vaults/volume":{"get":{"tags":["Vaults"],"description":"Get last 24h volume for all vaults","parameters":[{"schema":{"type":"string","default":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","in":"query"}],"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","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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"},{"schema":{"type":"string","default":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","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","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","in":"query"},{"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","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/recent-transactions":{"get":{"tags":["Vaults"],"description":"Get recent transactions for all vaults","parameters":[{"schema":{"type":"string","default":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","in":"query"},{"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","example":10},"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","example":100},"recentTransactions":{"type":"array","items":{"type":"object","properties":{"transactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Transaction hash","example":"0x1234567890123456789012345678901234567890"},"logIndex":{"type":"integer","description":"Log index of the event within the transaction receipt","example":12},"transactionType":{"type":"string","enum":["DEPOSIT","WITHDRAW_REQUEST","WITHDRAW_FULFILL","WITHDRAW_UPDATE","WITHDRAW_CLAIM","INVALID_WITHDRAW_CLAIM","PRE_DEPOSIT_MIGRATION","WITHDRAW_INSTANT"]},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Vault address","example":"0x1234567890123456789012345678901234567890"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"User address","example":"0x1234567890123456789012345678901234567890"},"createdAt":{"type":"number","description":"Transaction created at in epoch seconds","example":1717334400},"shares":{"type":"number","description":"Shares","example":100},"sharesTokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Shares token address","example":"0x1234567890123456789012345678901234567890"},"assets":{"type":"number","nullable":true,"description":"Assets","example":100},"assetsTokenAddress":{"type":"string","nullable":true,"pattern":"^0x[a-fA-F0-9]+$","description":"Assets token address","example":"0x1234567890123456789012345678901234567890"},"destinationChainId":{"type":"number","nullable":true,"description":"Destination of a composer deposit; does not imply bridge delivery."},"recipient":{"type":"string","nullable":true,"pattern":"^0x[a-fA-F0-9]+$","description":"Destination recipient for a composer deposit; user remains the depositor."},"chainId":{"type":"number","description":"Chain ID","example":1}},"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","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/apy-history":{"get":{"tags":["Vault History"],"description":"Get APY history for all vaults for the given date range. Only fully settled UTC days are included. Because the current UTC day is not yet settled, it is omitted even when it falls within the requested date range. `compositionApy` is the composition-weighted yield APY (liquid assets and off-chain value are excluded from the APY denominator). `apy` is a legacy alias for `compositionApy`. `navApy` is the price-delta (NAV-based) APY computed from vault token price changes.","parameters":[{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Ordering for history arrays. `desc` returns newest first. `asc` returns oldest first.","example":"desc"},"required":false,"description":"Ordering for history arrays. `desc` returns newest first. `asc` returns oldest first.","name":"order","in":"query"},{"schema":{"type":"number","nullable":true,"default":98866,"description":"Optional chain ID. Defaults to Plume: 98866"},"required":false,"description":"Optional chain ID. Defaults to Plume: 98866","name":"chainId","in":"query"},{"schema":{"type":"string","default":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","in":"query"}],"responses":{"200":{"description":"Vault APY history with composition and NAV-based APY","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultApyHistory"}}},"required":["data"]}}}}}}},"/vaults/tvl-history":{"get":{"tags":["Vault History"],"description":"Get TVL history for all vaults for the given date range","parameters":[{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"},{"schema":{"type":"string","default":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","in":"query"}],"responses":{"200":{"description":"VaultTVLHistory for all vaults","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultTvlHistory"}}},"required":["data"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/holders-history":{"get":{"tags":["Vault History"],"description":"Get VaultHoldersHistory for all vaults for the given date range","parameters":[{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"},{"schema":{"type":"string","default":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","in":"query"}],"responses":{"200":{"description":"VaultHoldersHistory for all vaults for the given date range","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultHoldersHistory"}}},"required":["data"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/volume-history":{"get":{"tags":["Vault History"],"description":"Get daily volume history for all vaults for the given date range","parameters":[{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"},{"schema":{"type":"string","default":true,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","deprecated":true,"example":"true"},"required":false,"description":"DEPRECATED: Use status instead. Legacy status filter. true returns active vaults; false returns non-active vaults. Ignored when status is provided.","name":"live","in":"query"},{"schema":{"type":"string","enum":["active","disabled","coming_soon","hidden","all"],"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","example":"active"},"required":false,"description":"Filter vaults by CMS status. Defaults to active. Use all to include every vault regardless of CMS status.","name":"status","in":"query"}],"responses":{"200":{"description":"Daily volume history for all vaults for the given date range","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultVolumeHistory"}}},"required":["data"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/details":{"get":{"tags":["Vaults"],"description":"Get VaultDetails by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-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","example":"Bad Request"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}}}}},"/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.","example":"nest-alpha-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","example":"Bad Request"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}}}}},"/vaults/{slug}/apy":{"get":{"tags":["Vaults"],"description":"Get Vault APY by slug. `compositionApy` is the composition-weighted yield APY based on underlying yield-bearing assets (liquid assets and off-chain value are excluded from the APY denominator). `apy` is a legacy alias for `compositionApy`. `navApy` is the price-delta (NAV-based) APY computed from vault token price changes. `targetApy` is the APY of vault's reported yield. It is present when vault's current calculated APYs are not representative of vault yield.","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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 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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}":{"get":{"tags":["Vaults"],"description":"Get VaultInfo by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-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","example":"Bad Request"}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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","description":"Optional user address. For Solana chain ID 9999999, accepts bytes32 hex or base58."},"required":false,"description":"Optional user address. For Solana chain ID 9999999, accepts bytes32 hex or base58.","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 all during a parallel AtomicQueue/Nest migration, then an explicit registry default, then nest for a Nest share deployment on the requested chain. Otherwise defaults to atomicQueue for boring/boringNest vaults and nest for nest vaults. Explicit nest, atomicQueue, and all selections are always honored."},"required":false,"description":"Optional redemption type. Defaults to all during a parallel AtomicQueue/Nest migration, then an explicit registry default, then nest for a Nest share deployment on the requested chain. Otherwise defaults to atomicQueue for boring/boringNest vaults and nest for nest vaults. Explicit nest, atomicQueue, and all selections are always honored.","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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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 all during a parallel AtomicQueue/Nest migration, then an explicit registry default, then nest for a Nest share deployment on the requested chain. Otherwise defaults to atomicQueue for boring/boringNest vaults and nest for nest vaults. Explicit nest, atomicQueue, and all selections are always honored."},"required":false,"description":"Optional redemption type. Defaults to all during a parallel AtomicQueue/Nest migration, then an explicit registry default, then nest for a Nest share deployment on the requested chain. Otherwise defaults to atomicQueue for boring/boringNest vaults and nest for nest vaults. Explicit nest, atomicQueue, and all selections are always honored.","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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"string","minLength":1,"description":"User wallet address.","example":"0x1234567890123456789012345678901234567890"},"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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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.","example":"0x1234567890123456789012345678901234567890"},"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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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","example":10},"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","example":100},"recentTransactions":{"type":"array","items":{"type":"object","properties":{"transactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Transaction hash","example":"0x1234567890123456789012345678901234567890"},"logIndex":{"type":"integer","description":"Log index of the event within the transaction receipt","example":12},"transactionType":{"type":"string","enum":["DEPOSIT","WITHDRAW_REQUEST","WITHDRAW_FULFILL","WITHDRAW_UPDATE","WITHDRAW_CLAIM","INVALID_WITHDRAW_CLAIM","PRE_DEPOSIT_MIGRATION","WITHDRAW_INSTANT"]},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Vault address","example":"0x1234567890123456789012345678901234567890"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"User address","example":"0x1234567890123456789012345678901234567890"},"createdAt":{"type":"number","description":"Transaction created at in epoch seconds","example":1717334400},"shares":{"type":"number","description":"Shares","example":100},"sharesTokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Shares token address","example":"0x1234567890123456789012345678901234567890"},"assets":{"type":"number","nullable":true,"description":"Assets","example":100},"assetsTokenAddress":{"type":"string","nullable":true,"pattern":"^0x[a-fA-F0-9]+$","description":"Assets token address","example":"0x1234567890123456789012345678901234567890"},"destinationChainId":{"type":"number","nullable":true,"description":"Destination of a composer deposit; does not imply bridge delivery."},"recipient":{"type":"string","nullable":true,"pattern":"^0x[a-fA-F0-9]+$","description":"Destination recipient for a composer deposit; user remains the depositor."},"chainId":{"type":"number","description":"Chain ID","example":1}},"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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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.","example":100},"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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/calculated-price":{"get":{"tags":["Vault Positions"],"description":"Get Vault calculated NAV, calculated price and Total Supply by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-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 Calculated NAV, Price, Supply and component breakdown","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"accountantVersions":{"type":"object","additionalProperties":{"type":"string","nullable":true},"description":"Accountant implementation versions keyed by chain ID. A null value means the chain accountant does not expose version() or the read failed.","example":{"1":"0.0.2","98866":null}},"grossCalculatedNav":{"type":"number","description":"Calculated vault NAV before deducting hub-accountant claimable fees and the performance-fee reserve."},"claimableFees":{"type":"number","minimum":0,"description":"Fees owed in the hub accountant base asset, deducted from calculatedNav."},"feeReserve":{"type":"number","minimum":0,"description":"Performance-fee holdback reserve in the hub accountant base asset, deducted from calculatedNav."},"claimableFeesAdjusted":{"type":"boolean","description":"True when calculatedNav and calculatedPrice already deduct claimableFees and feeReserve."},"calculatedNav":{"type":"number"},"calculatedPrice":{"type":"number"},"unrealizedDividends":{"type":"number","description":"NAV shim from nest_ops.vault_configurations.shim_dollars included in calculatedNav.","example":0},"totalSupply":{"type":"number"},"yieldStrategyPrices":{"type":"object","properties":{"ewma":{"type":"number","nullable":true,"description":"Next price produced by the backend EWMA yield strategy. Null when the current price, latest indexed update, or safe calculated price is unavailable.","example":1.087038},"assetNav":{"type":"number","nullable":true,"description":"Authoritative per-unit underlying NAV price when supplied directly by an asset integration; otherwise, the price produced by replacing amount × price for registered assets with their alternative NAV functions. Equals calculatedPrice when the vault has no registered asset overrides; null when a required NAV is unavailable.","example":1.086942},"assetNavSource":{"type":"string","enum":["DIRECT"],"description":"Present when assetNav came directly from an asset integration and must not receive vault-level adjustments.","example":"DIRECT"}},"required":["ewma","assetNav"]},"errors":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","description":"The external API or service that caused the error","example":"superstate"},"operation":{"type":"string","description":"The operation that failed","example":"getPendingTransactions"},"message":{"type":"string","description":"Human-readable error message","example":"superstate getPendingTransactions timed out after 10000ms"},"code":{"type":"string","enum":["TIMEOUT","NETWORK_ERROR","EXTERNAL_API_ERROR","UNKNOWN_ERROR"],"description":"Error classification code","example":"TIMEOUT"},"timestamp":{"type":"number","description":"Unix timestamp in seconds when error occurred","example":1704067200}},"required":["source","operation","message","timestamp"]},"description":"Non-fatal errors that occurred during request processing (e.g., external API timeouts)"}},"required":["vaultAddress","accountantVersions","grossCalculatedNav","claimableFees","feeReserve","claimableFeesAdjusted","calculatedNav","calculatedPrice","unrealizedDividends","totalSupply","yieldStrategyPrices"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/unrealized-dividends":{"get":{"tags":["Vaults"],"description":"Get unrealized dividends for a vault by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"}],"responses":{"200":{"description":"Vault unrealized dividends","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"unrealizedDividends":{"type":"number","description":"Vault NAV shim (unrealized dividends) from nest_ops.vault_configurations.shim_dollars, denominated in the vault NAV currency.","example":0}},"required":["vaultAddress","unrealizedDividends"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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"]}},"offChainValue":{"type":"number"},"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},"supplyRaw":{"type":"string","nullable":true},"decimals":{"type":"number"}},"required":["supply","supplyRaw","decimals"]}},"errors":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","description":"The external API or service that caused the error","example":"superstate"},"operation":{"type":"string","description":"The operation that failed","example":"getPendingTransactions"},"message":{"type":"string","description":"Human-readable error message","example":"superstate getPendingTransactions timed out after 10000ms"},"code":{"type":"string","enum":["TIMEOUT","NETWORK_ERROR","EXTERNAL_API_ERROR","UNKNOWN_ERROR"],"description":"Error classification code","example":"TIMEOUT"},"timestamp":{"type":"number","description":"Unix timestamp in seconds when error occurred","example":1704067200}},"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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/vault-holders":{"get":{"tags":["Vaults"],"description":"Get paginated pUSD holders for the supported vault slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"string","description":"Optional page number. Invalid values default to 1.","example":"1"},"required":false,"description":"Optional page number. Invalid values default to 1.","name":"page","in":"query"},{"schema":{"type":"string","description":"Optional page size. Invalid values default to 50; values above 200 are clamped.","example":"50"},"required":false,"description":"Optional page size. Invalid values default to 50; values above 200 are clamped.","name":"pageSize","in":"query"}],"responses":{"200":{"description":"Paginated pUSD holders","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"walletAddress":{"type":"string","description":"Holder wallet address","example":"0x1234567890123456789012345678901234567890"},"balance":{"type":"string","description":"Current pUSD balance as an exact decimal string","example":"1046.686418"},"position":{"type":"string","description":"Current pUSD position as an exact decimal string","example":"1046.686418"},"firstInteractionDate":{"type":"string","description":"UTC date of the first indexed interaction","example":"2026-03-13"},"lastInteractionDate":{"type":"string","description":"UTC date of the latest indexed interaction","example":"2026-03-14"}},"required":["walletAddress","balance","position","firstInteractionDate","lastInteractionDate"]}},"page":{"type":"number","description":"Current page number","example":1},"nextPage":{"type":"number","nullable":true,"description":"Next page number when more results are available","example":2},"pageSize":{"type":"number","description":"Applied page size","example":50},"hasMore":{"type":"boolean","description":"Whether more results are available","example":false}},"required":["users","page","nextPage","pageSize","hasMore"]}},"required":["data"]}}}},"404":{"description":"Unsupported slug","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Vault holders route only supports slug 'plume-usd-vault'"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/authority":{"get":{"tags":["Vault Auth"],"description":"Get Vault Authority by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"}],"responses":{"200":{"description":"Vault authority","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultAuthority"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/roles-assignments":{"get":{"tags":["Vault Auth"],"description":"Get Vault Role Assignments by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","minimum":1,"maximum":200,"default":50,"description":"Maximum number of role assignments to return","example":50},"required":false,"description":"Maximum number of role assignments to return","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor returned from a previous request"},"required":false,"description":"Cursor returned from a previous request","name":"cursor","in":"query"}],"responses":{"200":{"description":"Vault role assignments","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultRoleAssignmentsPaginated"}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"example":{"error":"Invalid cursor"}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/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.","example":"nest-alpha-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","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/apy-history":{"get":{"tags":["Vault History"],"description":"Get APY history for vault by slug for the given date range. Only fully settled UTC days are included. Because the current UTC day is not yet settled, it is omitted even when it falls within the requested date range. `compositionApy` is the composition-weighted yield APY (liquid assets and off-chain value are excluded from the APY denominator). `apy` is a legacy alias for `compositionApy`. `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.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Ordering for history arrays. `desc` returns newest first. `asc` returns oldest first.","example":"desc"},"required":false,"description":"Ordering for history arrays. `desc` returns newest first. `asc` returns oldest first.","name":"order","in":"query"},{"schema":{"type":"number","nullable":true,"default":98866,"description":"Optional chain ID. Defaults to Plume: 98866"},"required":false,"description":"Optional chain ID. Defaults to Plume: 98866","name":"chainId","in":"query"}],"responses":{"200":{"description":"Vault APY history with composition and NAV-based APY","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultApyHistory"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/tvl-history":{"get":{"tags":["Vault History"],"description":"Get Vault TVL history by slug for the given date range","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"}],"responses":{"200":{"description":"Vault TVL history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultTvlHistory"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/holders-history":{"get":{"tags":["Vault History"],"description":"Get Vault holders history by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"}],"responses":{"200":{"description":"Vault holders history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultHoldersHistory"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/volume-history":{"get":{"tags":["Vault History"],"description":"Get Vault volume history by slug for the given date range","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"}],"responses":{"200":{"description":"Vault volume history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultVolumeHistory"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/price-history":{"get":{"tags":["Vault History"],"description":"Get Vault daily price history by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":98866,"description":"Optional chain ID. Defaults to plume mainnet (98866)"},"required":false,"description":"Optional chain ID. Defaults to plume mainnet (98866)","name":"chainId","in":"query"}],"responses":{"200":{"description":"Vault price history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"history":{"type":"array","items":{"type":"object","properties":{"day":{"type":"number"},"price":{"type":"number"}},"required":["day","price"]}}},"required":["vaultAddress","history"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/liquid-funds-history":{"get":{"tags":["Vault History"],"description":"Get Vault Liquid Funds history by slug with pagination","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Start date in Unix timestamp seconds"},"required":false,"description":"Start date in Unix timestamp seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"description":"End date in Unix timestamp seconds"},"required":false,"description":"End date in Unix timestamp seconds","name":"endDate","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":200,"default":50,"description":"Maximum number of history entries to return","example":50},"required":false,"description":"Maximum number of history entries to return","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor returned from a previous request"},"required":false,"description":"Cursor returned from a previous request","name":"cursor","in":"query"}],"responses":{"200":{"description":"Vault Liquid Funds history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"history":{"type":"array","items":{"type":"object","properties":{"day":{"type":"number"},"liquidFunds":{"type":"number"}},"required":["day","liquidFunds"]}},"pageInfo":{"type":"object","properties":{"endCursor":{"type":"string","nullable":true},"hasNextPage":{"type":"boolean"}},"required":["endCursor","hasNextPage"]}},"required":["vaultAddress","history","pageInfo"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"example":{"error":"Invalid cursor"}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/pending-redemptions-history":{"get":{"tags":["Vault History"],"description":"Get Vault pending redemptions history by slug with separate filters for requestedAt and expiresAt","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Start date for requestedAt filter (Unix timestamp in seconds)"},"required":false,"description":"Start date for requestedAt filter (Unix timestamp in seconds)","name":"requestedAtStart","in":"query"},{"schema":{"type":"number","nullable":true,"description":"End date for requestedAt filter (Unix timestamp in seconds)"},"required":false,"description":"End date for requestedAt filter (Unix timestamp in seconds)","name":"requestedAtEnd","in":"query"},{"schema":{"type":"number","nullable":true,"description":"Start date for expiresAt filter (Unix timestamp in seconds)"},"required":false,"description":"Start date for expiresAt filter (Unix timestamp in seconds)","name":"expiresAtStart","in":"query"},{"schema":{"type":"number","nullable":true,"description":"End date for expiresAt filter (Unix timestamp in seconds)"},"required":false,"description":"End date for expiresAt filter (Unix timestamp in seconds)","name":"expiresAtEnd","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Optional atomic queue address filter."},"required":false,"description":"Optional atomic queue address filter.","name":"queueAddress","in":"query"}],"responses":{"200":{"description":"Vault pending redemptions history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultPendingRedemptions"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/composition-history":{"get":{"tags":["Vault History"],"description":"Get historical vault composition by slug for the given date range. Returns daily snapshots of asset allocation across all chains, including liquid assets, off-chain value, and yield assets.","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Ordering for history arrays. `desc` returns newest first. `asc` returns oldest first.","example":"desc"},"required":false,"description":"Ordering for history arrays. `desc` returns newest first. `asc` returns oldest first.","name":"order","in":"query"}],"responses":{"200":{"description":"Vault composition history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultCompositionHistory"}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/transaction-history":{"get":{"tags":["Vault History"],"description":"Get vault transaction history by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"integer","nullable":true,"description":"Start date filter (epoch seconds)"},"required":false,"description":"Start date filter (epoch seconds)","name":"startDate","in":"query"},{"schema":{"type":"integer","nullable":true,"description":"End date filter (epoch seconds)"},"required":false,"description":"End date filter (epoch seconds)","name":"endDate","in":"query"},{"schema":{"type":"number","nullable":true,"description":"Optional chain ID. If omitted, returns transactions across all chains."},"required":false,"description":"Optional chain ID. If omitted, returns transactions across all chains.","name":"chainId","in":"query"},{"schema":{"type":"string","description":"Optional comma-separated transaction types. Example: DEPOSIT,WITHDRAW_FULFILL","example":"DEPOSIT,WITHDRAW_FULFILL"},"required":false,"description":"Optional comma-separated transaction types. Example: DEPOSIT,WITHDRAW_FULFILL","name":"transactionTypes","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":200,"default":50,"description":"Maximum number of transactions to return","example":50},"required":false,"description":"Maximum number of transactions to return","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor returned from a previous request"},"required":false,"description":"Cursor returned from a previous request","name":"cursor","in":"query"}],"responses":{"200":{"description":"Vault transaction history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"transactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Transaction hash","example":"0x1234567890123456789012345678901234567890"},"logIndex":{"type":"integer","description":"Log index of the event within the transaction receipt","example":12},"transactionType":{"type":"string","enum":["DEPOSIT","WITHDRAW_REQUEST","WITHDRAW_FULFILL","WITHDRAW_UPDATE","WITHDRAW_CLAIM","INVALID_WITHDRAW_CLAIM","PRE_DEPOSIT_MIGRATION","WITHDRAW_INSTANT"]},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Vault address","example":"0x1234567890123456789012345678901234567890"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"User address","example":"0x1234567890123456789012345678901234567890"},"createdAt":{"type":"number","description":"Transaction created at in epoch seconds","example":1717334400},"shares":{"type":"number","description":"Shares","example":100},"sharesTokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Shares token address","example":"0x1234567890123456789012345678901234567890"},"assets":{"type":"number","nullable":true,"description":"Assets","example":100},"assetsTokenAddress":{"type":"string","nullable":true,"pattern":"^0x[a-fA-F0-9]+$","description":"Assets token address","example":"0x1234567890123456789012345678901234567890"},"destinationChainId":{"type":"number","nullable":true,"description":"Destination of a composer deposit; does not imply bridge delivery."},"recipient":{"type":"string","nullable":true,"pattern":"^0x[a-fA-F0-9]+$","description":"Destination recipient for a composer deposit; user remains the depositor."},"chainId":{"type":"number","description":"Chain ID","example":1}},"required":["transactionHash","logIndex","transactionType","vaultAddress","user","createdAt","shares","sharesTokenAddress","assets","assetsTokenAddress","chainId"]}},"pageInfo":{"type":"object","properties":{"endCursor":{"type":"string","nullable":true,"description":"Cursor to fetch the next page of results"},"hasNextPage":{"type":"boolean","description":"Whether another page of results is available"}},"required":["endCursor","hasNextPage"]}},"required":["items","pageInfo"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Invalid cursor"}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/vaults/{slug}/performance-history":{"get":{"tags":["Vault History"],"description":"Get vault performance history by slug for the given date range. Includes vault price/TVL/liquid funds/APY and optional per-yield-asset metrics. Current UTC day entries may include price, TVL, and liquid funds, but `apy` and `navApy` remain null until that UTC day is fully settled. Vault price and NAV APY are derived from the preferred chain (Plume if configured, otherwise the first configured chain).","parameters":[{"schema":{"type":"string","minLength":1,"description":"Unique slug identifier for the vault.","example":"nest-alpha-vault"},"required":true,"description":"Unique slug identifier for the vault.","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Ordering for history arrays. `desc` returns newest first. `asc` returns oldest first.","example":"desc"},"required":false,"description":"Ordering for history arrays. `desc` returns newest first. `asc` returns oldest first.","name":"order","in":"query"},{"schema":{"type":"string","default":false,"description":"Include per-yield-asset composition metrics."},"required":false,"description":"Include per-yield-asset composition metrics.","name":"includeCompositeAssets","in":"query"},{"schema":{"type":"string","enum":["json","csv"],"default":"json","description":"Response format. Use csv to export the history as CSV.","example":"json"},"required":false,"description":"Response format. Use csv to export the history as CSV.","name":"format","in":"query"}],"responses":{"200":{"description":"Vault performance history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/VaultPerformanceHistory"}},"required":["data"]}},"text/csv":{"schema":{"type":"string","description":"CSV export of vault performance history"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/assets":{"get":{"tags":["Assets"],"description":"Get all assets metadata","responses":{"200":{"description":"Assets metadata","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"image":{"type":"string","nullable":true}},"required":["slug","name","description"]}}},"required":["data"]}}}}}}},"/assets/{slug}/apy":{"get":{"tags":["Assets"],"description":"Get calculated Asset APY by slug. `targetApy` is the APY of asset's reported yield. It is present when asset's current calculated APYs are not representative of asset yield.","parameters":[{"schema":{"type":"string","minLength":1,"description":"The slug of the asset","example":"superstate-uscc"},"required":true,"description":"The slug of the asset","name":"slug","in":"path"}],"responses":{"200":{"description":"Asset APY","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"slug":{"type":"string"},"targetApy":{"type":"number","nullable":true,"description":"APY of asset's reported yield. Present when asset's current calculated APYs are not representative of asset yield."},"tokens":{"type":"array","items":{"type":"object","properties":{"assetAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"symbol":{"type":"string","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"]}},"required":["assetAddress","chainId","symbol","apy"]}}},"required":["slug","targetApy","tokens"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/assets/{slug}/apy-history":{"get":{"tags":["Assets"],"description":"Get Asset APY history by slug for the given date range","parameters":[{"schema":{"type":"string","minLength":1,"description":"The slug of the asset","example":"superstate-uscc"},"required":true,"description":"The slug of the asset","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"}],"responses":{"200":{"description":"Asset APY history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"slug":{"type":"string"},"tokens":{"type":"array","items":{"type":"object","properties":{"assetAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"symbol":{"type":"string","nullable":true},"history":{"type":"array","items":{"type":"object","properties":{"day":{"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":["day","apy"]}}},"required":["assetAddress","chainId","symbol","history"]}}},"required":["slug","tokens"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/assets/{slug}/tvl":{"get":{"tags":["Assets"],"description":"Get Asset TVL by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"The slug of the asset","example":"superstate-uscc"},"required":true,"description":"The slug of the asset","name":"slug","in":"path"}],"responses":{"200":{"description":"Asset TVL","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"slug":{"type":"string"},"tokens":{"type":"array","items":{"type":"object","properties":{"assetAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"symbol":{"type":"string","nullable":true},"tvl":{"type":"number"},"price":{"type":"number"},"supply":{"type":"number"},"yield":{"type":"number","nullable":true}},"required":["assetAddress","chainId","symbol","tvl","price","supply","yield"]}}},"required":["slug","tokens"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/assets/{slug}/details":{"get":{"tags":["Assets"],"description":"Get asset details by slug. When CMS asset details are missing or unavailable, returns partial details with a CMS vault or registry name, registry description, available icon, and empty or null remaining fields.","parameters":[{"schema":{"type":"string","minLength":1,"description":"The slug of the asset","example":"superstate-uscc"},"required":true,"description":"The slug of the asset","name":"slug","in":"path"}],"responses":{"200":{"description":"Asset Details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"image":{"type":"string","nullable":true},"description":{"type":"string"},"custodians":{"type":"array","items":{"type":"object","properties":{"image":{"type":"string","nullable":true},"name":{"type":"string"}},"required":["image","name"]},"description":"Deprecated."},"website":{"type":"string","nullable":true},"scorecardUrl":{"type":"string","nullable":true},"category":{"type":"object","nullable":true,"properties":{"name":{"type":"string","nullable":true},"color":{"type":"string","nullable":true,"description":"Deprecated."},"isActive":{"type":"boolean","nullable":true,"description":"Deprecated."}},"required":["name","color","isActive"]},"regulatory":{"type":"object","properties":{"entity":{"type":"string","nullable":true},"rating":{"type":"string","nullable":true}},"required":["entity","rating"]}},"required":["slug","name","image","description","custodians","website","scorecardUrl","category","regulatory"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/assets/{slug}/price-history":{"get":{"tags":["Assets"],"description":"Get Asset price history by slug for the given date range","parameters":[{"schema":{"type":"string","minLength":1,"description":"The slug of the asset","example":"superstate-uscc"},"required":true,"description":"The slug of the asset","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"default":1791608681,"description":"Unix timestamp in seconds"},"required":false,"description":"Unix timestamp in seconds","name":"endDate","in":"query"}],"responses":{"200":{"description":"Asset price history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"slug":{"type":"string"},"tokens":{"type":"array","items":{"type":"object","properties":{"assetAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"symbol":{"type":"string","nullable":true},"history":{"type":"array","items":{"type":"object","properties":{"day":{"type":"number"},"price":{"type":"number"}},"required":["day","price"]}}},"required":["assetAddress","chainId","symbol","history"]}}},"required":["slug","tokens"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/assets/{slug}/stats":{"get":{"tags":["Assets"],"description":"Get asset stats by slug","parameters":[{"schema":{"type":"string","minLength":1,"description":"The slug of the asset","example":"superstate-uscc"},"required":true,"description":"The slug of the asset","name":"slug","in":"path"}],"responses":{"200":{"description":"Asset stats","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"slug":{"type":"string"},"tokens":{"type":"array","items":{"type":"object","properties":{"assetAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"chainId":{"type":"number"},"symbol":{"type":"string","nullable":true},"maxDrawdown":{"type":"number","nullable":true,"description":"The maximum drawdown of the asset. Returns value [-1, 0] where -0.05 means 5% max drawdown."},"dailyVolatilityBps":{"type":"number","nullable":true,"description":"The daily volatility of the asset in basis points for a rolling 30 day window."}},"required":["assetAddress","chainId","symbol","maxDrawdown","dailyVolatilityBps"]}}},"required":["slug","tokens"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/plume-assets":{"get":{"tags":["Plume Assets"],"description":"Get all Plume assets","parameters":[{"schema":{"type":"string","default":false},"required":false,"name":"liveLiquidity","in":"query"}],"responses":{"200":{"description":"Plume assets","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/VaultDetails"}}},"required":["data"]}}}}}}},"/providers/etherfi/rwa-yield":{"get":{"tags":["Providers"],"description":"Proxy Ether.fi's RWA yield JSON without changing its structure. The upstream request always uses nocache=false; successful responses are cached in Redis for five minutes. Client query parameters are not forwarded and cannot bypass the cache.","responses":{"200":{"description":"The original Ether.fi JSON payload, without a Nest data wrapper.","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"number","enum":[200]},"message":{"type":"string"},"timestamp":{"type":"string"},"path":{"type":"string"},"data":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"apy":{"type":"object","additionalProperties":{"nullable":true},"description":"Provider APY values and history."},"tvl":{"type":"object","additionalProperties":{"nullable":true},"description":"Provider TVL values and history."},"positions":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}}}},"required":["id","title","apy","tvl","positions"],"additionalProperties":{"nullable":true}}},"required":["statusCode","message","timestamp","path","data"],"additionalProperties":{"nullable":true}}}}},"502":{"description":"Ether.fi is unavailable or returned an unsuccessful or invalid JSON response.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"504":{"description":"The Ether.fi request timed out.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/reports/volume-report":{"get":{"tags":["Reports"],"description":"Download the backend-generated global monthly volume report as a CSV attachment. Set breakdownByVault=true to include a per-vault monthly breakdown.","parameters":[{"schema":{"type":"integer","nullable":true,"minimum":0,"description":"Unix timestamp in seconds (UTC).","example":1735689600},"required":false,"description":"Unix timestamp in seconds (UTC).","name":"startDate","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"description":"Unix timestamp in seconds (UTC).","example":1740787199},"required":false,"description":"Unix timestamp in seconds (UTC).","name":"endDate","in":"query"},{"schema":{"type":"string","enum":["true","false"],"description":"When true, the CSV includes monthly rows broken down by vault.","example":"true"},"required":false,"description":"When true, the CSV includes monthly rows broken down by vault.","name":"breakdownByVault","in":"query"}],"responses":{"200":{"description":"Global volume report CSV file","content":{"text/csv":{"schema":{"type":"string","description":"CSV export of the global monthly volume report."}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"startDate must be before or equal to endDate"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/reports/revenue-report":{"get":{"tags":["Reports"],"description":"Download the backend-generated global revenue report as a CSV attachment.","parameters":[{"schema":{"type":"integer","nullable":true,"minimum":0,"description":"Unix timestamp in seconds (UTC).","example":1735689600},"required":false,"description":"Unix timestamp in seconds (UTC).","name":"startDate","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"description":"Unix timestamp in seconds (UTC).","example":1740787199},"required":false,"description":"Unix timestamp in seconds (UTC).","name":"endDate","in":"query"},{"schema":{"type":"number","nullable":true,"minimum":0,"description":"Flat fee applied to each deposit transaction.","example":25},"required":false,"description":"Flat fee applied to each deposit transaction.","name":"flatDepositFee","in":"query"},{"schema":{"type":"number","nullable":true,"minimum":0,"description":"Flat fee applied to each redemption transaction.","example":25},"required":false,"description":"Flat fee applied to each redemption transaction.","name":"flatRedemptionFee","in":"query"},{"schema":{"type":"number","nullable":true,"minimum":0,"description":"Fractional deposit fee rate, for example 0.01 for 1%.","example":0.01},"required":false,"description":"Fractional deposit fee rate, for example 0.01 for 1%.","name":"depositFeePct","in":"query"},{"schema":{"type":"number","nullable":true,"minimum":0,"description":"Fractional redemption fee rate, for example 0.01 for 1%.","example":0.01},"required":false,"description":"Fractional redemption fee rate, for example 0.01 for 1%.","name":"redemptionFeePct","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":100,"description":"Optional scenario label used in the output filename.","example":"base-case"},"required":false,"description":"Optional scenario label used in the output filename.","name":"scenario","in":"query"}],"responses":{"200":{"description":"Global revenue report CSV file","content":{"text/csv":{"schema":{"type":"string","description":"CSV export of the global revenue report."}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"startDate must be before or equal to endDate"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/user/{address}/compliance":{"get":{"tags":["User"],"description":"Checks compliance for a user and retrieves predicate message if compliant","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"User address","example":"0x1234567890123456789012345678901234567890"},"required":true,"description":"User address","name":"address","in":"path"},{"schema":{"type":"number","default":1,"description":"Optional. Chain ID","example":1},"required":false,"description":"Optional. Chain ID","name":"chainId","in":"query"},{"schema":{"type":"string","default":false,"description":"Optional. Indicates if the compliance check is for deposit and bridge interaction. Defaults to false.","example":false},"required":false,"description":"Optional. Indicates if the compliance check is for deposit and bridge interaction. Defaults to false.","name":"isDepositAndBridge","in":"query"},{"schema":{"type":"string","default":false,"description":"Optional. Indicates if bridge uses zapper (usdt -> usdc swap). Defaults to false.","example":false},"required":false,"description":"Optional. Indicates if bridge uses zapper (usdt -> usdc swap). Defaults to false.","name":"isZapper","in":"query"},{"schema":{"type":"string","default":false,"description":"Optional. Indicates solana deposits.  Defaults to false.","example":false},"required":false,"description":"Optional. Indicates solana deposits.  Defaults to false.","name":"isSolana","in":"query"},{"schema":{"type":"string","default":false,"description":"Optional. Indicates if the new proxy is used. Defaults to false.","example":false},"required":false,"description":"Optional. Indicates if the new proxy is used. Defaults to false.","name":"isNewProxy","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"Optional. The Nest composer address extracted from CCTP hook data. Required for Solana deposits.","example":"0xaFe1F7B0105c6Da9e79f886A20eb55F17a791aa1"},"required":false,"description":"Optional. The Nest composer address extracted from CCTP hook data. Required for Solana deposits.","name":"nestComposerAddress","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"Optional. Override predicate \"from\" with executor address (bundled EVM flow).","example":"0x1234567890123456789012345678901234567890"},"required":false,"description":"Optional. Override predicate \"from\" with executor address (bundled EVM flow).","name":"predicateFromAddress","in":"query"}],"responses":{"200":{"description":"Compliance","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"isCompliant":{"type":"boolean"},"predicateMessage":{"$ref":"#/components/schemas/PredicateMessage"}},"required":["isCompliant","predicateMessage"]}},"required":["data"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"429":{"description":"Too many requests for this wallet","headers":{"Retry-After":{"schema":{"type":"string","description":"Seconds until the current window resets","example":"42"},"required":true,"description":"Seconds until the current window resets"}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Too many compliance requests for this wallet. Please try again shortly."}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Internal server error"}}}}}}}},"/user/{address}/compliance-v2":{"get":{"tags":["User"],"description":"Predicate V2 compliance check for the ComplianceProxy stack. Returns a one-time attestation (spent on-chain on success, short-lived) ABI-encoded as `complianceData`. Use purpose=preview to prefetch without receiving a proof; request purpose=transaction immediately before sending to take an unused proof once or fetch a new one. Runs in parallel with the V1 `/compliance` route.","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Executing sender: the EVM account that will call ComplianceProxy (msg.sender). For relayed / bridged flows this is the relayer, and the end user goes in `onBehalf`.","example":"0x1234567890123456789012345678901234567890"},"required":true,"description":"Executing sender: the EVM account that will call ComplianceProxy (msg.sender). For relayed / bridged flows this is the relayer, and the end user goes in `onBehalf`.","name":"address","in":"path"},{"schema":{"type":"string","enum":["preview","transaction"],"default":"transaction","description":"V2 only: preview caches an unused attestation for up to 30 seconds and returns eligibility/routing without a proof. Transaction takes a proof once or fetches a new one. Defaults to transaction; V1 behavior is unchanged."},"required":false,"description":"V2 only: preview caches an unused attestation for up to 30 seconds and returns eligibility/routing without a proof. Transaction takes a proof once or fetches a new one. Defaults to transaction; V1 behavior is unchanged.","name":"purpose","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Vault slug selecting its configured Predicate V2 deployment. Required to select an eligible vault.","example":"nest-test-vault"},"required":true,"description":"Vault slug selecting its configured Predicate V2 deployment. Required to select an eligible vault.","name":"vault","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"EVM chain ID of the ComplianceProxy deployment. Requires an enabled V2 deployment for the selected vault.","example":98866},"required":true,"description":"EVM chain ID of the ComplianceProxy deployment. Requires an enabled V2 deployment for the selected vault.","name":"chainId","in":"query"},{"schema":{"type":"string","enum":["deposit","requestRedeem","instantRedeem","accessCheck"],"default":"deposit","description":"ComplianceProxy operation to attest. `deposit` covers asset deposits; `requestRedeem` and `instantRedeem` cover redemptions. `accessCheck` covers NestAdapter leverage: sender is the Bundler3 initiator, with an optional represented user. Defaults to `deposit`.","example":"deposit"},"required":false,"description":"ComplianceProxy operation to attest. `deposit` covers asset deposits; `requestRedeem` and `instantRedeem` cover redemptions. `accessCheck` covers NestAdapter leverage: sender is the Bundler3 initiator, with an optional represented user. Defaults to `deposit`.","name":"flow","in":"query"},{"schema":{"type":"string","description":"Optional for deposits and access checks. Represented user when `address` executes on behalf of someone else. Accepts an EVM address, 32-byte hex identifier, or base58 Solana public key. Deposits always select `deposit(bytes32)`. Access checks select `accessCheck(bytes32)` only for a nonzero user distinct from sender; otherwise `accessCheck(address sender)`.","example":"0x000000000000000000000000abcdefabcdefabcdefabcdefabcdefabcdefabcd"},"required":false,"description":"Optional for deposits and access checks. Represented user when `address` executes on behalf of someone else. Accepts an EVM address, 32-byte hex identifier, or base58 Solana public key. Deposits always select `deposit(bytes32)`. Access checks select `accessCheck(bytes32)` only for a nonzero user distinct from sender; otherwise `accessCheck(address sender)`.","name":"onBehalf","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Optional registered composer that is both the executing sender and the historical Predicate V2 deployment selector. Requires a deposit on behalf of a represented user.","example":"0x4e6a52b0d22e333c01e71ed574db6ce2b20cc0a1"},"required":false,"description":"Optional registered composer that is both the executing sender and the historical Predicate V2 deployment selector. Requires a deposit on behalf of a represented user.","name":"composerAddress","in":"query"}],"responses":{"200":{"description":"Compliance result and attestation","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"isCompliant":{"type":"boolean"},"chainId":{"type":"number"},"chain":{"type":"string","description":"Predicate V2 chain name sent upstream.","example":"plume"},"complianceProxyAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"ComplianceProxy to approve and call."},"hookAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"PredicateV2Hook the attestation targets (`to`)."},"sender":{"type":"string","pattern":"^0x[a-fA-F0-9]+$"},"onBehalf":{"type":"string","nullable":true,"description":"32-byte represented user, or null for direct flows."},"payload":{"type":"string","description":"Canonical payload bound by the attestation: deposit, redemption, or accessCheck(address/bytes32).","example":"0xd0e30db0"},"attestation":{"$ref":"#/components/schemas/PredicateV2Attestation"},"complianceData":{"type":"string","nullable":true,"description":"`abi.encode(Attestation)`; pass as the `complianceData` argument of ComplianceProxy deposit or redemption entrypoints."},"policyId":{"type":"string","nullable":true},"policyName":{"type":"string","nullable":true},"reason":{"$ref":"#/components/schemas/PredicateV2Reason"}},"required":["isCompliant","chainId","chain","complianceProxyAddress","hookAddress","sender","onBehalf","payload","attestation","complianceData","policyId","policyName","reason"]}},"required":["data"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}},"404":{"description":"Predicate V2 stack unavailable or ambiguous for this chain and vault","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Predicate V2 compliance is not configured for chainId 1"}}}}},"409":{"description":"Composer registration or live targets do not support this proof request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}},"429":{"description":"Too many requests for this wallet","headers":{"Retry-After":{"schema":{"type":"string","description":"Seconds until the current window resets","example":"42"},"required":true,"description":"Seconds until the current window resets"}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Too many compliance requests for this wallet. Please try again shortly."}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Internal server error"}}}}},"503":{"description":"Composer chain validation or preview capacity is unavailable; preview capacity responses include Retry-After","headers":{"Retry-After":{"schema":{"type":"string","description":"Seconds before retrying preview capacity","example":"1"},"required":true,"description":"Seconds before retrying preview capacity"}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}}}}},"/user/{address}/vaults/{slug}/transaction-history":{"get":{"tags":["User History"],"description":"Get user transaction history","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"User address","example":"0x1234567890123456789012345678901234567890"},"required":true,"description":"User address","name":"address","in":"path"},{"schema":{"type":"string","description":"Vault slug","example":"nest-alpha-vault"},"required":true,"description":"Vault slug","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true},"required":false,"name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"endDate","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"chainId","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":200,"default":50,"description":"Maximum number of transactions to return","example":50},"required":false,"description":"Maximum number of transactions to return","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor returned from a previous request"},"required":false,"description":"Cursor returned from a previous request","name":"cursor","in":"query"}],"responses":{"200":{"description":"User transaction history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"transactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Transaction hash","example":"0x1234567890123456789012345678901234567890"},"logIndex":{"type":"integer","description":"Log index of the event within the transaction receipt","example":12},"transactionType":{"type":"string","enum":["DEPOSIT","WITHDRAW_REQUEST","WITHDRAW_FULFILL","WITHDRAW_UPDATE","WITHDRAW_CLAIM","INVALID_WITHDRAW_CLAIM","PRE_DEPOSIT_MIGRATION","WITHDRAW_INSTANT"]},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Vault address","example":"0x1234567890123456789012345678901234567890"},"user":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"User address","example":"0x1234567890123456789012345678901234567890"},"createdAt":{"type":"number","description":"Transaction created at in epoch seconds","example":1717334400},"shares":{"type":"number","description":"Shares","example":100},"sharesTokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Shares token address","example":"0x1234567890123456789012345678901234567890"},"assets":{"type":"number","nullable":true,"description":"Assets","example":100},"assetsTokenAddress":{"type":"string","nullable":true,"pattern":"^0x[a-fA-F0-9]+$","description":"Assets token address","example":"0x1234567890123456789012345678901234567890"},"destinationChainId":{"type":"number","nullable":true,"description":"Destination of a composer deposit; does not imply bridge delivery."},"recipient":{"type":"string","nullable":true,"pattern":"^0x[a-fA-F0-9]+$","description":"Destination recipient for a composer deposit; user remains the depositor."},"chainId":{"type":"number","description":"Chain ID","example":1}},"required":["transactionHash","logIndex","transactionType","vaultAddress","user","createdAt","shares","sharesTokenAddress","assets","assetsTokenAddress","chainId"]}},"pageInfo":{"type":"object","properties":{"endCursor":{"type":"string","nullable":true,"description":"Cursor to fetch the next page of results"},"hasNextPage":{"type":"boolean","description":"Whether another page of results is available"}},"required":["endCursor","hasNextPage"]}},"required":["items","pageInfo"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Invalid cursor"}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Not found"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/user/{address}/details":{"get":{"tags":["User"],"description":"Gets user's current TVL and USD-value-weighted average 30-day NAV APY across all vault holdings","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"User wallet address","example":"0x1234567890123456789012345678901234567890"},"required":true,"description":"User wallet address","name":"address","in":"path"}],"responses":{"200":{"description":"User details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"tvl":{"type":"number","description":"User's current total value locked across all vaults (USD)","example":10500.25},"apy":{"type":"number","description":"User's USD-value-weighted average 30-day NAV APY across all vault holdings (decimal, e.g., 0.05 = 5%)","example":0.0525}},"required":["tvl","apy"]}},"required":["data"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Internal server error"}}}}}}}},"/solana/mint-status/{signature}":{"get":{"tags":["Solana Transaction Status"],"description":"Get mint flow status by Solana transaction signature","parameters":[{"schema":{"type":"string","description":"Solana transaction signature","example":"5KtPn3n8nJHvxPcJJQvBHvPmZxAUJ5WGhBvQGeDKJGxYjgDWKsQH3BmL8FqJEVMx8HvPmZxAUJ5WGhBvQGeDKJGxYjg"},"required":true,"description":"Solana transaction signature","name":"signature","in":"path"}],"responses":{"200":{"description":"Mint status by signature","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"solanaSignature":{"type":"string"},"solanaWallet":{"type":"string"},"amount":{"type":"string"},"progress":{"type":"string","nullable":true},"overallStatus":{"type":"string"},"overallStatusCode":{"type":"number"},"createdAt":{"type":"number"},"createdAtFormatted":{"type":"string","nullable":true},"updatedAt":{"type":"number"},"updatedAtFormatted":{"type":"string","nullable":true},"steps":{"type":"object","properties":{"solana":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"blockTimestamp":{"type":"number","nullable":true},"blockTimestampFormatted":{"type":"string","nullable":true},"blockSlot":{"type":"string","nullable":true},"indexedAt":{"type":"number","nullable":true},"indexedAtFormatted":{"type":"string","nullable":true},"composerAddress":{"type":"string","nullable":true}},"required":["status","statusCode","blockTimestamp","blockTimestampFormatted","blockSlot","indexedAt","indexedAtFormatted","composerAddress"]},"cctpAttestation":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"nonce":{"type":"string","nullable":true},"attestedAt":{"type":"number","nullable":true},"attestedAtFormatted":{"type":"string","nullable":true},"irisStatus":{"type":"string","nullable":true},"sourceDomain":{"type":"number","nullable":true},"destinationDomain":{"type":"number","nullable":true}},"required":["status","statusCode","nonce","attestedAt","attestedAtFormatted","irisStatus","sourceDomain","destinationDomain"]},"predicate":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"taskId":{"type":"string","nullable":true},"isCompliant":{"type":"boolean","nullable":true},"checkedAt":{"type":"number","nullable":true},"checkedAtFormatted":{"type":"string","nullable":true},"error":{"type":"string","nullable":true}},"required":["status","statusCode","taskId","isCompliant","checkedAt","checkedAtFormatted","error"]},"relay":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"txHash":{"type":"string","nullable":true},"blockNumber":{"type":"string","nullable":true},"blockTimestamp":{"type":"number","nullable":true},"blockTimestampFormatted":{"type":"string","nullable":true},"gasUsed":{"type":"string","nullable":true},"error":{"type":"string","nullable":true}},"required":["status","statusCode","txHash","blockNumber","blockTimestamp","blockTimestampFormatted","gasUsed","error"]},"composer":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"assetAmount":{"type":"string","nullable":true},"shareAmount":{"type":"string","nullable":true}},"required":["status","statusCode","assetAmount","shareAmount"]},"oft":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"lzGuid":{"type":"string","nullable":true},"dstEid":{"type":"number","nullable":true},"amountSent":{"type":"string","nullable":true},"amountReceived":{"type":"string","nullable":true}},"required":["status","statusCode","lzGuid","dstEid","amountSent","amountReceived"]},"solanaMint":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"signature":{"type":"string","nullable":true},"blockTimestamp":{"type":"number","nullable":true},"blockTimestampFormatted":{"type":"string","nullable":true},"blockSlot":{"type":"string","nullable":true},"programId":{"type":"string","nullable":true},"oftstoreAddress":{"type":"string","nullable":true}},"required":["status","statusCode","signature","blockTimestamp","blockTimestampFormatted","blockSlot","programId","oftstoreAddress"]},"reclaim":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"txHash":{"type":"string","nullable":true},"blockTimestamp":{"type":"number","nullable":true},"blockTimestampFormatted":{"type":"string","nullable":true}},"required":["status","statusCode","txHash","blockTimestamp","blockTimestampFormatted"]}},"required":["solana","cctpAttestation","predicate","relay","composer","oft","solanaMint","reclaim"]},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","nullable":true},"message":{"type":"string","nullable":true}},"required":["code","message"]},"links":{"type":"object","properties":{"solanaExplorer":{"type":"string"},"plumeExplorer":{"type":"string","nullable":true},"layerZeroScan":{"type":"string","nullable":true},"solanaMintTransaction":{"type":"string","nullable":true}},"required":["solanaExplorer","plumeExplorer","layerZeroScan","solanaMintTransaction"]}},"required":["solanaSignature","solanaWallet","amount","progress","overallStatus","overallStatusCode","createdAt","createdAtFormatted","updatedAt","updatedAtFormatted","steps","error","links"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Mint status not found for signature"}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}}}}},"/solana/redeem-status/{signature}":{"get":{"tags":["Solana Transaction Status"],"description":"Get redeem flow status by Solana burn transaction signature","parameters":[{"schema":{"type":"string","description":"Solana burn transaction signature (the original user redeem tx)","example":"5KtPn3n8nJHvxPcJJQvBHvPmZxAUJ5WGhBvQGeDKJGxYjgDWKsQH3BmL8FqJEVMx8HvPmZxAUJ5WGhBvQGeDKJGxYjg"},"required":true,"description":"Solana burn transaction signature (the original user redeem tx)","name":"signature","in":"path"}],"responses":{"200":{"description":"Redeem status by Solana burn signature","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"solanaBurnSignature":{"type":"string","nullable":true},"plumeDeliveryTxHash":{"type":"string","nullable":true},"plumeRedeemTxHash":{"type":"string","nullable":true},"solanaWallet":{"type":"string","nullable":true},"progress":{"type":"string","nullable":true},"overallStatus":{"type":"string"},"overallStatusCode":{"type":"number"},"eventType":{"type":"string","nullable":true},"redeemType":{"type":"string"},"createdAt":{"type":"number"},"createdAtFormatted":{"type":"string","nullable":true},"updatedAt":{"type":"number"},"updatedAtFormatted":{"type":"string","nullable":true},"steps":{"type":"object","properties":{"solanaBurn":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"signature":{"type":"string","nullable":true},"tokenAta":{"type":"string","nullable":true},"amount":{"type":"string","nullable":true},"blockTimestamp":{"type":"number","nullable":true},"blockTimestampFormatted":{"type":"string","nullable":true},"blockSlot":{"type":"string","nullable":true}},"required":["status","statusCode","signature","tokenAta","amount","blockTimestamp","blockTimestampFormatted","blockSlot"]},"plumeProcessing":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"deliveryTxHash":{"type":"string","nullable":true},"deliveryBlockNumber":{"type":"string","nullable":true},"deliveryBlockTimestamp":{"type":"number","nullable":true},"deliveryBlockTimestampFormatted":{"type":"string","nullable":true},"redeemTxHash":{"type":"string","nullable":true},"redeemBlockNumber":{"type":"string","nullable":true},"redeemBlockTimestamp":{"type":"number","nullable":true},"redeemBlockTimestampFormatted":{"type":"string","nullable":true},"error":{"type":"string","nullable":true},"lzGuid":{"type":"string","nullable":true},"oftContractAddress":{"type":"string","nullable":true},"vaultComposerAddress":{"type":"string","nullable":true},"sharesRedeemed":{"type":"string","nullable":true},"usdcReceived":{"type":"string","nullable":true},"cctpBurnAmount":{"type":"string","nullable":true},"cctpNonce":{"type":"string","nullable":true},"cctpDestinationDomain":{"type":"number","nullable":true}},"required":["status","statusCode","deliveryTxHash","deliveryBlockNumber","deliveryBlockTimestamp","deliveryBlockTimestampFormatted","redeemTxHash","redeemBlockNumber","redeemBlockTimestamp","redeemBlockTimestampFormatted","error","lzGuid","oftContractAddress","vaultComposerAddress","sharesRedeemed","usdcReceived","cctpBurnAmount","cctpNonce","cctpDestinationDomain"]},"cctpAttestation":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"attestedAt":{"type":"number","nullable":true},"attestedAtFormatted":{"type":"string","nullable":true},"irisStatus":{"type":"string","nullable":true},"message":{"type":"string","nullable":true},"attestation":{"type":"string","nullable":true},"nonce":{"type":"string","nullable":true}},"required":["status","statusCode","attestedAt","attestedAtFormatted","irisStatus","message","attestation","nonce"]},"solanaClaim":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"signature":{"type":"string","nullable":true},"blockTimestamp":{"type":"number","nullable":true},"blockTimestampFormatted":{"type":"string","nullable":true},"blockSlot":{"type":"string","nullable":true},"usdcClaimed":{"type":"string","nullable":true},"error":{"type":"string","nullable":true}},"required":["status","statusCode","signature","blockTimestamp","blockTimestampFormatted","blockSlot","usdcClaimed","error"]}},"required":["solanaBurn","plumeProcessing"]},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","nullable":true},"message":{"type":"string","nullable":true}},"required":["code","message"]},"links":{"type":"object","properties":{"solanaBurnExplorer":{"type":"string","nullable":true},"plumeDeliveryExplorer":{"type":"string","nullable":true},"plumeRedeemExplorer":{"type":"string","nullable":true},"solanaClaimExplorer":{"type":"string","nullable":true},"layerZeroScanDelivery":{"type":"string","nullable":true},"layerZeroScanRedeem":{"type":"string","nullable":true}},"required":["solanaBurnExplorer","plumeDeliveryExplorer","plumeRedeemExplorer","solanaClaimExplorer","layerZeroScanDelivery","layerZeroScanRedeem"]}},"required":["solanaBurnSignature","plumeDeliveryTxHash","plumeRedeemTxHash","solanaWallet","progress","overallStatus","overallStatusCode","eventType","redeemType","createdAt","createdAtFormatted","updatedAt","updatedAtFormatted","steps","error","links"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Redeem status not found for signature"}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}}}}},"/solana/update-status/{signature}":{"get":{"tags":["Solana Transaction Status"],"description":"Get update async redeem status by Solana burn transaction signature","parameters":[{"schema":{"type":"string","description":"Solana update async redeem burn transaction signature","example":"5KtPn3n8nJHvxPcJJQvBHvPmZxAUJ5WGhBvQGeDKJGxYjgDWKsQH3BmL8FqJEVMx8HvPmZxAUJ5WGhBvQGeDKJGxYjg"},"required":true,"description":"Solana update async redeem burn transaction signature","name":"signature","in":"path"}],"responses":{"200":{"description":"Update async redeem status by Solana burn signature","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"solanaBurnSignature":{"type":"string"},"plumeRedeemTxHash":{"type":"string","nullable":true},"returnedSharesSolanaSignature":{"type":"string","nullable":true},"solanaWallet":{"type":"string","nullable":true},"progress":{"type":"string","nullable":true},"overallStatus":{"type":"string"},"overallStatusCode":{"type":"number"},"eventType":{"type":"string","enum":["UpdateRedeemRequest"]},"redeemType":{"type":"string","enum":["async"]},"steps":{"type":"object","properties":{"solanaBurn":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"signature":{"type":"string","nullable":true},"tokenAta":{"type":"string","nullable":true},"amount":{"type":"string","nullable":true},"blockTimestamp":{"type":"number","nullable":true},"blockTimestampFormatted":{"type":"string","nullable":true},"blockSlot":{"type":"string","nullable":true}},"required":["status","statusCode","signature","tokenAta","amount","blockTimestamp","blockTimestampFormatted","blockSlot"]},"plumeProcessing":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"deliveryTxHash":{"type":"string","nullable":true},"deliveryBlockNumber":{"type":"string","nullable":true},"deliveryBlockTimestamp":{"type":"number","nullable":true},"deliveryBlockTimestampFormatted":{"type":"string","nullable":true},"redeemTxHash":{"type":"string","nullable":true},"redeemBlockNumber":{"type":"string","nullable":true},"redeemBlockTimestamp":{"type":"number","nullable":true},"redeemBlockTimestampFormatted":{"type":"string","nullable":true},"lzGuid":{"type":"string","nullable":true},"vaultComposerAddress":{"type":"string","nullable":true},"sharesUpdatedTotal":{"type":"string","nullable":true},"redeemRecipient":{"type":"string","nullable":true},"redeemDstEid":{"type":"number","nullable":true}},"required":["status","statusCode","deliveryTxHash","deliveryBlockNumber","deliveryBlockTimestamp","deliveryBlockTimestampFormatted","redeemTxHash","redeemBlockNumber","redeemBlockTimestamp","redeemBlockTimestampFormatted","lzGuid","vaultComposerAddress","sharesUpdatedTotal","redeemRecipient","redeemDstEid"]},"solanaReturnShares":{"type":"object","properties":{"status":{"type":"string"},"statusCode":{"type":"number"},"signature":{"type":"string","nullable":true},"amount":{"type":"string","nullable":true},"lzGuid":{"type":"string","nullable":true},"blockTimestamp":{"type":"number","nullable":true},"blockTimestampFormatted":{"type":"string","nullable":true},"blockSlot":{"type":"string","nullable":true}},"required":["status","statusCode","signature","amount","lzGuid","blockTimestamp","blockTimestampFormatted","blockSlot"]}},"required":["solanaBurn","plumeProcessing","solanaReturnShares"]},"links":{"type":"object","properties":{"layerZeroScanBurn":{"type":"string","nullable":true},"solanaBurnExplorer":{"type":"string","nullable":true},"layerZeroScanRedeem":{"type":"string","nullable":true},"plumeRedeemExplorer":{"type":"string","nullable":true},"solanaReturnSharesExplorer":{"type":"string","nullable":true}},"required":["layerZeroScanBurn","solanaBurnExplorer","layerZeroScanRedeem","plumeRedeemExplorer","solanaReturnSharesExplorer"]}},"required":["solanaBurnSignature","plumeRedeemTxHash","returnedSharesSolanaSignature","solanaWallet","progress","overallStatus","overallStatusCode","eventType","redeemType","steps","links"]}},"required":["data"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Update status not found for signature"}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}}}}},"/solana/nest/async-redeem/build-tx":{"post":{"tags":["Solana Transaction Builder"],"description":"Returns a base64 transaction to submit an async Nest vault redemption request. New requests use the selected V1 composer; providing composerAddress returns HTTP 400. The API first checks the current Plume USDC redemption quote and fee configuration. \n\nThe transaction includes idempotent creation of the caller's USDC ATA before the OFT send. \n\nUnder the hood, this builds a LayerZero OFT send transaction that transfers Nest shares to the vault's NestVaultComposer contract on Plume with a REQUEST_REDEEM compose command. \n\nThe transaction must be signed and sent by the caller's wallet.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"complianceVersion":{"type":"string","enum":["v1"],"description":"New Solana redemptions use V1 composers independently of the deposit default. V2 is not supported."},"nestVaultSlug":{"type":"string","description":"Slug identifying the Nest vault. Valid options: nest-alpha-vault, nest-treasury-vault, nest-basis-vault, nest-wisdom-vault, nest-opal-vault, nest-test-vault, nest-scope-vault, nest-lcrd-vault, nest-perena-vault, nest-falconx-clo, nest-cloa-vault, nhinc, plume-factor-vault.","example":"nest-alpha-vault"},"owner":{"type":"string","minLength":1,"description":"Base58-encoded Solana public key of the user who owns the Nest share tokens and signs as the OFT token source authority. This wallet pays fees unless feePayer is provided.","example":"CFagSTMBFiMaD4YKHr7mMcKTzpi35DqiBKbDA35BvZgr"},"feePayer":{"type":"string","minLength":1,"description":"Optional base58-encoded Solana public key of a sponsor/relayer that will pay both Solana transaction fees and LayerZero native delivery fees.","example":"Gp2nANpTLh9sdNaay1DnZtHGQmWRS2jfqzMB1xttEST5"},"priorityFee":{"type":"string","enum":["low","medium","high"],"description":"Optional dynamic priority fee level. The API fetches recent prioritization fees for all transaction accounts and selects low/median/high.","example":"medium"},"priorityFeeMaxLamports":{"type":"integer","minimum":0,"description":"Optional maximum total priority fee in lamports. If provided, it takes precedence over priorityFee.","example":20000},"rawAmountNestToken":{"type":"string","description":"Amount of Nest share tokens, in raw base units. Use the configured shareDecimals value (the decimals configured on the Solana share mint) to interpret the amount.","example":"1000000"}},"required":["nestVaultSlug","owner"]}}}},"responses":{"200":{"description":"Transaction built successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"composerAddress":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"Selected Plume composer. Retain this address for updates and finishing the redemption."},"complianceVersion":{"type":"string","enum":["v1","v2"]},"transactionLifetime":{"type":"object","properties":{"blockhash":{"type":"string"},"lastValidBlockHeight":{"type":"string","pattern":"^\\d+$"},"commitment":{"type":"string","enum":["confirmed"]}},"required":["blockhash","lastValidBlockHeight","commitment"]},"txBase64":{"type":"string","minLength":1,"description":"Base64-encoded Solana VersionedTransaction ready for signing. The caller must sign this transaction with the owner wallet and, when feePayer is provided, the fee payer wallet."}},"required":["composerAddress","complianceVersion","transactionLifetime","txBase64"]}},"required":["data"]}}}},"400":{"description":"Bad request or failed redemption fee preflight.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["error","code","retryable","requestId"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"nullable":true},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["success","code","retryable","requestId"]}]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["error","code","retryable","requestId"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"nullable":true},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["success","code","retryable","requestId"]}],"example":{"error":"Internal server error"}}}}}}}},"/solana/nest/async-redeem/quote":{"post":{"tags":["Solana Transaction Builder"],"description":"Quotes Plume USDC proceeds and fees for an asynchronous Nest redemption from current-block state. This preflight is not a binding guarantee of fulfillment-time price or fees.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"nestVaultSlug":{"type":"string","description":"Slug identifying the Nest vault. Valid options: nest-alpha-vault, nest-treasury-vault, nest-basis-vault, nest-wisdom-vault, nest-opal-vault, nest-test-vault, nest-scope-vault, nest-lcrd-vault, nest-perena-vault, nest-falconx-clo, nest-cloa-vault, nhinc, plume-factor-vault.","example":"nest-alpha-vault"},"rawAmountNestToken":{"type":"string","description":"Amount of Nest share tokens to quote, in raw base units.","example":"1000000"}},"required":["nestVaultSlug","rawAmountNestToken"]}}}},"responses":{"200":{"description":"Async redemption quoted successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"nestVaultSlug":{"type":"string"},"redemptionAsset":{"type":"string","enum":["USDC"]},"shareAmount":{"type":"string"},"shareDecimals":{"type":"number"},"redemptionAmount":{"type":"string"},"redemptionDecimals":{"type":"number"},"feeAmount":{"type":"string"},"fees":{"type":"object","properties":{"ratePpm":{"type":"number"},"flatAmount":{"type":"string"},"maxRatePpm":{"type":"number"},"maxFlatAmount":{"type":"string"}},"required":["ratePpm","flatAmount","maxRatePpm","maxFlatAmount"]}},"required":["nestVaultSlug","redemptionAsset","shareAmount","shareDecimals","redemptionAmount","redemptionDecimals","feeAmount","fees"]}},"required":["data"]}}}},"400":{"description":"Invalid request, unsupported USDC redemption, zero proceeds, or excessive active flat fee.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Internal server error"}}}}}}}},"/solana/nest/async-redeem/request/build-tx":{"post":{"tags":["Solana Transaction Builder"],"description":"Returns a base64 transaction to submit an async Nest vault redemption request. New requests use the selected V1 composer; providing composerAddress returns HTTP 400. The API first checks the current Plume USDC redemption quote and fee configuration. \n\nThe transaction includes idempotent creation of the caller's USDC ATA before the OFT send. \n\nUnder the hood, this builds a LayerZero OFT send transaction that transfers Nest shares to the vault's NestVaultComposer contract on Plume with a REQUEST_REDEEM compose command. \n\nThe transaction must be signed and sent by the caller's wallet.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"complianceVersion":{"type":"string","enum":["v1"],"description":"New Solana redemptions use V1 composers independently of the deposit default. V2 is not supported."},"nestVaultSlug":{"type":"string","description":"Slug identifying the Nest vault. Valid options: nest-alpha-vault, nest-treasury-vault, nest-basis-vault, nest-wisdom-vault, nest-opal-vault, nest-test-vault, nest-scope-vault, nest-lcrd-vault, nest-perena-vault, nest-falconx-clo, nest-cloa-vault, nhinc, plume-factor-vault.","example":"nest-alpha-vault"},"owner":{"type":"string","minLength":1,"description":"Base58-encoded Solana public key of the user who owns the Nest share tokens and signs as the OFT token source authority. This wallet pays fees unless feePayer is provided.","example":"CFagSTMBFiMaD4YKHr7mMcKTzpi35DqiBKbDA35BvZgr"},"feePayer":{"type":"string","minLength":1,"description":"Optional base58-encoded Solana public key of a sponsor/relayer that will pay both Solana transaction fees and LayerZero native delivery fees.","example":"Gp2nANpTLh9sdNaay1DnZtHGQmWRS2jfqzMB1xttEST5"},"priorityFee":{"type":"string","enum":["low","medium","high"],"description":"Optional dynamic priority fee level. The API fetches recent prioritization fees for all transaction accounts and selects low/median/high.","example":"medium"},"priorityFeeMaxLamports":{"type":"integer","minimum":0,"description":"Optional maximum total priority fee in lamports. If provided, it takes precedence over priorityFee.","example":20000},"rawAmountNestToken":{"type":"string","description":"Amount of Nest share tokens, in raw base units. Use the configured shareDecimals value (the decimals configured on the Solana share mint) to interpret the amount.","example":"1000000"}},"required":["nestVaultSlug","owner"]}}}},"responses":{"200":{"description":"Transaction built successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"composerAddress":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"Selected Plume composer. Retain this address for updates and finishing the redemption."},"complianceVersion":{"type":"string","enum":["v1","v2"]},"transactionLifetime":{"type":"object","properties":{"blockhash":{"type":"string"},"lastValidBlockHeight":{"type":"string","pattern":"^\\d+$"},"commitment":{"type":"string","enum":["confirmed"]}},"required":["blockhash","lastValidBlockHeight","commitment"]},"txBase64":{"type":"string","minLength":1,"description":"Base64-encoded Solana VersionedTransaction ready for signing. The caller must sign this transaction with the owner wallet and, when feePayer is provided, the fee payer wallet."}},"required":["composerAddress","complianceVersion","transactionLifetime","txBase64"]}},"required":["data"]}}}},"400":{"description":"Bad request or failed redemption fee preflight.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["error","code","retryable","requestId"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"nullable":true},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["success","code","retryable","requestId"]}]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["error","code","retryable","requestId"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"nullable":true},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["success","code","retryable","requestId"]}],"example":{"error":"Internal server error"}}}}}}}},"/solana/nest/async-redeem/update/build-tx":{"post":{"tags":["Solana Transaction Builder"],"description":"Returns a base64 transaction to update an existing async Nest vault redemption request. Positive updates are checked against the current Plume USDC redemption quote and fee configuration; zero cancels. \n\nUnder the hood, this builds a LayerZero OFT send transaction with an UPDATE_REDEEM_REQUEST compose command. The backend calculates the destination compose/drop fee from the current pending redeem state. \n\nThe transaction must be signed and sent by the caller's wallet.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"complianceVersion":{"type":"string","enum":["v1","v2"],"description":"Optional consistency check against the original redemption composer. Does not request a compliance proof or select a new route."},"nestVaultSlug":{"type":"string","description":"Slug identifying the Nest vault. Valid options: nest-alpha-vault, nest-treasury-vault, nest-basis-vault, nest-wisdom-vault, nest-opal-vault, nest-test-vault, nest-scope-vault, nest-lcrd-vault, nest-perena-vault, nest-falconx-clo, nest-cloa-vault, nhinc, plume-factor-vault.","example":"nest-alpha-vault"},"owner":{"type":"string","minLength":1,"description":"Base58-encoded Solana public key of the user who owns the Nest share tokens and signs as the OFT token source authority. This wallet pays fees unless feePayer is provided.","example":"CFagSTMBFiMaD4YKHr7mMcKTzpi35DqiBKbDA35BvZgr"},"feePayer":{"type":"string","minLength":1,"description":"Optional base58-encoded Solana public key of a sponsor/relayer that will pay both Solana transaction fees and LayerZero native delivery fees.","example":"Gp2nANpTLh9sdNaay1DnZtHGQmWRS2jfqzMB1xttEST5"},"priorityFee":{"type":"string","enum":["low","medium","high"],"description":"Optional dynamic priority fee level. The API fetches recent prioritization fees for all transaction accounts and selects low/median/high.","example":"medium"},"priorityFeeMaxLamports":{"type":"integer","minimum":0,"description":"Optional maximum total priority fee in lamports. If provided, it takes precedence over priorityFee.","example":20000},"composerAddress":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"Original Plume composer from the redemption record. Required when the vault has multiple composer deployments."},"newRawAmountNestToken":{"type":"string","description":"New requested Nest share amount, in raw base units. Use the configured shareDecimals value (the decimals configured on the Solana share mint) to interpret the amount.","example":"1000000"}},"required":["nestVaultSlug","owner","newRawAmountNestToken"]}}}},"responses":{"200":{"description":"Transaction built successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"composerAddress":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"Selected Plume composer. Retain this address for updates and finishing the redemption."},"complianceVersion":{"type":"string","enum":["v1","v2"]},"transactionLifetime":{"type":"object","properties":{"blockhash":{"type":"string"},"lastValidBlockHeight":{"type":"string","pattern":"^\\d+$"},"commitment":{"type":"string","enum":["confirmed"]}},"required":["blockhash","lastValidBlockHeight","commitment"]},"txBase64":{"type":"string","minLength":1,"description":"Base64-encoded Solana VersionedTransaction ready for signing. The caller must sign this transaction with the owner wallet and, when feePayer is provided, the fee payer wallet."}},"required":["composerAddress","complianceVersion","transactionLifetime","txBase64"]}},"required":["data"]}}}},"400":{"description":"Bad request or failed redemption fee preflight.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["error","code","retryable","requestId"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"nullable":true},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["success","code","retryable","requestId"]}]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["error","code","retryable","requestId"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"nullable":true},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["success","code","retryable","requestId"]}],"example":{"error":"Internal server error"}}}}}}}},"/solana/nest/composers/{composerAddress}":{"get":{"tags":["Solana"],"description":"Resolve an exact registered composer for pending CCTP relay, including historical deployments. Success does not authorize new deposits.","parameters":[{"schema":{"type":"string"},"required":true,"name":"composerAddress","in":"path"},{"schema":{"type":"integer"},"required":true,"name":"chainId","in":"query"}],"responses":{"200":{"description":"Live-validated registered composer route","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"chainId":{"type":"integer"},"composerAddress":{"type":"string"},"vaultSlug":{"type":"string","minLength":1},"complianceVersion":{"type":"string","enum":["v1","v2"]},"relayerAddress":{"type":"string"},"shareOftAddress":{"type":"string"},"complianceProxyAddress":{"type":"string"},"hookAddress":{"type":"string","nullable":true}},"required":["chainId","composerAddress","vaultSlug","complianceVersion","relayerAddress","shareOftAddress","complianceProxyAddress","hookAddress"]}},"required":["data"]}}}},"400":{"description":"Invalid address or unsupported chain","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}},"404":{"description":"No registered exact chain and composer match","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}},"409":{"description":"Ambiguous registration, unsupported implementation, or invalid live composer target","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}},"503":{"description":"Chain validation unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"]}}}}}}},"/solana/nest/mint/build-tx":{"post":{"tags":["Solana Transaction Builder"],"description":"Returns a base64 transaction to initiate a Nest vault mint. Deposits USDC from Solana to mint Nest share tokens, which are delivered to the receiver's Solana wallet. \n\nThe transaction includes: (1) Creating the receiver's Nest share token ATA if it doesn't exist, (2) Creating the CCTP MessageSent event data account (rent funded by Nest keeper by default), (3) CCTP depositForBurn instruction to bridge USDC to Plume. \n\nOn Plume, the NestVaultComposer receives the USDC, mints vault shares, and sends them back to the receiver via LayerZero OFT. The transaction is pre-signed by the ephemeral event account and, when funding event rent, the Nest keeper. The caller signs with the receiver wallet and, for sponsored transactions, the fee payer wallet. Sponsored transactions require the receiver's Nest share ATA to already exist unless initSponsoredShareAta is true. With that opt-in, the sponsor funds both account creations in the same transaction and must sign any later CCTP rent reclaim.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"complianceVersion":{"type":"string","enum":["v1","v2"]},"rawAmountUsdc":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Amount of USDC to deposit, in raw base units (6 decimals). For example, 1000000 (1e6) represents 1.0 USDC.","example":1000000},"amountUsdc":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"DEPRECATED: Use rawAmountUsdc instead. Amount of USDC in raw base units (6 decimals).","deprecated":true},"finality":{"type":"string","enum":["fast","standard"],"default":"standard","description":"CCTP finality mode. 'fast' (~1-2 min) has higher fees, 'standard' (~15 min) has lower fees.","example":"fast"},"nestVaultSlug":{"type":"string","description":"Slug identifying the Nest vault. Valid options: nest-alpha-vault, nest-treasury-vault, nest-basis-vault, nest-wisdom-vault, nest-opal-vault, nest-test-vault, nest-scope-vault, nest-lcrd-vault, nest-perena-vault, nest-falconx-clo, nest-cloa-vault, nhinc, plume-factor-vault.","example":"nest-alpha-vault"},"receiver":{"type":"string","minLength":1,"description":"Base58-encoded Solana public key of the user who will receive the minted Nest share tokens and provide the USDC burn authority. This wallet pays transaction fees unless feePayer is provided.","example":"CFagSTMBFiMaD4YKHr7mMcKTzpi35DqiBKbDA35BvZgr"},"feePayer":{"type":"string","minLength":1,"description":"Optional base58-encoded Solana public key of a sponsor/relayer that will be the transaction fee payer. When provided, the receiver remains the USDC owner and Nest share receiver. For first-time receivers, the sponsor should pre-create the receiver's Nest share ATA unless initSponsoredShareAta is enabled.","example":"Gp2nANpTLh9sdNaay1DnZtHGQmWRS2jfqzMB1xttEST5"},"initSponsoredShareAta":{"type":"boolean","default":false,"description":"When true and feePayer is supplied, include idempotent creation of the receiver Nest share ATA in the v0 transaction. The fee payer funds both the share ATA and the CCTP event account, replacing the Nest keeper as event rent payer. The sponsor must sign to reclaim CCTP event-account rent later; the Nest keeper cannot reclaim it for the sponsor. Ignored when feePayer is omitted."},"priorityFee":{"type":"string","enum":["low","medium","high"],"description":"Optional dynamic priority fee level. The API fetches recent prioritization fees for all transaction accounts and selects low/median/high.","example":"medium"},"priorityFeeMaxLamports":{"type":"integer","minimum":0,"description":"Optional maximum total priority fee in lamports. If provided, it takes precedence over priorityFee.","example":7500}},"required":["nestVaultSlug","receiver"]}}}},"responses":{"200":{"description":"Transaction built successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"complianceVersion":{"type":"string","enum":["v1","v2"]},"composerAddress":{"type":"string"},"cctpReclaim":{"type":"object","properties":{"messageSentEventData":{"type":"string","description":"Public key of the CCTP event account to reclaim."},"rentPayer":{"type":"string","description":"Required reclaim signer and recipient of the reclaimed SOL."},"messageTransmitterProgramId":{"type":"string","description":"CCTP MessageTransmitterV2 program; derive its state PDA using the seed \"message_transmitter\"."},"sourceDomain":{"type":"integer","minimum":0,"description":"CCTP source domain for Circle GET /v2/messages/{sourceDomain}?transactionHash=<mint signature>."}},"required":["messageSentEventData","rentPayer","messageTransmitterProgramId","sourceDomain"],"description":"Present only when initSponsoredShareAta is true and feePayer is provided. After submission, save the mint signature and fetch Circle message and attestation for reclaim_event_account. Use Circle message as destination_message; the event account private key is not required. Reclaim eligibility is determined by the on-chain event account and CCTP program."},"transactionLifetime":{"type":"object","properties":{"blockhash":{"type":"string"},"lastValidBlockHeight":{"type":"string","pattern":"^\\d+$"},"commitment":{"type":"string","enum":["confirmed"]}},"required":["blockhash","lastValidBlockHeight","commitment"]},"txBase64":{"type":"string","minLength":1,"description":"Base64-encoded Solana VersionedTransaction ready for signing. The caller must sign this transaction with the receiver wallet and, when feePayer is provided, the fee payer wallet."}},"required":["complianceVersion","composerAddress","transactionLifetime","txBase64"]}},"required":["data"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["error","code","retryable","requestId"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"nullable":true},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["success","code","retryable","requestId"]}],"example":{"error":"Sponsored Solana mint requires the receiver Nest share ATA to exist; create it with the fee payer before building the mint transaction","code":"SHARE_ATA_REQUIRED","retryable":false,"requestId":"example-request"}}}}},"403":{"description":"Receiver wallet failed compliance check","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["error","code","retryable","requestId"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"nullable":true},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["success","code","retryable","requestId"]}],"example":{"error":"Solana wallet failed compliance check"}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["error","code","retryable","requestId"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"nullable":true},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["success","code","retryable","requestId"]}],"example":{"error":"Internal server error"}}}}}}}},"/solana/nest/redeem/build-tx":{"post":{"tags":["Solana Transaction Builder"],"description":"Returns a base64 transaction to initiate a Nest vault redeem for USDC. \n\nThe transaction includes: (1) Creating the caller's USDC ATA if it doesn't exist, (2) Sending Nest shares via LayerZero OFT to the vault composer on Plume. \n\nUnder the hood, this builds a LayerZero OFT send transaction that transfers Nest shares to the vault's NestVaultComposer contract on Plume, which processes the redemption and returns USDC via CCTP bridge. \n\nThe transaction must be signed and sent by the caller's wallet.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"complianceVersion":{"type":"string","enum":["v1"],"description":"New Solana redemptions use V1 composers independently of the deposit default. V2 is not supported."},"rawAmountNestToken":{"anyOf":[{"type":"string"},{"type":"integer","minimum":0,"exclusiveMinimum":true}],"description":"Amount of Nest share tokens to redeem, in raw base units. Positive safe-integer JSON numbers and base-10 integer strings are supported. Use a string to avoid JavaScript number precision loss. Use the configured shareDecimals value (the decimals configured on the Solana share mint) to interpret the amount.","example":"1000000"},"amountNest":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"DEPRECATED: Use rawAmountNestToken instead. Amount of Nest shares in raw base units; use the configured shareDecimals value (the decimals configured on the Solana share mint) to interpret the amount.","deprecated":true},"nestVaultSlug":{"type":"string","description":"Slug identifying the Nest vault. Valid options: nest-alpha-vault, nest-treasury-vault, nest-basis-vault, nest-wisdom-vault, nest-opal-vault, nest-test-vault, nest-scope-vault, nest-lcrd-vault, nest-perena-vault, nest-falconx-clo, nest-cloa-vault, nhinc, plume-factor-vault.","example":"nest-alpha-vault"},"owner":{"type":"string","minLength":1,"description":"Base58-encoded Solana public key of the user who owns the Nest share tokens and signs as the OFT token source authority. This wallet pays fees unless feePayer is provided.","example":"CFagSTMBFiMaD4YKHr7mMcKTzpi35DqiBKbDA35BvZgr"},"feePayer":{"type":"string","minLength":1,"description":"Optional base58-encoded Solana public key of a sponsor/relayer that will pay both Solana transaction fees and LayerZero native delivery fees. The owner remains the Nest share token authority.","example":"Gp2nANpTLh9sdNaay1DnZtHGQmWRS2jfqzMB1xttEST5"},"dstEid":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"DEPRECATED: This field is ignored. Destination is always Plume mainnet.","deprecated":true},"priorityFee":{"type":"string","enum":["low","medium","high"],"description":"Optional dynamic priority fee level. The API fetches recent prioritization fees for all transaction accounts and selects low/median/high.","example":"medium"},"priorityFeeMaxLamports":{"type":"integer","minimum":0,"description":"Optional maximum total priority fee in lamports. If provided, it takes precedence over priorityFee.","example":20000}},"required":["nestVaultSlug","owner"]}}}},"responses":{"200":{"description":"Transaction built successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"complianceVersion":{"type":"string","enum":["v1","v2"]},"composerAddress":{"type":"string"},"transactionLifetime":{"type":"object","properties":{"blockhash":{"type":"string"},"lastValidBlockHeight":{"type":"string","pattern":"^\\d+$"},"commitment":{"type":"string","enum":["confirmed"]}},"required":["blockhash","lastValidBlockHeight","commitment"]},"txBase64":{"type":"string","minLength":1,"description":"Base64-encoded Solana VersionedTransaction ready for signing. The caller must sign this transaction with the owner wallet and, when feePayer is provided, the fee payer wallet."}},"required":["complianceVersion","composerAddress","transactionLifetime","txBase64"]}},"required":["data"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["error","code","retryable","requestId"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"nullable":true},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["success","code","retryable","requestId"]}]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["error","code","retryable","requestId"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"nullable":true},"code":{"type":"string","enum":["INVALID_REQUEST","SHARE_ATA_REQUIRED","OWNER_TOKEN_ACCOUNT_NOT_FOUND","INSUFFICIENT_NEST_BALANCE","FEE_PAYER_UNFUNDED","FEE_PAYER_INVALID","AMOUNT_NOT_REPRESENTABLE","REDEMPTION_QUOTE_REJECTED","UNSUPPORTED_COMPOSER_ROUTE","COMPLIANCE_REJECTED","COMPLIANCE_UNAVAILABLE","COMPLIANCE_TIMEOUT","SOLANA_RPC_TIMEOUT","SOLANA_RPC_RATE_LIMITED","SOLANA_RPC_UNAVAILABLE","SOLANA_RPC_INVALID_RESPONSE","PLUME_RPC_TIMEOUT","PLUME_RPC_UNAVAILABLE","PLUME_RPC_INVALID_RESPONSE","CIRCLE_API_TIMEOUT","CIRCLE_API_UNAVAILABLE","CIRCLE_API_INVALID_RESPONSE","SOLANA_SIMULATION_FAILED","SOLANA_BLOCKHASH_UNAVAILABLE","BUILD_DEADLINE_EXCEEDED","BUILD_CONFIGURATION_ERROR","INTERNAL_ERROR"]},"retryable":{"type":"boolean"},"requestId":{"type":"string"}},"required":["success","code","retryable","requestId"]}],"example":{"error":"Internal server error"}}}}}}}},"/solana/tokens":{"get":{"tags":["Solana Token Supply"],"description":"Get supply information for all tracked Solana tokens","responses":{"200":{"description":"List of all token supplies","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"Vault slug","example":"nest-basis-vault"},"mintAddress":{"type":"string","description":"Solana SPL token mint address (base58)","example":"G6SkPqYTbtVFYU4krZLDgHf5MVMfARG57G1kog4RYH2n"},"rawSupply":{"type":"string","description":"Raw token supply as string (to avoid BigInt precision issues)","example":"1000000000000"},"decimals":{"type":"number","description":"Token decimals","example":6},"tokenSupply":{"type":"number","description":"Human-readable token supply (rawSupply / 10^decimals)","example":1000000}},"required":["slug","mintAddress","rawSupply","decimals","tokenSupply"]}}},"required":["data"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/solana/tokens/{slugOrMintAddress}":{"get":{"tags":["Solana Token Supply"],"description":"Get supply information for a specific Solana token by slug or mint address","parameters":[{"schema":{"type":"string","description":"Vault slug (e.g., nest-basis-vault) or Solana mint address (base58)","example":"nest-basis-vault"},"required":true,"description":"Vault slug (e.g., nest-basis-vault) or Solana mint address (base58)","name":"slugOrMintAddress","in":"path"}],"responses":{"200":{"description":"Token supply information","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"slug":{"type":"string","description":"Vault slug","example":"nest-basis-vault"},"mintAddress":{"type":"string","description":"Solana SPL token mint address (base58)","example":"G6SkPqYTbtVFYU4krZLDgHf5MVMfARG57G1kog4RYH2n"},"rawSupply":{"type":"string","description":"Raw token supply as string (to avoid BigInt precision issues)","example":"1000000000000"},"decimals":{"type":"number","description":"Token decimals","example":6},"tokenSupply":{"type":"number","description":"Human-readable token supply (rawSupply / 10^decimals)","example":1000000}},"required":["slug","mintAddress","rawSupply","decimals","tokenSupply"]}},"required":["data"]}}}},"404":{"description":"Token not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Token not found for: invalid-slug"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/solana/{address}/vaults/{slug}/transaction-history":{"get":{"tags":["Solana Transaction History"],"description":"Get Solana user transaction history for a specific vault. Returns deposits (mints) and withdrawals (redeems) for the given wallet and vault.","parameters":[{"schema":{"type":"string","description":"Solana wallet address (base58)","example":"CFagSTMBFiMaD4YKHr7mMcKTzpi35DqiBKbDA35BvZgr"},"required":true,"description":"Solana wallet address (base58)","name":"address","in":"path"},{"schema":{"type":"string","description":"Vault slug","example":"nest-basis-vault"},"required":true,"description":"Vault slug","name":"slug","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Start date filter (epoch seconds)"},"required":false,"description":"Start date filter (epoch seconds)","name":"startDate","in":"query"},{"schema":{"type":"number","nullable":true,"description":"End date filter (epoch seconds)"},"required":false,"description":"End date filter (epoch seconds)","name":"endDate","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":200,"default":50,"description":"Maximum number of transactions to return","example":50},"required":false,"description":"Maximum number of transactions to return","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor returned from a previous request"},"required":false,"description":"Cursor returned from a previous request","name":"cursor","in":"query"}],"responses":{"200":{"description":"Solana user transaction history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"transactionHash":{"type":"string","description":"Solana transaction signature (base58)","example":"5yNxWz3vLrJQpKK8qPJpEsdPzLHiCvKEu2rpH6nEpntPKxv4dCwfKcqWpTvTgV5aJRHxPqKkzBrJpLxKvfbQZJjP"},"transactionType":{"type":"string","enum":["DEPOSIT","WITHDRAW_REQUEST","WITHDRAW_INSTANT","WITHDRAW_CLAIM","WITHDRAW_UPDATE"]},"vaultAddress":{"type":"string","description":"OFT store address on Solana (may be empty)","example":""},"user":{"type":"string","description":"Solana wallet address (base58)","example":"CFagSTMBFiMaD4YKHr7mMcKTzpi35DqiBKbDA35BvZgr"},"createdAt":{"type":"number","description":"Transaction timestamp in epoch seconds","example":1717334400},"shares":{"type":"number","description":"Share amount in token units","example":100.5},"sharesTokenAddress":{"type":"string","description":"Solana share token mint address (base58)","example":"G6SkPqYTbtVFYU4krZLDgHf5MVMfARG57G1kog4RYH2n"},"assets":{"type":"number","nullable":true,"description":"Asset amount in token units (USDC)","example":100.5},"assetsTokenAddress":{"type":"string","description":"Solana USDC mint address","example":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"},"chainId":{"type":"number","description":"Chain ID (Solana placeholder)","example":9999999}},"required":["transactionHash","transactionType","vaultAddress","user","createdAt","shares","sharesTokenAddress","assets","assetsTokenAddress","chainId"]}},"pageInfo":{"type":"object","properties":{"endCursor":{"type":"string","nullable":true,"description":"Cursor to fetch the next page of results"},"hasNextPage":{"type":"boolean","description":"Whether another page of results is available"}},"required":["endCursor","hasNextPage"]}},"required":["items","pageInfo"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Invalid cursor"}}}}},"404":{"description":"Vault not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Vault 'invalid-vault' not found or not supported for Solana"}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Server error"}}}}}}}},"/token-holders":{"get":{"tags":["Token Holders"],"description":"Gets all token holders across all Nest vaults, aggregated by address and token","responses":{"200":{"description":"Token holders data","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"holders":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"Holder wallet address","example":"0x1234567890123456789012345678901234567890"},"tokenAddress":{"type":"string","description":"Token address (EVM vault address or Solana mint address)","example":"0xabcdef1234567890abcdef1234567890abcdef12"},"balance":{"type":"number","description":"Token balance (decimal-adjusted)","example":1000.5},"value":{"type":"number","description":"USD value of holdings","example":1050.525}},"required":["address","tokenAddress","balance","value"]},"description":"List of token holders sorted by value descending"},"count":{"type":"number","description":"Total number of holders","example":150}},"required":["holders","count"]}},"required":["data"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Bad Request"}},"required":["error"],"example":{"error":"Internal server error"}}}}}}}}}}