{"openapi":"3.0.0","paths":{"/v1/yields":{"get":{"operationId":"YieldsController_getYields","summary":"List all yield opportunities","description":"Retrieve a paginated list of available yield opportunities across all supported networks and protocols.","parameters":[{"name":"offset","required":false,"in":"query","description":"Offset for pagination","example":0,"schema":{"minimum":0,"default":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","example":20,"schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"network","required":false,"in":"query","description":"Filter by network","schema":{"enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"],"type":"string"}},{"name":"chainId","required":false,"in":"query","description":"Filter by EVM chain ID (Ethereum: 1, Polygon: 137)","example":"1","schema":{"type":"string"}},{"name":"networks","required":false,"in":"query","description":"Filter by multiple networks (comma separated)","schema":{"type":"string"}},{"name":"yieldId","required":false,"in":"query","example":"optimism-usdt-aave-v3-lending","schema":{"maxLength":200,"type":"string"}},{"name":"yieldIds","required":false,"in":"query","example":["optimism-usdt-aave-v3-lending"],"schema":{"maxItems":100,"maxLength":200,"type":"array","items":{"type":"string"}}},{"name":"type","required":false,"in":"query","description":"Filter by yield type","schema":{"enum":["staking","restaking","lending","vault","fixed_yield","real_world_asset","concentrated_liquidity_pool","liquidity_pool","liquid_staking"],"type":"string"}},{"name":"types","required":false,"in":"query","description":"Filter by multiple yield types (comma separated)","schema":{"type":"array","items":{"type":"string","enum":["staking","restaking","lending","vault","fixed_yield","real_world_asset","concentrated_liquidity_pool","liquidity_pool","liquid_staking"]}}},{"name":"hasCooldownPeriod","required":false,"in":"query","description":"Filter by cooldown period","example":true,"schema":{"type":"boolean"}},{"name":"hasWarmupPeriod","required":false,"in":"query","description":"Filter by warmup period","example":true,"schema":{"type":"boolean"}},{"name":"token","required":false,"in":"query","description":"Filter by token symbol or address","schema":{"type":"string"}},{"name":"inputToken","required":false,"in":"query","description":"Filter by input token symbol or address","schema":{"type":"string"}},{"name":"inputTokens","required":false,"in":"query","description":"Filter by multiple input token symbol or address (comma separated)","schema":{"type":"array","items":{"type":"string"}}},{"name":"provider","required":false,"in":"query","description":"Filter by provider ID","schema":{"type":"string"}},{"name":"providers","required":false,"in":"query","description":"Filter by multiple provider IDs (comma separated)","schema":{"type":"array","items":{"type":"string"}}},{"name":"search","required":false,"in":"query","description":"Search by yield name","schema":{"type":"string"}},{"name":"prime","required":false,"in":"query","description":"Filter by the Prime quality flag. `true` returns only Prime yields; `false` returns only non-Prime yields; omitting the parameter returns the full catalog. Composable with all other filters.","example":true,"schema":{"type":"boolean"}},{"name":"sort","required":false,"in":"query","description":"Sort by yield status or reward rate","schema":{"enum":["statusEnterAsc","statusEnterDesc","statusExitAsc","statusExitDesc","rewardRateAsc","rewardRateDesc"],"type":"string"}}],"responses":{"200":{"description":"Returns a paginated list of yield opportunities","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponseDto"},{"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/YieldDto"}}}}]}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Discovery"]}},"/v1/yields/balances":{"post":{"operationId":"YieldsController_getAggregateBalances","summary":"Get balances across multiple yields and networks","description":"Retrieve balances for multiple wallet addresses across different networks and yield opportunities. Send an array of balance requests - each request can specify a yieldId (optional for chain scanning), address, network, and custom arguments. This is the same format as the single yield balance endpoint but in array form. Duplicate requests (same yieldId + address + network) are automatically deduplicated, with specific yield requests taking precedence over chain scans.","parameters":[],"requestBody":{"required":true,"description":"Request containing an array of balance queries. Each query contains: yieldId (optional), address (required), network (required), and arguments (optional). When yieldId is omitted, all yields for that network will be scanned. You can mix chain scans with specific yield queries - duplicates are automatically deduplicated with specific queries taking precedence.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalancesRequestDto"}}}},"responses":{"200":{"description":"Returns balances grouped by yield with detailed error information for failed yields. Only yields with non-zero balances are included in the response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalancesResponseDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Portfolio"]}},"/v1/yields/{yieldId}":{"get":{"operationId":"YieldsController_getYield","summary":"Get yield metadata","description":"Retrieve detailed information about a specific yield opportunity including APY, tokens, protocol details, and more.","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield","example":"ethereum-eth-lido-staking","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns yield metadata including network, APR, TVL, and token information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/YieldDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Yield not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Discovery"]}},"/v1/yields/{yieldId}/risk":{"get":{"operationId":"YieldsController_getYieldRisk","summary":"Get risk ratings for a yield","description":"Retrieve consolidated risk ratings from third-party providers for a yield.","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield","example":"ethereum-eth-lido-staking","schema":{"type":"string"}}],"responses":{"200":{"description":"Risk ratings retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/YieldRiskDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Yield not found, or risk data has not yet been collected for this yield"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Yields"]}},"/v1/yields/{yieldId}/balances/history":{"get":{"operationId":"YieldsController_getBalanceHistory","summary":"Get historical balance snapshots for a yield","description":"Returns a chronological time series of balance snapshots for a wallet address within a yield. Each entry reflects the position at a specific timestamp or block. Supports configurable sampling intervals and point-in-time queries. Only available for ERC4626 vaults with indexed transfer history.","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield","example":"ethereum-eth-lido-staking","schema":{"type":"string"}},{"name":"address","required":true,"in":"query","description":"Wallet address to fetch history for","example":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e","schema":{"type":"string"}},{"name":"from","required":false,"in":"query","description":"Start of time range (ISO 8601)","example":"2025-01-01T00:00:00Z","schema":{"type":"string"}},{"name":"to","required":false,"in":"query","description":"End of time range (ISO 8601). Defaults to now.","example":"2025-07-12T00:00:00Z","schema":{"type":"string"}},{"name":"blockNumber","required":false,"in":"query","description":"Block number for a point-in-time snapshot. When provided, from/to/interval are ignored.","example":20540000,"schema":{"type":"number"}},{"name":"feeConfigurationId","required":false,"in":"query","description":"Fee configuration ID used to select allocator vault contract history. Falls back to default fee configuration.","example":"66f299cd-aaaa-bbbb-cccc-d1f26e3a02db","schema":{"type":"string"}},{"name":"interval","required":false,"in":"query","description":"Sampling resolution for the time series","schema":{"enum":["block","hour","day","week"],"type":"string"}},{"name":"sort","required":false,"in":"query","description":"Sort order by timestamp. Defaults to most recent first (desc).","schema":{"enum":["asc","desc"],"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of items to return (default 30, max 100)","example":30,"schema":{"minimum":1,"maximum":100,"default":30,"type":"number"}},{"name":"offset","required":false,"in":"query","description":"Pagination offset","example":0,"schema":{"minimum":0,"default":0,"type":"number"}}],"responses":{"200":{"description":"Returns a paginated time series of balance snapshots","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponseDto"},{"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BalanceHistorySnapshotDto"}}}}]}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Yield not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Portfolio"]}},"/v1/yields/{yieldId}/balances":{"post":{"operationId":"YieldsController_getYieldBalances","summary":"Get balances for a specific yield","description":"Retrieve all balances associated with a yield opportunity for a specific wallet address, including active, pending, claimable, and withdrawable balances. The network is automatically determined from the yield configuration.","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield opportunity","example":"ethereum-eth-lido-staking","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Balance request with address and optional arguments for advanced balance queries","content":{"application/json":{"schema":{"$ref":"#/components/schemas/YieldBalancesRequestDto"}}}},"responses":{"200":{"description":"Returns balance information including different balance types (active, entering, exiting, withdrawable, claimable, locked) with amounts and available actions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/YieldBalancesDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Yield not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Portfolio"]}},"/v1/yields/{yieldId}/rewards/history":{"get":{"operationId":"YieldsController_getYieldRewards","summary":"Get reward history","description":"Retrieve a chronological list of on-chain reward events for an indexed yield. Each record includes timestamp, token metadata, amount, reward source, and transaction reference.","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield","example":"ethereum-usdc-morpho-vault","schema":{"type":"string"}},{"name":"address","required":true,"in":"query","description":"Wallet address to fetch rewards for","example":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e","schema":{"type":"string"}},{"name":"from","required":false,"in":"query","description":"Start of time range (ISO 8601)","example":"2025-01-01T00:00:00Z","schema":{"type":"string"}},{"name":"to","required":false,"in":"query","description":"End of time range (ISO 8601)","example":"2025-07-12T00:00:00Z","schema":{"type":"string"}},{"name":"sort","required":false,"in":"query","description":"Sort order by timestamp (default: desc)","schema":{"enum":["asc","desc"],"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of items to return (default: 100, max: 100)","example":100,"schema":{"minimum":1,"maximum":100,"default":100,"type":"number"}},{"name":"offset","required":false,"in":"query","description":"Pagination offset (default: 0)","example":0,"schema":{"minimum":0,"default":0,"type":"number"}}],"responses":{"200":{"description":"Paginated reward events","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Reward history not available for this yield (not indexed)"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Portfolio"]}},"/v1/yields/{yieldId}/reward-rate/history":{"get":{"operationId":"YieldsController_getYieldRewardRateHistory","summary":"Get historical reward rate snapshots for a yield","description":"Returns a chronological time series of reward rate snapshots for the specified yield, suitable for charting and analytics. Supports configurable time ranges, sampling intervals (day/week/month), and pagination.","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield","example":"ethereum-eth-lido-staking","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"Pagination offset","example":0,"schema":{"minimum":0,"default":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of data points to return (default 100, max 365)","example":20,"schema":{"minimum":1,"maximum":365,"default":100,"type":"number"}},{"name":"from","required":false,"in":"query","description":"Start of time range (ISO 8601). Overrides period when provided.","example":"2025-01-01T00:00:00Z","schema":{"type":"string"}},{"name":"to","required":false,"in":"query","description":"End of time range (ISO 8601). Defaults to now.","example":"2025-07-10T00:00:00Z","schema":{"type":"string"}},{"name":"period","required":false,"in":"query","description":"Predefined time window. Ignored when from/to are provided. Default: 30d.","schema":{"enum":["1d","7d","30d","90d","1y","all"],"type":"string"}},{"name":"interval","required":false,"in":"query","description":"Sampling resolution (day/week/month). Default: day.","schema":{"enum":["day","week","month"],"type":"string"}}],"responses":{"200":{"description":"Returns a time series of reward rate snapshots","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RewardRateHistoryResponseDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Yield not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["YieldData"]}},"/v1/yields/{yieldId}/tvl/history":{"get":{"operationId":"YieldsController_getYieldTvlHistory","summary":"Get historical TVL snapshots for a yield","description":"Returns a chronological time series of Total Value Locked for the specified yield, expressed in underlying token units. Supports configurable time ranges, sampling intervals (day/week/month), and pagination.","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield","example":"ethereum-usdc-aave-v3-lending","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"Pagination offset","example":0,"schema":{"minimum":0,"default":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of data points to return (default 100, max 365)","example":20,"schema":{"minimum":1,"maximum":365,"default":100,"type":"number"}},{"name":"from","required":false,"in":"query","description":"Start of time range (ISO 8601). Overrides period when provided.","example":"2025-01-01T00:00:00Z","schema":{"type":"string"}},{"name":"to","required":false,"in":"query","description":"End of time range (ISO 8601). Defaults to now.","example":"2025-07-10T00:00:00Z","schema":{"type":"string"}},{"name":"period","required":false,"in":"query","description":"Predefined time window. Ignored when from/to are provided. Default: 30d.","schema":{"enum":["1d","7d","30d","90d","1y","all"],"type":"string"}},{"name":"interval","required":false,"in":"query","description":"Sampling resolution (day/week/month). Default: day.","schema":{"enum":["day","week","month"],"type":"string"}}],"responses":{"200":{"description":"Returns a time series of TVL snapshots in token units","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvlHistoryResponseDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Yield not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["YieldData"]}},"/v1/yields/{yieldId}/validators":{"get":{"operationId":"YieldsController_getYieldValidators","summary":"Get yield validators","description":"Retrieve a paginated list of validators available for staking or delegation for this yield opportunity.","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield","example":"solana-sol-native-multivalidator-staking","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"Offset for pagination","example":0,"schema":{"minimum":0,"default":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","example":20,"schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"name","required":false,"in":"query","description":"Filter by validator name (case-insensitive, partial match)","schema":{"type":"string"}},{"name":"address","required":false,"in":"query","description":"Filter by validator address","schema":{"type":"string"}},{"name":"provider","required":false,"in":"query","description":"Filter by provider ID","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter by validator status","schema":{"type":"string"}},{"name":"preferred","required":false,"in":"query","description":"Filter by preferred flag","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Returns paginated list of available validators with detailed information","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponseDto"},{"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorDto"}}}}]}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Yield not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Discovery"]}},"/v1/yields/{yieldId}/campaigns":{"get":{"operationId":"YieldsController_getYieldCampaigns","summary":"Get yield campaigns","description":"Returns campaign metadata for the given yield opportunity within the API key project scope.","parameters":[{"name":"yieldId","required":true,"in":"path","example":"cosmos-atom-native-staking","description":"Yield integration ID.","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"Offset for pagination","example":0,"schema":{"minimum":0,"default":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of items to return","example":20,"schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"status","required":false,"in":"query","description":"Campaign status filter. Defaults to active.","schema":{"$ref":"#/components/schemas/CampaignStatus"}}],"responses":{"200":{"description":"Campaign metadata for the given yield","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponseDto"},{"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/YieldCampaignDto"}}}}]}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Yield not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Discovery"]}},"/v1/tokens":{"get":{"operationId":"TokensController_getTokens","summary":"List tokens with available yields","description":"Retrieve tokens that have at least one enabled yield available for this project. Optionally filter by one or more networks and yield types. Returns the full list by default; callers should respect `total` and use `offset`/`limit`, as a default page size may be introduced in future.","parameters":[{"name":"networks","required":false,"in":"query","description":"Filter by one or more networks. Supports repeated values or comma separated values.","schema":{"type":"array","items":{"type":"string","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"]}}},{"name":"yieldTypes","required":false,"in":"query","description":"Filter by one or more yield types. Supports repeated values or comma separated values.","schema":{"type":"array","items":{"type":"string","enum":["staking","restaking","lending","vault","fixed_yield","real_world_asset","concentrated_liquidity_pool","liquidity_pool","liquid_staking"]}}},{"name":"offset","required":false,"in":"query","description":"Offset for pagination","schema":{"minimum":0,"default":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of items to return. Omit to return the full list.","schema":{"minimum":1,"type":"number"}}],"responses":{"200":{"description":"Returns tokens with available enabled yields","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponseDto"},{"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TokenWithAvailableYieldsDto"}}}}]}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Discovery"]}},"/v1/actions":{"get":{"operationId":"ActionsController_getActions","summary":"Get user actions","description":"Retrieve all actions performed by a user, with optional filtering by yield, status, category, etc. In the future, this may include personalized action recommendations.","parameters":[{"name":"offset","required":false,"in":"query","description":"Offset for pagination","example":0,"schema":{"minimum":0,"default":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of items to return","example":20,"schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"address","required":true,"in":"query","description":"User wallet address to get actions for","example":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter actions by status","schema":{"enum":["CANCELED","CREATED","WAITING_FOR_NEXT","PROCESSING","FAILED","SUCCESS","STALE"],"type":"string"}},{"name":"statuses","required":false,"in":"query","description":"Filter actions by multiple statuses (supports CSV or repeated query params)","schema":{"type":"array","items":{"type":"string","enum":["CANCELED","CREATED","WAITING_FOR_NEXT","PROCESSING","FAILED","SUCCESS","STALE"]}}},{"name":"intent","required":false,"in":"query","description":"Filter actions by intent","schema":{"enum":["enter","exit","manage"],"type":"string"}},{"name":"type","required":false,"in":"query","description":"Filter by action type","schema":{"enum":["STAKE","UNSTAKE","WITHDRAW_REQUEST","INSTANT_WITHDRAW","CLAIM_REWARDS","AUTO_SWEEP_UNSTAKE_REWARDS","AUTO_SWEEP_WITHDRAW_REWARDS","RESTAKE_REWARDS","WITHDRAW","WITHDRAW_ALL","RESTAKE","CLAIM_UNSTAKED","UNLOCK_LOCKED","STAKE_LOCKED","VOTE","REVOKE","VOTE_LOCKED","REVOTE","REBOND","MIGRATE","VERIFY_WITHDRAW_CREDENTIALS","DELEGATE"],"type":"string"}},{"name":"yieldId","required":false,"in":"query","description":"Filter actions by specific yield","example":"ethereum-eth-lido-staking","schema":{"type":"string"}},{"name":"yieldTypes","required":false,"in":"query","description":"Filter actions by multiple yield types (supports CSV or repeated query params)","schema":{"type":"array","items":{"type":"string","enum":["staking","restaking","lending","vault","fixed_yield","real_world_asset","concentrated_liquidity_pool","liquidity_pool","liquid_staking"]}}},{"name":"network","required":false,"in":"query","description":"Filter by network","schema":{"enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"],"type":"string"}}],"responses":{"200":{"description":"Returns a paginated list of user actions","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponseDto"},{"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ActionDto"}}}}]}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Actions"]}},"/v1/actions/{actionId}":{"get":{"operationId":"ActionsController_getAction","summary":"Get action details","description":"Retrieve detailed information about a specific action including current status, transactions, and execution details.","parameters":[{"name":"actionId","required":true,"in":"path","description":"The unique identifier of the action","example":"action_123abc","schema":{"type":"string"}}],"responses":{"200":{"description":"Action details retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Action not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Actions"]}},"/v1/actions/enter":{"post":{"operationId":"ActionsController_enterYield","summary":"Enter a yield","description":"Generate the transactions needed to enter a yield position with the provided parameters.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateActionDto"}}}},"responses":{"201":{"description":"Returns action with array of transactions to execute","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"403":{"description":"Access denied due to geolocation restrictions","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Access denied from US (US-CA)"},"error":{"type":"string","example":"Forbidden"},"statusCode":{"type":"number","example":403}}}}}},"404":{"description":"Yield not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Actions"]}},"/v1/actions/exit":{"post":{"operationId":"ActionsController_exitYield","summary":"Exit a yield","description":"Generate the transactions needed to exit a yield position with the provided parameters.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateActionDto"}}}},"responses":{"201":{"description":"Returns action with array of transactions to execute","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"403":{"description":"Access denied due to geolocation restrictions","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Access denied from US (US-CA)"},"error":{"type":"string","example":"Forbidden"},"statusCode":{"type":"number","example":403}}}}}},"404":{"description":"Yield not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Actions"]}},"/v1/actions/manage":{"post":{"operationId":"ActionsController_manageYield","summary":"Manage a yield","description":"Generate the transactions needed to perform management actions on a yield position.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManageActionDto"}}}},"responses":{"201":{"description":"Returns action with array of transactions to execute","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"403":{"description":"Access denied due to geolocation restrictions","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Access denied from US (US-CA)"},"error":{"type":"string","example":"Forbidden"},"statusCode":{"type":"number","example":403}}}}}},"404":{"description":"Yield not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Actions"]}},"/v1/transactions/{transactionId}/submit-hash":{"put":{"operationId":"TransactionsController_submitTransactionHash","summary":"Submit transaction hash","description":"Submit the transaction hash after broadcasting a transaction to the blockchain. This updates the transaction status and enables tracking.","parameters":[{"name":"transactionId","required":true,"in":"path","description":"The unique identifier of the transaction","example":"21f5fd15-cf80-4b9a-804f-062c40dc3740","schema":{}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitHashDto"}}}},"responses":{"200":{"description":"Transaction successfully updated with hash","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionDto"}}}},"400":{"description":"Invalid transaction hash format"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Transaction not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Actions"]}},"/v1/transactions/{transactionId}/submit":{"post":{"operationId":"TransactionsController_submitTransaction","summary":"Submit transaction","description":"Submit the transaction to the blockchain.","parameters":[{"name":"transactionId","required":true,"in":"path","description":"The unique identifier of the transaction","example":"21f5fd15-cf80-4b9a-804f-062c40dc3740","schema":{}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitTransactionDto"}}}},"responses":{"200":{"description":"Transaction successfully submitted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionDto"}}}},"400":{"description":"Invalid transaction format"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Transaction not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Actions"]}},"/v1/transactions/{transactionId}":{"get":{"operationId":"TransactionsController_getTransaction","summary":"Get transaction details","description":"Retrieve detailed information about a specific transaction including current status, hash, and execution details.","parameters":[{"name":"transactionId","required":true,"in":"path","description":"The unique identifier of the transaction","example":"21f5fd15-cf80-4b9a-804f-062c40dc3740","schema":{}}],"responses":{"200":{"description":"Transaction details retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Transaction not found with the specified ID"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Actions"]}},"/v1/yields/{yieldId}/kyc/status":{"get":{"operationId":"KycController_getStatus","summary":"Get the KYC status of an address for a yield","description":"Returns the normalized KYC status for the given address. Yields without a KYC requirement return not_required.","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The yield integration ID","schema":{"type":"string"}},{"name":"address","required":true,"in":"query","description":"Wallet address to check KYC status for","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KycStatusResponseDto"}}}},"400":{"description":"Missing or invalid address"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"404":{"description":"Yield not found"},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}}},"tags":["KYC"],"security":[{"ApiKey":[]}]}},"/v1/networks":{"get":{"operationId":"NetworksController_getNetworks","summary":"List enabled networks","description":"Retrieve networks with enabled yield opportunities for the authenticated project.","parameters":[],"responses":{"200":{"description":"Returns enabled networks for the authenticated project","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NetworkDto"}}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Discovery"]}},"/v1/providers":{"get":{"operationId":"ProvidersController_getProviders","summary":"Get all providers","description":"Returns a paginated list of all providers, including both protocol and validator providers.","parameters":[{"name":"offset","required":false,"in":"query","description":"Offset for pagination","example":0,"schema":{"minimum":0,"default":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","example":20,"schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":"List of providers","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponseDto"},{"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProviderDto"}}}}]}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Discovery"]}},"/v1/providers/{providerId}":{"get":{"operationId":"ProvidersController_getProvider","summary":"Get provider by ID","description":"Returns detailed information about a specific provider.","parameters":[{"name":"providerId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Provider details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderDto"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Validation failed"},"error":{"type":"string","example":"Bad Request"},"statusCode":{"type":"number","example":400}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"},"error":{"type":"string","example":"Unauthorized"},"statusCode":{"type":"number","example":401}}}}}},"429":{"description":"Rate limit exceeded","headers":{"x-ratelimit-limit":{"description":"Request limit per window","schema":{"type":"string"}},"x-ratelimit-remaining":{"description":"Remaining requests (will be 0)","schema":{"type":"string"}},"x-ratelimit-reset":{"description":"Unix timestamp when window resets","schema":{"type":"string"}},"retry-after":{"description":"Seconds to wait before retrying","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Rate limit exceeded"},"error":{"type":"string","example":"Too Many Requests"},"statusCode":{"type":"number","example":429},"retryAfter":{"type":"number","example":30}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Internal server error"},"error":{"type":"string","example":"Internal Server Error"},"statusCode":{"type":"number","example":500}}}}}}},"security":[{"ApiKey":[]}],"tags":["Discovery"]}},"/health":{"get":{"operationId":"HealthController_health","summary":"Health check","description":"Get the health status of the yield API with current timestamp","parameters":[],"responses":{"200":{"description":"Health check status with timestamp","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatusDto"}}}}},"tags":["Health"]}}},"info":{"title":"Yield.xyz API","description":"API Documentation","version":"1.0","contact":{}},"tags":[{"name":"Discovery","description":"Browse and discover yield opportunities, networks, and providers"},{"name":"Portfolio","description":"User-specific balances, activity, and rewards"},{"name":"Actions","description":"Generate transactions to enter, exit, and manage yields"}],"servers":[{"url":"https://api.yield.xyz","description":"Production environment"}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"TokenDto":{"type":"object","properties":{"symbol":{"type":"string","description":"Token symbol","example":"ETH"},"name":{"type":"string","description":"Token name","example":"Ethereum"},"decimals":{"type":"number","description":"Token decimal places","example":18},"network":{"type":"string","description":"Token network","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"],"example":"Ethereum"},"address":{"type":"string","description":"Token address (if applicable)","example":"0x..."},"logoURI":{"type":"string","description":"Token logo URI","example":"https://..."},"isPoints":{"type":"boolean","description":"Token is points","example":true},"coinGeckoId":{"type":"string","description":"Token CoinGecko ID","example":"ethereum"}},"required":["symbol","name","decimals","network"]},"RewardDto":{"type":"object","properties":{"rate":{"type":"number","description":"Reward rate as a decimal (e.g. 0.04 = 4%)","example":0.04},"rateType":{"type":"string","description":"Whether this rate is APR or APY","example":"APR"},"token":{"description":"Token received as reward","allOf":[{"$ref":"#/components/schemas/TokenDto"}]},"yieldSource":{"type":"string","description":"Structured source of yield (e.g. staking, protocol incentive)","enum":["staking","liquid_staking","restaking","protocol_incentive","campaign_incentive","points","lending","mev","real_world_asset_yield","vault"],"example":"protocol_incentive"},"description":{"type":"string","description":"Optional human-readable description of this reward","example":"LDO distributed to incentivize stETH adoption via Lido Boost"}},"required":["rate","rateType","token","yieldSource"]},"RewardRateDto":{"type":"object","properties":{"total":{"type":"number","description":"Estimated reward rate across all sources (e.g. staking, points)","example":6.5},"rateType":{"type":"string","description":"Whether this reward rate is APR or APY","example":"APR"},"components":{"description":"Breakdown of reward rates by source","type":"array","items":{"$ref":"#/components/schemas/RewardDto"}}},"required":["total","rateType","components"]},"YieldStatisticsDto":{"type":"object","properties":{"tvlUsd":{"type":"string","description":"Total value locked in USD","example":"1,200,000","nullable":true},"tvl":{"type":"string","description":"Total value locked in primary underlying token","example":"500.25","nullable":true},"tvlRaw":{"type":"string","description":"Raw total value locked (full precision)","example":"500250000000000000000","nullable":true},"uniqueUsers":{"type":"number","description":"Number of users with active positions in the yield","example":348,"nullable":true},"averagePositionSizeUsd":{"type":"string","description":"Average position size in USD","example":"3,448.27","nullable":true},"averagePositionSize":{"type":"string","description":"Average position size in primary underlying token","example":"1.44","nullable":true}}},"YieldRiskEntryDto":{"type":"object","properties":{"rating":{"type":"string","description":"Provider top-level rating value","example":"AA"},"source":{"type":"string","description":"Provider source label","enum":["credora","stakingRewards"],"example":"credora"}},"required":["rating","source"]},"YieldRiskSummaryDto":{"type":"object","properties":{"ratings":{"description":"Top-level rating entries by provider","type":"array","items":{"$ref":"#/components/schemas/YieldRiskEntryDto"}}},"required":["ratings"]},"YieldStatusDto":{"type":"object","properties":{"enter":{"type":"boolean","description":"Whether the user can currently enter this yield","example":true},"exit":{"type":"boolean","description":"Whether the user can currently exit this yield","example":true}},"required":["enter","exit"]},"ERCStandards":{"type":"string","description":"Supported standards for this yield","enum":["ERC20","ERC4626","ERC721","ERC1155"]},"YieldMetadataDto":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the yield opportunity","example":"Lido Staking"},"logoURI":{"type":"string","description":"Yield opportunity logo URI","example":"https://lido.fi/logo.png"},"description":{"type":"string","description":"Markdown-supported short description of this yield opportunity, including where rewards come from.","example":"Stake ETH with Lido to earn auto-compounding validator rewards via stETH."},"documentation":{"type":"string","description":"Link to documentation or integration guide","example":"https://docs.lido.fi"},"underMaintenance":{"type":"boolean","description":"Whether this yield is currently under maintenance","example":false},"deprecated":{"type":"boolean","description":"Whether this yield is deprecated and will be discontinued","example":false},"supportedStandards":{"type":"array","items":{"$ref":"#/components/schemas/ERCStandards"}},"supportsCampaigns":{"type":"boolean","description":"Whether this yield supports campaign creation","example":true}},"required":["name","logoURI","description","documentation","underMaintenance","deprecated","supportedStandards","supportsCampaigns"]},"YieldType":{"type":"string","description":"Type of yield mechanism (staking, restaking, LP, vault, etc.)","enum":["staking","restaking","lending","vault","fixed_yield","real_world_asset","concentrated_liquidity_pool","liquidity_pool","liquid_staking"]},"RewardSchedule":{"type":"string","description":"How often rewards are distributed (e.g. continuously, epoch-based)","enum":["block","hour","day","week","month","era","epoch","campaign"]},"RewardClaiming":{"type":"string","description":"How rewards are claimed: auto, manual, or mixed","enum":["auto","manual"]},"TimePeriodDto":{"type":"object","properties":{"seconds":{"type":"number","description":"Duration in seconds","example":86400}},"required":["seconds"]},"YieldFeeDto":{"type":"object","properties":{"deposit":{"type":"string","description":"Deposit fee percentage","example":"0.00"},"withdrawal":{"type":"string","description":"Withdrawal fee percentage","example":"0.00"},"management":{"type":"string","description":"Management fee percentage (annual)","example":"2.00"},"performance":{"type":"string","description":"Performance fee percentage","example":"20.00"}}},"YieldEntryLimitsDto":{"type":"object","properties":{"minimum":{"type":"string","description":"Minimum amount required to enter this yield in token units (null if no minimum)","example":"0.01","nullable":true},"maximum":{"type":"string","description":"Maximum amount allowed to enter this yield in token units (null if no limit)","example":"1000.0","nullable":true},"subsequentMinimum":{"type":"string","description":"Minimum amount for deposits after the user already holds the asset, in token units (null falls back to minimum)","example":"10000","nullable":true}},"required":["minimum","maximum","subsequentMinimum"]},"InvestorEligibilityEntryDto":{"type":"object","properties":{"jurisdiction":{"type":"string","description":"ISO-3166-1 alpha-2 country code, \"EEA\", \"GCC\", or \"*\" for any jurisdiction","example":"US"},"tier":{"type":"string","description":"Investor tier required to participate in this jurisdiction","enum":["us_retail","us_accredited","us_qualified_purchaser","eu_retail","eu_professional","eu_professional_optup","eu_eligible_counterparty","uk_retail","uk_professional","ch_qualified","sg_ai","sg_ii","hk_pi","my_sophisticated","br_qi","br_pi","ae_professional"],"example":"us_qualified_purchaser"},"verificationLevel":{"type":"string","description":"How the user's tier must be verified","enum":["self_attested","verified_documentation","letter","third_party_attestation"],"example":"third_party_attestation"},"expiresAfterDays":{"type":"number","description":"Re-verification interval in days, if required","example":90}},"required":["jurisdiction","tier","verificationLevel"]},"KycEligibilityDto":{"type":"object","properties":{"defaultPolicy":{"type":"string","description":"Policy applied when the user jurisdiction is not explicitly listed","enum":["deny","allow"],"example":"deny"},"countries":{"description":"Jurisdictions where this opportunity is offered (ISO-3166-1 alpha-2, or \"EEA\"/\"GCC\"). May be empty.","example":["US"],"type":"array","items":{"type":"string"}},"blockedCountries":{"description":"Blocked jurisdictions (ISO-3166-1 alpha-2)","example":["US","CA","CN"],"type":"array","items":{"type":"string"}},"blockedSubdivisions":{"description":"Blocked subdivisions (ISO-3166-2, e.g. \"UA-43\")","example":["UA-43","UA-14"],"type":"array","items":{"type":"string"}},"usPersonAllowed":{"type":"boolean","description":"Whether US persons are eligible"},"investorEligibility":{"description":"Investor-tier requirements per jurisdiction. Empty means no tier requirement.","type":"array","items":{"$ref":"#/components/schemas/InvestorEligibilityEntryDto"}},"subjectTypes":{"type":"array","description":"Acceptable subject types (individual KYC and/or business KYB)","example":["KYC","KYB"],"items":{"type":"string","enum":["KYC","KYB"]}}},"required":["defaultPolicy","countries","blockedCountries","blockedSubdivisions","usPersonAllowed","investorEligibility","subjectTypes"]},"KycMetadataDto":{"type":"object","properties":{"kycMode":{"type":"string","description":"How the issuer KYC flow is delivered","enum":["none","oauth_redirect","external_redirect","iframe","deeplink","native_sdk"],"example":"oauth_redirect"},"iframeAllowed":{"type":"boolean","description":"Whether the issuer KYC page may be embedded in an iframe"},"authorizeUrl":{"type":"string","description":"URL of the issuer-hosted KYC page (HTTPS)"},"notes":{"type":"string","description":"Human-readable notes about the KYC requirement"},"eligibility":{"$ref":"#/components/schemas/KycEligibilityDto"},"mandatoryDisclosureUrl":{"type":"string","description":"URL of a regulator-mandated disclosure document (HTTPS)"}},"required":["kycMode","iframeAllowed","eligibility"]},"YieldRequirementsDto":{"type":"object","properties":{"kycRequired":{"type":"boolean","description":"Whether off-chain KYC is required before transacting"},"kyc":{"description":"Public KYC criteria for rendering verification UI per opportunity","allOf":[{"$ref":"#/components/schemas/KycMetadataDto"}]}},"required":["kycRequired"]},"ArgumentFieldDto":{"type":"object","properties":{"name":{"type":"string","description":"Field name","enum":["amount","amounts","validatorAddress","validatorAddresses","receiverAddress","providerId","duration","inputToken","inputTokenNetwork","outputToken","outputTokenNetwork","subnetId","tronResource","feeConfigurationId","cosmosPubKey","tezosPubKey","cAddressBech","pAddressBech","executionMode","ledgerWalletApiCompatible","useMaxAmount","useInstantExecution","useAutoClaim","rangeMin","rangeMax","percentage","tokenId","skipPrechecks","useMaxAllowance","feePayerAddress"],"example":"amount"},"type":{"type":"string","description":"Field type","example":"string","enum":["string","number","address","enum","boolean"]},"label":{"type":"string","description":"Field label","example":"Amount to Enter"},"description":{"type":"string","description":"Field description"},"required":{"type":"boolean","description":"Whether the field is required","example":true},"options":{"description":"Options for enum fields","example":["individual","batched"],"type":"array","items":{"type":"string"}},"optionsRef":{"type":"string","description":"Reference to API endpoint that provides options dynamically","example":"/api/v1/validators?integrationId=eth-lido"},"default":{"type":"object","description":"Default value for the field"},"placeholder":{"type":"string","description":"Placeholder text for the field"},"minimum":{"type":"string","description":"Minimum allowed value for number fields (null if no minimum)","example":"1.0","nullable":true},"maximum":{"type":"string","description":"Maximum allowed value for number fields (null if no maximum)","example":"100.0","nullable":true},"isArray":{"type":"boolean","description":"Whether the field is an array","example":false}},"required":["name","type","label"]},"ArgumentSchemaDto":{"type":"object","properties":{"fields":{"description":"List of argument fields","type":"array","items":{"$ref":"#/components/schemas/ArgumentFieldDto"}},"notes":{"type":"string","description":"Notes or instructions for these arguments"}},"required":["fields"]},"YieldMechanicsArgumentsDto":{"type":"object","properties":{"enter":{"$ref":"#/components/schemas/ArgumentSchemaDto"},"exit":{"$ref":"#/components/schemas/ArgumentSchemaDto"},"manage":{"type":"object","description":"Manage action schemas. Each yield supports different ActionTypes (CLAIM_UNSTAKED, CLAIM_REWARDS, etc.). Keys are ActionTypes enum values.","additionalProperties":{"$ref":"#/components/schemas/ArgumentSchemaDto"}},"balance":{"description":"Arguments for the balances endpoint (e.g., alternative addresses, chain-specific fields)","allOf":[{"$ref":"#/components/schemas/ArgumentSchemaDto"}]}}},"PossibleFeeTakingMechanismsDto":{"type":"object","properties":{"depositFee":{"type":"boolean","description":"User can take (earn) a deposit fee","example":false},"managementFee":{"type":"boolean","description":"User can take (earn) a management fee","example":false},"performanceFee":{"type":"boolean","description":"User can take (earn) a performance fee","example":false},"validatorRebates":{"type":"boolean","description":"User can take (earn) validator rebates","example":false}},"required":["depositFee","managementFee","performanceFee","validatorRebates"]},"YieldMechanicsDto":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/YieldType"},"requiresValidatorSelection":{"type":"boolean","description":"Indicates whether this yield requires validator selection","example":true},"rewardSchedule":{"$ref":"#/components/schemas/RewardSchedule"},"rewardClaiming":{"$ref":"#/components/schemas/RewardClaiming"},"gasFeeToken":{"description":"Token used for gas fees (typically native)","allOf":[{"$ref":"#/components/schemas/TokenDto"}]},"lockupPeriod":{"description":"Lockup period - minimum time before exit can be initiated","allOf":[{"$ref":"#/components/schemas/TimePeriodDto"}]},"cooldownPeriod":{"description":"Cooldown period required before exit is allowed","allOf":[{"$ref":"#/components/schemas/TimePeriodDto"}]},"warmupPeriod":{"description":"Warmup period before rewards start accruing","allOf":[{"$ref":"#/components/schemas/TimePeriodDto"}]},"fee":{"description":"Fees charged to the user for this yield (e.g., deposit, management, performance).","allOf":[{"$ref":"#/components/schemas/YieldFeeDto"}]},"entryLimits":{"description":"Entry amount limits for this yield","allOf":[{"$ref":"#/components/schemas/YieldEntryLimitsDto"}]},"requirements":{"description":"Access requirements (e.g. KYC) for this yield","allOf":[{"$ref":"#/components/schemas/YieldRequirementsDto"}]},"supportsLedgerWalletApi":{"type":"boolean","description":"Supports Ledger Wallet API (connect via Ledger Live)"},"extraTransactionFormatsSupported":{"type":"array","description":"Additional transaction formats supported (e.g. safe, batch)","items":{"type":"string","enum":["raw","default"]}},"arguments":{"description":"Arguments required for each action (enter, exit, manage, etc.)","allOf":[{"$ref":"#/components/schemas/YieldMechanicsArgumentsDto"}]},"possibleFeeTakingMechanisms":{"description":"Possible fee-taking mechanisms for the user or integrator (i.e., what fees the user/integrator can potentially earn from this yield).","allOf":[{"$ref":"#/components/schemas/PossibleFeeTakingMechanismsDto"}]}},"required":["type","rewardSchedule","rewardClaiming","gasFeeToken"]},"CuratorDto":{"type":"object","properties":{"name":{"type":"object","description":"Curator name","nullable":true},"description":{"type":"object","description":"Curator description","nullable":true},"logoURI":{"type":"object","description":"Curator logo URI","nullable":true}}},"PricePerShareStateDto":{"type":"object","properties":{"price":{"type":"number","description":"Price per share for the yield (e.g., LP token price, vault share price)","example":1.05},"shareToken":{"description":"Share token (the token you own shares of)","allOf":[{"$ref":"#/components/schemas/TokenDto"}]},"quoteToken":{"description":"Quote token (the token the price is denominated in)","allOf":[{"$ref":"#/components/schemas/TokenDto"}]}},"required":["price","shareToken","quoteToken"]},"ConcentratedLiquidityPoolStateDto":{"type":"object","properties":{"baseApr":{"type":"number","description":"Full-range trading APR (24h or rolling)","example":0.12},"price":{"type":"number","description":"Current mid-price from the AMM (token1 per token0)","example":3950.42},"tickSpacing":{"type":"number","description":"Tick spacing required so UI can snap ranges","example":50},"minTick":{"type":"number","description":"Minimum tick bound for the pool","example":-887272},"maxTick":{"type":"number","description":"Maximum tick bound for the pool","example":887272},"volume24hUsd":{"type":"number","description":"24-hour trading volume in USD","example":149550871.99,"nullable":true},"fee24hUsd":{"type":"number","description":"24-hour fees earned by LPs in USD","example":14955.09,"nullable":true},"tvlUsd":{"type":"number","description":"Total value locked in USD","example":9213550.2,"nullable":true},"feeTier":{"type":"number","description":"Pool fee tier as a decimal (e.g., 0.0005 for 0.05%)","example":0.0005},"baseToken":{"description":"Base token (token0)","allOf":[{"$ref":"#/components/schemas/TokenDto"}]},"quoteToken":{"description":"Quote token (token1)","allOf":[{"$ref":"#/components/schemas/TokenDto"}]}},"required":["baseApr","price","tickSpacing","minTick","maxTick","volume24hUsd","fee24hUsd","tvlUsd","feeTier","baseToken","quoteToken"]},"CapacityDto":{"type":"object","properties":{"current":{"type":"string","description":"Current total assets in the yield"},"max":{"type":"string","nullable":true,"description":"Maximum capacity of the yield"},"remaining":{"type":"string","nullable":true,"description":"Remaining capacity available for deposits"}},"required":["current"]},"LiquidityStateDto":{"type":"object","properties":{"liquidity":{"type":"object","description":"Available liquidity in underlying token units","example":"250000.00","nullable":true},"utilization":{"type":"object","description":"Utilization rate as a decimal (e.g., 0.8 = 80%)","example":"0.80","nullable":true}}},"AllocationRewardRateDto":{"type":"object","properties":{"total":{"type":"number","description":"Total reward rate","example":5.25},"rateType":{"type":"string","description":"Whether this rate is APR or APY","example":"APY"}},"required":["total","rateType"]},"AllocationDto":{"type":"object","properties":{"address":{"type":"string","description":"Contract address of the underlying strategy","example":"0x1234567890abcdef1234567890abcdef12345678"},"network":{"type":"string","description":"Network the underlying strategy is on","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"],"example":"base"},"name":{"type":"string","description":"Display name of the underlying strategy","example":"Morpho Moonwell USDC"},"yieldId":{"type":"string","description":"Yield ID if this strategy is supported as a separate yield opportunity","example":"base-usdc-morpho-moonwell-usdc"},"providerId":{"type":"string","description":"Provider ID for this strategy (e.g., morpho, aave, lido)","example":"morpho"},"allocation":{"type":"string","description":"Amount allocated to this strategy in input token units","example":"50000.00"},"allocationUsd":{"type":"string","description":"USD value of the allocation","example":"50000.00","nullable":true},"weight":{"type":"number","description":"Current weight of this strategy as a percentage (0-100)","example":50.5},"targetWeight":{"type":"number","description":"Target weight of this strategy as a percentage (0-100)","example":50},"rewardRate":{"description":"Reward rate of the underlying strategy","nullable":true,"allOf":[{"$ref":"#/components/schemas/AllocationRewardRateDto"}]},"tvl":{"type":"string","description":"Total value locked in the underlying strategy in input token units","example":"500.25","nullable":true},"tvlUsd":{"type":"string","description":"Total value locked in USD for the underlying strategy","example":"10000000.00","nullable":true},"maxCapacity":{"type":"string","description":"Maximum capacity of the underlying strategy","example":"1000000.00","nullable":true},"remainingCapacity":{"type":"string","description":"Remaining capacity in the underlying strategy","example":"500000.00","nullable":true}},"required":["address","network","name","allocation","allocationUsd","weight","targetWeight","rewardRate","tvl","tvlUsd","maxCapacity","remainingCapacity"]},"YieldStateDto":{"type":"object","properties":{"pricePerShareState":{"description":"Price per share state metadata","allOf":[{"$ref":"#/components/schemas/PricePerShareStateDto"}]},"concentratedLiquidityPoolState":{"description":"Concentrated liquidity pool state metadata","allOf":[{"$ref":"#/components/schemas/ConcentratedLiquidityPoolStateDto"}]},"capacityState":{"description":"Capacity state metadata","allOf":[{"$ref":"#/components/schemas/CapacityDto"}]},"liquidityState":{"description":"Liquidity state (available liquidity, utilization rate)","allOf":[{"$ref":"#/components/schemas/LiquidityStateDto"}]},"allocations":{"description":"Allocations to underlying strategies for vault yields (e.g., OAV, Morpho). Includes allocation, APY, TVL, and capacity per strategy.","type":"array","items":{"$ref":"#/components/schemas/AllocationDto"}}}},"ExecutionContractsDto":{"type":"object","properties":{"enter":{"description":"Contract addresses that may appear as tx.to for enter transactions","example":["0x16D5A408e807db8eF7c578279BEeEe6b228f1c1C"],"type":"array","items":{"type":"string"}},"exit":{"description":"Contract addresses that may appear as tx.to for exit transactions","example":["0xae78736Cd615f374D3085123A210448E74Fc6393","0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE"],"type":"array","items":{"type":"string"}}}},"YieldDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this yield opportunity","example":"ethereum-eth-lido-staking"},"network":{"type":"string","description":"Network this yield opportunity is on","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"]},"chainId":{"type":"string","description":"EVM chain ID for this network (only for EVM networks)","example":"1"},"inputTokens":{"description":"Accepted input tokens (auto-converted as needed)","type":"array","items":{"$ref":"#/components/schemas/TokenDto"}},"outputToken":{"description":"Token received from the protocol","allOf":[{"$ref":"#/components/schemas/TokenDto"}]},"token":{"description":"Canonical deposit token - used for balances","allOf":[{"$ref":"#/components/schemas/TokenDto"}]},"tokens":{"description":"Canonical deposit tokens - used for balances","type":"array","items":{"$ref":"#/components/schemas/TokenDto"}},"rewardRate":{"description":"Total effective yield broken down by source and token.","allOf":[{"$ref":"#/components/schemas/RewardRateDto"}]},"statistics":{"description":"Key statistics and analytics for this yield opportunity","allOf":[{"$ref":"#/components/schemas/YieldStatisticsDto"}]},"risk":{"description":"Top-level provider risk ratings for this yield.","allOf":[{"$ref":"#/components/schemas/YieldRiskSummaryDto"}]},"status":{"description":"Current availability of user actions like enter, exit, claim","allOf":[{"$ref":"#/components/schemas/YieldStatusDto"}]},"metadata":{"description":"Descriptive metadata including name, logo, description, and documentation","allOf":[{"$ref":"#/components/schemas/YieldMetadataDto"}]},"mechanics":{"description":"Operational mechanics including constraints, fees, and capabilities","allOf":[{"$ref":"#/components/schemas/YieldMechanicsDto"}]},"providerId":{"type":"string","description":"The provider ID this yield belongs to","example":"lido"},"prime":{"type":"boolean","description":"Whether this yield meets the Prime quality criteria. Evaluated globally by a scheduled job, so the value is the same for every consumer. Use `?prime=true` to filter the catalog to Prime yields only. Prime is true only when a yield passes every applicable v1 gate: (1) TVL — at least $100M, reduced to $50M for staking, liquid-staking, restaking and real-world-asset yields; (2) Risk — the provider risk grade is no worse than B, enforced only for providers that report a letter grade (missing or numeric-only ratings skip this gate); (3) APY outlier (vault and lending yields only) — the spot rate is between 0% and 40% and within 3x of the yield’s own 30-day trailing average.","example":false},"curator":{"description":"Curator information for the yield (if applicable)","allOf":[{"$ref":"#/components/schemas/CuratorDto"}]},"tags":{"description":"Optional tags for filtering or categorization","example":["restaking","ETH","LST"],"type":"array","items":{"type":"string"}},"state":{"description":"Dynamic, real-time protocol-level state values that affect entering or exiting a yield (e.g., pool price, capacity, price per share, liquidity, queue depth)","allOf":[{"$ref":"#/components/schemas/YieldStateDto"}]},"executionContracts":{"description":"Per-action set of on-chain contract addresses that transactions may target (tx.to). Used by policy-enforced custody providers to whitelist execution destinations.","allOf":[{"$ref":"#/components/schemas/ExecutionContractsDto"}]}},"required":["id","network","inputTokens","token","tokens","rewardRate","status","metadata","mechanics","providerId","prime"]},"BalanceType":{"type":"string","description":"Type of balance","enum":["active","entering","exiting","withdrawable","claimable","locked"]},"PendingActionDto":{"type":"object","properties":{"intent":{"type":"string","description":"High-level action intent","enum":["enter","manage","exit"],"example":"manage"},"type":{"type":"string","description":"Specific action type","enum":["STAKE","UNSTAKE","WITHDRAW_REQUEST","INSTANT_WITHDRAW","CLAIM_REWARDS","AUTO_SWEEP_UNSTAKE_REWARDS","AUTO_SWEEP_WITHDRAW_REWARDS","RESTAKE_REWARDS","WITHDRAW","WITHDRAW_ALL","RESTAKE","CLAIM_UNSTAKED","UNLOCK_LOCKED","STAKE_LOCKED","VOTE","REVOKE","VOTE_LOCKED","REVOTE","REBOND","MIGRATE","VERIFY_WITHDRAW_CREDENTIALS","DELEGATE"],"example":"CLAIM_REWARDS"},"passthrough":{"type":"string","description":"Server-generated passthrough that must be included when executing the action","example":"eyJhZGRyZXNzZXMiOnsiYWRkcmVzcyI6ImNvc21vczF5ZXk..."},"arguments":{"description":"Argument schema required to execute this action","nullable":true,"allOf":[{"$ref":"#/components/schemas/ArgumentSchemaDto"}]},"amount":{"type":"string","description":"Amount involved in the action, in human-readable token units (not the smallest denomination).","example":"0.1","nullable":true}},"required":["intent","type","passthrough"]},"RevShareDetailsDto":{"type":"object","properties":{"minRevShare":{"type":"number","description":"Minimum revenue share percentage (0-1)","example":0.3},"maxRevShare":{"type":"number","description":"Maximum revenue share percentage (0-1)","example":0.7}},"required":["minRevShare","maxRevShare"]},"RevShareTiersDto":{"type":"object","properties":{"trial":{"description":"Trial tier revenue share details","allOf":[{"$ref":"#/components/schemas/RevShareDetailsDto"}]},"standard":{"description":"Standard tier revenue share details","allOf":[{"$ref":"#/components/schemas/RevShareDetailsDto"}]},"pro":{"description":"Pro tier revenue share details","allOf":[{"$ref":"#/components/schemas/RevShareDetailsDto"}]}}},"ValidatorProviderDto":{"type":"object","properties":{"name":{"type":"string","description":"Provider name","example":"Morpho"},"id":{"type":"string","description":"Provider ID","example":"morpho"},"logoURI":{"type":"string","description":"Provider logo URI","example":"https://morpho.xyz/logo.png"},"description":{"type":"string","description":"Short description of the provider","example":"A peer-to-peer DeFi lending protocol"},"website":{"type":"string","description":"Provider website","example":"https://morpho.xyz"},"tvlUsd":{"type":"object","description":"Total TVL across the entire provider in USD","example":"10,200,000","nullable":true},"type":{"type":"string","description":"Type of provider (protocol or validator provider)","enum":["protocol","validator_provider"],"example":"protocol"},"references":{"description":"Optional social/media references or audit links","nullable":true,"type":"array","items":{"type":"string"}},"rank":{"type":"number","description":"Provider ranking (lower numbers indicate higher preference)","example":1},"preferred":{"type":"boolean","description":"Whether this provider is marked as preferred","example":true},"revshare":{"description":"Revenue sharing details by tier","example":{"standard":{"minRevShare":0.3,"maxRevShare":0.7},"pro":{"minRevShare":0.4,"maxRevShare":0.8}},"allOf":[{"$ref":"#/components/schemas/RevShareTiersDto"}]},"uniqueId":{"type":"string","description":"Provider ID (deprecated, use `id` instead)","example":"luganodes","deprecated":true},"createdAt":{"format":"date-time","type":"string","description":"Creation timestamp (deprecated)","deprecated":true},"updatedAt":{"format":"date-time","type":"string","description":"Last update timestamp (deprecated)","deprecated":true}},"required":["name","id","logoURI","description","website","tvlUsd","type","rank","preferred"]},"ValidatorSubnetDto":{"type":"object","properties":{"id":{"type":"number","description":"Subnet ID","example":1},"name":{"type":"string","description":"Subnet name","example":"Apex"},"tokenSymbol":{"type":"string","description":"Subnet token symbol","example":"α"},"tvl":{"type":"string","description":"TAO-side reserve of the subnet AMM pool (subnet-level TVL in TAO)","example":"1000000"},"pricePerShare":{"type":"string","description":"Spot price of the subnet alpha token in TAO","example":"1.0"}},"required":["id"]},"ValidatorDto":{"type":"object","properties":{"address":{"type":"string","description":"Validator address or ID","example":"cosmosvaloper1abc..."},"name":{"type":"string","description":"Validator display name","example":"StakeKit Validator"},"logoURI":{"type":"string","description":"Validator logo URI","example":"https://stakekit.com/logo.png"},"website":{"type":"string","description":"Link to validator website","example":"https://stakekit.com"},"rewardRate":{"description":"Detailed reward rate breakdown by source (emissions, MEV, fees, etc.)","example":{"total":8.4,"rateType":"APR","components":[{"rate":6.8,"rateType":"APR","token":{"symbol":"SOL","name":"Solana"},"yieldSource":"staking","description":"Solana network inflation rewards"},{"rate":1.2,"rateType":"APR","token":{"symbol":"SOL","name":"Solana"},"yieldSource":"validator_commission","description":"Transaction fees from processed transactions"},{"rate":0.4,"rateType":"APR","token":{"symbol":"SOL","name":"Solana"},"yieldSource":"mev","description":"MEV from Jito block space auctions"}]},"allOf":[{"$ref":"#/components/schemas/RewardRateDto"}]},"provider":{"description":"Provider information for this validator","allOf":[{"$ref":"#/components/schemas/ValidatorProviderDto"}]},"commission":{"type":"number","description":"Commission rate charged by validator","example":0.05},"tvlUsd":{"type":"string","description":"Total value locked with this validator in USD","example":"18,340,000"},"tvl":{"type":"string","description":"Total value locked with this validator in native token","example":"8250.45"},"tvlRaw":{"type":"string","description":"Raw total value locked with this validator (full precision)","example":"8250450000000000000000"},"votingPower":{"type":"number","description":"Validator's voting power share (0–1)","example":0.013},"preferred":{"type":"boolean","description":"Whether this validator is flagged as preferred","example":true},"minimumStake":{"type":"string","description":"Minimum stake allowed in native token","example":"1.0"},"remainingPossibleStake":{"type":"string","description":"Maximum available stake before hitting cap in native token","example":"285,714.28"},"remainingSlots":{"type":"number","description":"Number of remaining nominator/delegator slots (for capped chains)","example":8},"nominatorCount":{"type":"number","description":"Number of current nominators","example":321},"status":{"type":"string","description":"Validator status description (active, jailed, unbonding, etc.)","example":"active"},"providerId":{"type":"string","description":"ID of the provider backing this validator","example":"provider-1"},"subnet":{"description":"Subnet metadata when the validator operates within a subnet (Bittensor)","allOf":[{"$ref":"#/components/schemas/ValidatorSubnetDto"}]}},"required":["address"]},"BalanceDto":{"type":"object","properties":{"address":{"type":"string","description":"User wallet address that owns this balance","example":"0x1234..."},"type":{"$ref":"#/components/schemas/BalanceType"},"amount":{"type":"string","description":"Balance amount in underlying token","example":"2.625"},"amountRaw":{"type":"string","description":"Raw balance amount (full precision)","example":"2625000000000000000"},"date":{"format":"date-time","type":"string","description":"Date relevant to this balance state","nullable":true,"example":"2025-04-23T08:00:00Z"},"feeConfigurationId":{"type":"string","description":"Fee configuration ID (if applicable)","example":"fee-config-1"},"pendingActions":{"description":"Pending actions for this balance","type":"array","items":{"$ref":"#/components/schemas/PendingActionDto"}},"token":{"description":"Token used for balance amounts","allOf":[{"$ref":"#/components/schemas/TokenDto"}]},"validator":{"description":"Validator information (if applicable)","nullable":true,"allOf":[{"$ref":"#/components/schemas/ValidatorDto"}]},"validators":{"description":"Multiple validators information (when balance is distributed across multiple validators)","nullable":true,"type":"array","items":{"$ref":"#/components/schemas/ValidatorDto"}},"amountUsd":{"type":"string","description":"Value of the balance in USD","example":"2,500.00","nullable":true},"isEarning":{"type":"boolean","description":"Whether this balance is currently earning rewards","example":true},"priceRange":{"type":"object","description":"Price range for concentrated liquidity positions in tokens[1]/tokens[0] format (e.g., if tokens[0]=WETH and tokens[1]=USDC, then priceRange represents USDC/WETH)","example":{"min":"2700","max":"3310"}},"tokenId":{"type":"string","description":"NFT token ID for liquidity positions (e.g., PancakeSwap V3 position NFT ID)","example":"12345"},"shareAmount":{"type":"string","description":"Share balance in human-readable format","example":"1.5"},"shareAmountRaw":{"type":"string","description":"Share balance in full precision (smallest unit)","example":"1500000000000000000"},"shareToken":{"description":"The share token that shareAmount and shareAmountRaw are denominated in","allOf":[{"$ref":"#/components/schemas/TokenDto"}]}},"required":["address","type","amount","amountRaw","pendingActions","token","isEarning"]},"YieldBalancesDto":{"type":"object","properties":{"yieldId":{"type":"string","description":"Unique identifier of the yield","example":"ethereum-eth-lido-staking"},"balances":{"description":"List of balances for this yield","type":"array","items":{"$ref":"#/components/schemas/BalanceDto"}},"outputTokenBalance":{"description":"Balance for the output token","nullable":true,"allOf":[{"$ref":"#/components/schemas/BalanceDto"}]},"rewardRate":{"description":"Personalized reward rate breakdown for this balance position","nullable":true,"allOf":[{"$ref":"#/components/schemas/RewardRateDto"}]}},"required":["yieldId","balances"]},"YieldErrorDto":{"type":"object","properties":{"yieldId":{"type":"string","description":"Unique identifier of the yield that failed","example":"ethereum-compound-usdc"},"error":{"type":"string","description":"Error message describing what went wrong","example":"Failed to fetch data from blockchain: RPC timeout"}},"required":["yieldId","error"]},"BalancesResponseDto":{"type":"object","properties":{"items":{"description":"Successful yield balance results","type":"array","items":{"$ref":"#/components/schemas/YieldBalancesDto"}},"errors":{"description":"Errors encountered while fetching balances","type":"array","items":{"$ref":"#/components/schemas/YieldErrorDto"}}},"required":["items","errors"]},"Networks":{"type":"string","description":"Network for this address","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"]},"GetBalancesArgumentsDto":{"type":"object","properties":{"cAddressBech":{"type":"string","description":"Avalanche C-chain address","example":"0x123..."},"pAddressBech":{"type":"string","description":"Avalanche P-chain address","example":"P-avax1..."},"autoSweepDayOfMonth":{"type":"number","description":"Day of month when auto-sweep window starts (used by Solana auto-sweep balance actions)","example":20,"minimum":1,"maximum":31},"autoSweepTimezone":{"type":"string","description":"IANA timezone used to evaluate auto-sweep window day (e.g. Europe/London)","example":"Europe/London"}}},"BalancesQueryDto":{"type":"object","properties":{"yieldId":{"type":"string","description":"The unique identifier of the yield (optional for chain scanning)","example":"ethereum-eth-lido-staking"},"address":{"type":"string","description":"User wallet address to check balances for","example":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e"},"network":{"example":"ethereum","$ref":"#/components/schemas/Networks"},"arguments":{"description":"Arguments for balance queries","allOf":[{"$ref":"#/components/schemas/GetBalancesArgumentsDto"}]}},"required":["address","network"]},"BalancesRequestDto":{"type":"object","properties":{"queries":{"description":"Array of balance queries (maximum 25 queries per request)","minItems":1,"maxItems":25,"example":[{"yieldId":"ethereum-eth-lido-staking","address":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e","network":"ethereum"}],"type":"array","items":{"$ref":"#/components/schemas/BalancesQueryDto"}}},"required":["queries"]},"YieldBalancesRequestDto":{"type":"object","properties":{"address":{"type":"string","description":"User wallet address to check balances for","example":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e"},"arguments":{"description":"Optional arguments for advanced or protocol-specific balance queries","allOf":[{"$ref":"#/components/schemas/GetBalancesArgumentsDto"}]}},"required":["address"]},"ValidatorQueryDto":{"type":"object","properties":{"offset":{"type":"number","description":"Offset for pagination","default":0,"minimum":0,"example":0},"limit":{"type":"number","description":"Maximum number of items to return","default":20,"minimum":1,"maximum":100,"example":20},"name":{"type":"string","description":"Filter by validator name (case-insensitive, partial match)"},"address":{"type":"string","description":"Filter by validator address"},"provider":{"type":"string","description":"Filter by provider ID"},"status":{"type":"string","description":"Filter by validator status"},"preferred":{"type":"boolean","description":"Filter by preferred flag"}}},"TransactionDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique transaction identifier","example":"tx_123abc"},"title":{"type":"string","description":"Display title for the transaction","example":"Approve USDC"},"network":{"type":"string","description":"Network this transaction is for","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"],"example":"ethereum"},"status":{"type":"string","description":"Current status of the transaction","enum":["NOT_FOUND","CREATED","BLOCKED","WAITING_FOR_SIGNATURE","SIGNED","BROADCASTED","PENDING","CONFIRMED","FAILED","SKIPPED"],"example":"PENDING"},"type":{"type":"string","description":"Type of transaction operation","enum":["SWAP","DEPOSIT","APPROVAL","STAKE","SET_OPERATOR","CLAIM_UNSTAKED","CLAIM_REWARDS","RESTAKE_REWARDS","UNSTAKE","SPLIT","MERGE","LOCK","UNLOCK","SUPPLY","ADD_LIQUIDITY","REMOVE_LIQUIDITY","BRIDGE","VOTE","REVOKE","RESTAKE","REBOND","WITHDRAW","WITHDRAW_ALL","CREATE_ACCOUNT","REVEAL","MIGRATE","DELEGATE","UNDELEGATE","UTXO_P_TO_C_IMPORT","UTXO_C_TO_P_IMPORT","WRAP","UNWRAP","UNFREEZE_LEGACY","UNFREEZE_LEGACY_BANDWIDTH","UNFREEZE_LEGACY_ENERGY","UNFREEZE_BANDWIDTH","UNFREEZE_ENERGY","FREEZE_BANDWIDTH","FREEZE_ENERGY","UNDELEGATE_BANDWIDTH","UNDELEGATE_ENERGY","P2P_NODE_REQUEST","CREATE_EIGENPOD","VERIFY_WITHDRAW_CREDENTIALS","START_CHECKPOINT","VERIFY_CHECKPOINT_PROOFS","QUEUE_WITHDRAWALS","COMPLETE_QUEUED_WITHDRAWALS","LZ_DEPOSIT","LZ_WITHDRAW","LUGANODES_PROVISION","LUGANODES_EXIT_REQUEST","INFSTONES_PROVISION","INFSTONES_EXIT_REQUEST","INFSTONES_CLAIM_REQUEST","BATCH"],"example":"STAKE"},"hash":{"type":"string","description":"Transaction hash (available after broadcast)","nullable":true,"example":"0x1234567890abcdef..."},"createdAt":{"format":"date-time","type":"string","description":"When the transaction was created"},"broadcastedAt":{"format":"date-time","type":"string","description":"When the transaction was broadcasted to the network","nullable":true},"signedTransaction":{"type":"string","description":"Signed transaction data (ready for broadcast)","nullable":true},"unsignedTransaction":{"description":"The unsigned transaction data to be signed by the wallet","oneOf":[{"type":"string","description":"Serialized transaction data"},{"type":"object","description":"Transaction object (for non-EVM chains)"}],"nullable":true,"example":"0x02f87082012a022f2f83018000947a250d5630b4cf539739df2c5dacb4c659f2488d880de0b6b3a764000080c080a0ef0de6c7b46fc75dd6cb86dccc3cfd731c2bdf6f3d736557240c3646c6fe01a6a07cd60b58dfe01847249dfdd7950ba0d045dded5bbe410b07a015a0ed34e5e00d"},"annotatedTransaction":{"type":"object","description":"Human-readable breakdown of the transaction for display purposes","nullable":true,"example":{"method":"stake","inputs":{"amount":"1000000000000000000"}}},"structuredTransaction":{"type":"object","description":"Detailed transaction data for client-side validation or simulation","nullable":true},"stepIndex":{"type":"number","description":"Zero-based index of the step in the action flow","example":0},"description":{"type":"string","description":"User-friendly description of what this transaction does","example":"Approve USDC for staking"},"error":{"type":"string","description":"Error message if the transaction failed","nullable":true},"gasEstimate":{"type":"string","description":"Estimated gas cost for the transaction","example":"21000"},"explorerUrl":{"type":"string","description":"Link to the blockchain explorer for this transaction","nullable":true,"example":"https://etherscan.io/tx/0x1234..."},"isMessage":{"type":"boolean","description":"Whether this transaction is a message rather than a value transfer","example":false}},"required":["id","title","network","status","type","hash","createdAt","broadcastedAt","signedTransaction","unsignedTransaction"]},"ActionArgumentsDto":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in human-readable token units, not the smallest denomination. For example, \"1.500000\" for 1.5 USDC (6 decimals) or \"0.01\" for 0.01 ETH (18 decimals). Precision up to the token's decimal places is supported.","example":"1.500000"},"amounts":{"description":"Amounts in human-readable token units, not the smallest denomination. Precision up to the token's decimal places is supported.","example":["1.500000","2.000000"],"type":"array","items":{"type":"string"}},"validatorAddress":{"type":"string","description":"Validator address for single validator selection","example":"cosmosvaloper1..."},"validatorAddresses":{"description":"Multiple validator addresses","example":["cosmosvaloper1...","cosmosvaloper2..."],"type":"array","items":{"type":"string"}},"providerId":{"type":"string","description":"Provider ID for Ethereum native staking","example":"kiln"},"duration":{"type":"number","description":"Duration for Avalanche native staking (in seconds)","example":1209600},"inputToken":{"type":"string","description":"Token for deposits. Use \"0x\" for native token or provide the token address. For cross-chain deposits, also provide inputTokenNetwork.","example":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},"inputTokenNetwork":{"type":"string","description":"Network for the input token. Required for cross-chain deposits when the token is on a different network than the vault.","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"]},"outputToken":{"type":"string","description":"Token for withdrawals. Use \"0x\" for native token or provide the token address. For cross-chain withdrawals, also provide outputTokenNetwork.","example":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},"outputTokenNetwork":{"type":"string","description":"Network for the output token. Required for cross-chain withdrawals when the destination is on a different network than the vault.","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"]},"subnetId":{"type":"number","description":"Subnet ID for Bittensor staking","example":1},"tronResource":{"type":"string","description":"Tron resource type for Tron staking","enum":["BANDWIDTH","ENERGY"]},"feeConfigurationId":{"type":"string","description":"Fee configuration ID for custom fee settings","example":"custom-fee-config-1"},"cosmosPubKey":{"type":"string","description":"Cosmos public key for Cosmos staking","example":"cosmospub1..."},"tezosPubKey":{"type":"string","description":"Tezos public key for Tezos staking","example":"edpk..."},"cAddressBech":{"type":"string","description":"Avalanche C-chain address","example":"0x123..."},"pAddressBech":{"type":"string","description":"Avalanche P-chain address","example":"P-avax1..."},"executionMode":{"type":"string","description":"Transaction execution mode","enum":["individual","batched"],"example":"individual"},"ledgerWalletApiCompatible":{"type":"boolean","description":"Transactions should have Ledger wallet API compatibility for hardware wallet users","example":true},"useMaxAmount":{"type":"boolean","description":"Use max amount for ERC4626 withdraw","example":true},"useInstantExecution":{"type":"boolean","description":"Use instant execution for exit (faster but may have fees)","example":true},"useAutoClaim":{"type":"boolean","description":"Authorize the redeem operator to auto-claim settled async redemptions (one-time per wallet)","example":true},"skipPrechecks":{"type":"boolean","description":"Skip pre-flight balance and rent checks","example":false},"useMaxAllowance":{"type":"boolean","description":"When true, ERC20 approval transactions use the maximum allowance (uint256.max) instead of the exact deposit amount. Useful to avoid repeated approval transactions on subsequent deposits.","example":true},"feePayerAddress":{"type":"string","description":"Fee payer address for gas-sponsored wallets (Solana). When provided, this address is used as the payer for account creation instructions and as the transaction-level fee payer.","example":"7Qo3awoTH4y5Vui1FQwsncq2arYDzUuivdeWhwgnAvVo"},"receiverAddress":{"type":"string","description":"Receiver wallet address: ERC4626 vault flows, or on Solana the address for tokens after an optional post-exit swap"},"rangeMin":{"type":"string","description":"Minimum price bound for concentrated liquidity pools (as decimal string). Must be non-negative (can be 0) and less than rangeMax.","example":"0.0"},"rangeMax":{"type":"string","description":"Maximum price bound for concentrated liquidity pools (as decimal string). Must be positive and greater than rangeMin.","example":"1.0"},"percentage":{"type":"number","description":"Percentage of liquidity to exit (0-100). Required for partial exits from liquidity positions.","example":50,"minimum":0,"maximum":100},"tokenId":{"type":"string","description":"NFT token ID for concentrated liquidity positions. Required for exiting specific positions.","example":"12345"}}},"ActionDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique action identifier","example":"action_123abc"},"intent":{"type":"string","description":"High-level action intent","enum":["enter","manage","exit"],"example":"manage"},"type":{"type":"string","description":"Specific action type","enum":["STAKE","UNSTAKE","WITHDRAW_REQUEST","INSTANT_WITHDRAW","CLAIM_REWARDS","AUTO_SWEEP_UNSTAKE_REWARDS","AUTO_SWEEP_WITHDRAW_REWARDS","RESTAKE_REWARDS","WITHDRAW","WITHDRAW_ALL","RESTAKE","CLAIM_UNSTAKED","UNLOCK_LOCKED","STAKE_LOCKED","VOTE","REVOKE","VOTE_LOCKED","REVOTE","REBOND","MIGRATE","VERIFY_WITHDRAW_CREDENTIALS","DELEGATE"],"example":"CLAIM_REWARDS"},"yieldId":{"type":"string","description":"Yield ID this action belongs to","example":"ethereum-eth-lido-staking"},"address":{"type":"string","description":"User wallet address","example":"0x1234..."},"amount":{"type":"string","description":"Amount involved in the action, in human-readable token units (not the smallest denomination).","example":"1.0","nullable":true},"amountRaw":{"type":"string","description":"Raw smallest-denomination amount (full precision)","example":"1000000000000000000","nullable":true},"amountUsd":{"type":"string","description":"USD value of the amount","example":"1500.50","nullable":true},"transactions":{"description":"Array of transactions for this action","type":"array","items":{"$ref":"#/components/schemas/TransactionDto"}},"executionPattern":{"type":"string","description":"Transaction execution pattern - synchronous (submit one by one, wait for each), asynchronous (submit all at once), or batch (single transaction with multiple operations)","enum":["synchronous","asynchronous","batch"],"example":"synchronous"},"rawArguments":{"description":"Raw arguments exactly as submitted by the user for this action","nullable":true,"allOf":[{"$ref":"#/components/schemas/ActionArgumentsDto"}]},"createdAt":{"format":"date-time","type":"string","description":"When the action was created"},"completedAt":{"format":"date-time","type":"string","description":"When the action was completed","nullable":true},"status":{"type":"string","description":"Current status of the action","enum":["CANCELED","CREATED","WAITING_FOR_NEXT","PROCESSING","FAILED","SUCCESS","STALE"]}},"required":["id","intent","type","yieldId","address","amount","amountRaw","amountUsd","transactions","executionPattern","rawArguments","createdAt","completedAt","status"]},"PaginatedResponseDto":{"type":"object","properties":{"total":{"type":"number","description":"Total number of items available","example":100},"offset":{"type":"number","description":"Offset of the current page","example":0},"limit":{"type":"number","description":"Limit of the current page","example":20}},"required":["total","offset","limit"]},"YieldQueryDto":{"type":"object","properties":{"offset":{"type":"number","description":"Offset for pagination","default":0,"minimum":0,"example":0},"limit":{"type":"number","description":"Maximum number of items to return","default":20,"minimum":1,"maximum":100,"example":20},"network":{"type":"string","description":"Filter by network","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"]},"chainId":{"type":"string","description":"Filter by EVM chain ID (Ethereum: 1, Polygon: 137, etc)","example":"1"},"networks":{"type":"string","description":"Filter by multiple networks (comma separated)"},"yieldId":{"type":"string","example":"optimism-usdt-aave-v3-lending","maxLength":200},"yieldIds":{"example":["optimism-usdt-aave-v3-lending"],"maxItems":100,"type":"array","items":{"type":"string","maxLength":200}},"type":{"type":"string","description":"Filter by yield type","enum":["staking","restaking","lending","vault","fixed_yield","real_world_asset","concentrated_liquidity_pool","liquidity_pool","liquid_staking"]},"types":{"type":"array","description":"Filter by multiple yield types (comma separated)","items":{"type":"string","enum":["staking","restaking","lending","vault","fixed_yield","real_world_asset","concentrated_liquidity_pool","liquidity_pool","liquid_staking"]}},"hasCooldownPeriod":{"type":"boolean","description":"Filter by cooldown period"},"hasWarmupPeriod":{"type":"boolean","description":"Filter by warmup period"},"token":{"type":"string","description":"Filter by token symbol or address"},"inputToken":{"type":"string","description":"Filter by input token symbol or address"},"inputTokens":{"description":"Filter by multiple input token symbol or address (comma separated)","type":"array","items":{"type":"string"}},"provider":{"type":"string","description":"Filter by provider ID"},"providers":{"description":"Filter by multiple provider IDs (comma separated)","type":"array","items":{"type":"string"}},"search":{"type":"string","description":"Search by yield name"},"prime":{"type":"boolean","description":"Filter by the Prime quality flag. `true` returns only Prime yields; `false` returns only non-Prime yields; omitting the parameter returns the full catalog."},"sort":{"type":"string","description":"Sort by yield status or reward rate","enum":["statusEnterAsc","statusEnterDesc","statusExitAsc","statusExitDesc","rewardRateAsc","rewardRateDesc"]}}},"PaginationQueryDto":{"type":"object","properties":{"offset":{"type":"number","description":"Offset for pagination","default":0,"minimum":0,"example":0},"limit":{"type":"number","description":"Maximum number of items to return","default":20,"minimum":1,"maximum":100,"example":20}}},"YieldRiskCredoraDto":{"type":"object","properties":{"rating":{"type":"object","description":"Credora rating"},"score":{"type":"object","description":"Credora score (1-5)"},"psl":{"type":"object","description":"Probability of Significant Loss (annualized)"},"publishDate":{"type":"object","description":"Credora publish date"},"curator":{"type":"object","description":"Credora curator name"}}},"YieldRiskStakingRewardsMetricsDto":{"type":"object","properties":{"users":{"type":"object","description":"Users count from Staking Rewards risk metrics"}}},"YieldRiskStakingRewardsDto":{"type":"object","properties":{"rating":{"type":"object","description":"Staking Rewards rating"},"score":{"type":"object","description":"Staking Rewards score (1-5)"},"potentialRating":{"type":"object","description":"Staking Rewards potential rating"},"potentialScore":{"type":"object","description":"Staking Rewards potential score (1-5)"},"ratedAt":{"type":"object","description":"Date when rating was assessed"},"ratedSince":{"type":"object","description":"Date since product has been rated"},"profileUrl":{"type":"object","description":"Staking Rewards product profile URL"},"reportUrl":{"type":"object","description":"Staking Rewards full report URL"},"providerName":{"type":"object","description":"Staking Rewards provider name"},"version":{"type":"object","description":"Staking Rewards methodology version"},"type":{"type":"object","description":"Staking Rewards product type"},"chain":{"type":"object","description":"Chain label returned by Staking Rewards"},"contractAddress":{"type":"object","description":"Contract address returned by Staking Rewards"},"riskMetrics":{"$ref":"#/components/schemas/YieldRiskStakingRewardsMetricsDto"}}},"YieldRiskDto":{"type":"object","properties":{"updatedAt":{"type":"string","description":"Timestamp of when StakeKit last computed risk data for this yield (ISO 8601)"},"credora":{"$ref":"#/components/schemas/YieldRiskCredoraDto"},"stakingRewards":{"$ref":"#/components/schemas/YieldRiskStakingRewardsDto"}},"required":["updatedAt"]},"BalanceHistorySnapshotPeriodDeltaDto":{"type":"object","properties":{"shareAmount":{"type":"string","description":"Net vault share balance change from indexed transfers during this period","example":"1.000000000000000000"},"shareAmountRaw":{"type":"string","description":"Net vault share balance change in base units (wei)","example":"1000000000000000000"},"amount":{"type":"string","description":"Net change in underlying position vs the previous snapshot (includes price-per-share effects)","example":"0.050000000000000000"},"amountRaw":{"type":"string","description":"Net underlying position change in base units","example":"50000000000000000"}},"required":["shareAmount","shareAmountRaw","amount","amountRaw"]},"BalanceHistorySnapshotDto":{"type":"object","properties":{"timestamp":{"type":"string","description":"Timestamp of this snapshot (ISO 8601)","example":"2025-07-12T00:00:00.000Z"},"blockNumber":{"type":"number","description":"Block number closest to this snapshot","example":20540000},"yieldId":{"type":"string","description":"Unique identifier of the yield","example":"ethereum-eth-lido-staking"},"balances":{"description":"Balance entries at this point in time","type":"array","items":{"$ref":"#/components/schemas/BalanceDto"}},"periodDelta":{"description":"Balance delta during this period vs the previous snapshot. Omitted for point-in-time (blockNumber) queries.","allOf":[{"$ref":"#/components/schemas/BalanceHistorySnapshotPeriodDeltaDto"}]}},"required":["timestamp","blockNumber","yieldId","balances"]},"RewardEventDto":{"type":"object","properties":{"timestamp":{"type":"string","description":"Timestamp of this reward event (ISO 8601)","example":"2025-07-12T00:00:00.000Z"},"blockNumber":{"type":"number","description":"Block number when the reward was earned","example":20540000},"yieldId":{"type":"string","description":"Unique identifier of the yield","example":"ethereum-usdc-morpho-vault"},"token":{"description":"Token metadata for the reward","allOf":[{"$ref":"#/components/schemas/TokenDto"}]},"amount":{"type":"string","description":"Human-readable reward amount","example":"1.4"},"amountRaw":{"type":"string","description":"Raw reward amount in base units (wei)","example":"1400000"},"yieldSource":{"type":"string","description":"Source of the reward derived from yield type","example":"vault_yield"},"transactionHash":{"type":"string","description":"Transaction hash where the reward was earned","example":"0xabc123...","nullable":true}},"required":["timestamp","blockNumber","yieldId","token","amount","amountRaw","yieldSource"]},"RewardRateSnapshotDto":{"type":"object","properties":{"timestamp":{"type":"string","description":"Timestamp of this snapshot (ISO 8601)","example":"2025-07-10T00:00:00.000Z"},"rewardRate":{"type":"string","description":"Reward rate as a decimal string","example":"0.0312"}},"required":["timestamp","rewardRate"]},"RewardRateHistoryResponseDto":{"type":"object","properties":{"total":{"type":"number","description":"Total number of items available","example":100},"offset":{"type":"number","description":"Offset of the current page","example":0},"limit":{"type":"number","description":"Limit of the current page","example":20},"items":{"description":"Reward rate snapshots for the current page","type":"array","items":{"$ref":"#/components/schemas/RewardRateSnapshotDto"}},"yieldId":{"type":"string","description":"Unique identifier of the yield","example":"ethereum-eth-lido-staking"},"interval":{"type":"string","description":"Sampling interval used for this response","enum":["day","week","month"],"example":"day"},"from":{"type":"string","description":"Start of the returned date range (ISO 8601)","example":"2025-06-01T00:00:00.000Z"},"to":{"type":"string","description":"End of the returned date range (ISO 8601)","example":"2025-07-10T00:00:00.000Z"}},"required":["total","offset","limit","items","yieldId","interval","from","to"]},"TvlHistoryResponseDto":{"type":"object","properties":{"total":{"type":"number","description":"Total number of items available","example":100},"offset":{"type":"number","description":"Offset of the current page","example":0},"limit":{"type":"number","description":"Limit of the current page","example":20},"yieldId":{"type":"string","description":"Unique identifier of the yield","example":"ethereum-usdc-aave-v3"},"interval":{"type":"string","description":"Sampling interval used for this response","enum":["day","week","month"],"example":"day"},"from":{"type":"string","description":"Start of the returned date range (ISO 8601)","example":"2025-06-12T00:00:00.000Z"},"to":{"type":"string","description":"End of the returned date range (ISO 8601)","example":"2025-07-12T00:00:00.000Z"}},"required":["total","offset","limit","yieldId","interval","from","to"]},"TvlSnapshotDto":{"type":"object","properties":{"timestamp":{"type":"string","description":"Timestamp of this snapshot (ISO 8601)","example":"2025-07-11T00:00:00.000Z"},"tvl":{"type":"string","description":"Total value locked in token units (human-readable)","example":"512340000.12"},"tvlRaw":{"type":"string","description":"Total value locked in smallest token unit (wei)","example":"512340000120000"}},"required":["timestamp","tvl","tvlRaw"]},"CampaignStatus":{"type":"string","enum":["draft","active","paused","ended"]},"CampaignRewardMode":{"type":"string","enum":["normal","compound"]},"CampaignQualificationType":{"type":"string","enum":["min_token_amount"]},"CampaignQualificationConfigDto":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/CampaignQualificationType"},"threshold":{"type":"string","example":"100","description":"Minimum qualifying token amount balance."},"maxIncentivizedTvlToken":{"type":"string","nullable":true,"example":"1000000","description":"Optional per-user token cap."}},"required":["type","threshold"]},"CampaignPayoutFrequency":{"type":"string","enum":["weekly","daily","six_hourly","end_of_campaign"]},"YieldCampaignDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"yieldId":{"type":"string"},"status":{"$ref":"#/components/schemas/CampaignStatus"},"rewardMode":{"$ref":"#/components/schemas/CampaignRewardMode"},"rewardRate":{"nullable":true,"description":"Campaign reward rate in the same shape as yield reward rates. Null when TVL or emission data is unavailable.","allOf":[{"$ref":"#/components/schemas/RewardRateDto"}]},"totalBudget":{"type":"string","description":"Total campaign reward budget."},"distributedBudget":{"type":"string","description":"Amount of budget distributed so far."},"remainingBudget":{"type":"string","description":"Amount of budget remaining."},"configuredHourlyEmission":{"type":"string","nullable":true,"description":"Configured hourly emission amount."},"apyCeiling":{"type":"number","nullable":true,"example":0.125,"description":"Optional APY ceiling as a decimal rate, where 0.125 = 12.5%."},"qualificationConfig":{"description":"Qualification configuration for the campaign.","allOf":[{"$ref":"#/components/schemas/CampaignQualificationConfigDto"}]},"startTime":{"type":"string","format":"date-time"},"endTime":{"type":"string","format":"date-time"},"lastProcessedHour":{"type":"string","format":"date-time","nullable":true},"nextPayoutDueAt":{"type":"string","format":"date-time","nullable":true},"payoutFrequency":{"$ref":"#/components/schemas/CampaignPayoutFrequency"},"rewardToken":{"description":"Reward token metadata.","allOf":[{"$ref":"#/components/schemas/TokenDto"}]}},"required":["id","createdAt","updatedAt","yieldId","status","rewardMode","rewardRate","totalBudget","distributedBudget","remainingBudget","qualificationConfig","startTime","endTime","payoutFrequency","rewardToken"]},"TokenWithAvailableYieldsDto":{"type":"object","properties":{"token":{"description":"Token with one or more available enabled yields","allOf":[{"$ref":"#/components/schemas/TokenDto"}]},"availableYields":{"description":"Enabled yield IDs available for this token","type":"array","items":{"type":"string"}}},"required":["token","availableYields"]},"YieldTokensQueryDto":{"type":"object","properties":{"networks":{"type":"array","description":"Filter by one or more networks","items":{"type":"string","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"]}},"yieldTypes":{"type":"array","description":"Filter by one or more yield types","items":{"type":"string","enum":["staking","restaking","lending","vault","fixed_yield","real_world_asset","concentrated_liquidity_pool","liquidity_pool","liquid_staking"]}},"offset":{"type":"number","description":"Offset for pagination","minimum":0,"default":0},"limit":{"type":"number","description":"Maximum number of items to return. Omit to return the full list — a default page size may be introduced in future, so callers should respect `total` and paginate.","minimum":1}}},"CreateActionDto":{"type":"object","properties":{"yieldId":{"type":"string","description":"Yield ID to perform the action on","example":"ethereum-eth-lido-staking"},"address":{"type":"string","description":"User wallet address","example":"0x1234..."},"arguments":{"description":"Arguments for the action","allOf":[{"$ref":"#/components/schemas/ActionArgumentsDto"}]}},"required":["yieldId","address"]},"CreateManageActionDto":{"type":"object","properties":{"yieldId":{"type":"string","description":"Yield ID to perform the action on","example":"ethereum-eth-lido-staking"},"address":{"type":"string","description":"User wallet address","example":"0x1234..."},"arguments":{"description":"Arguments for the action","allOf":[{"$ref":"#/components/schemas/ActionArgumentsDto"}]},"action":{"type":"string","description":"Pending action type (required for manage actions)","enum":["STAKE","UNSTAKE","WITHDRAW_REQUEST","INSTANT_WITHDRAW","CLAIM_REWARDS","AUTO_SWEEP_UNSTAKE_REWARDS","AUTO_SWEEP_WITHDRAW_REWARDS","RESTAKE_REWARDS","WITHDRAW","WITHDRAW_ALL","RESTAKE","CLAIM_UNSTAKED","UNLOCK_LOCKED","STAKE_LOCKED","VOTE","REVOKE","VOTE_LOCKED","REVOTE","REBOND","MIGRATE","VERIFY_WITHDRAW_CREDENTIALS","DELEGATE"],"example":"CLAIM_REWARDS"},"passthrough":{"type":"string","description":"Server-generated passthrough from the balances endpoint (required for manage actions)","example":"eyJhZGRyZXNzZXMiOnsiYWRkcmVzcyI6ImNvc21vczF5ZXk..."}},"required":["yieldId","address","action","passthrough"]},"ActionsQueryDto":{"type":"object","properties":{"offset":{"type":"number","description":"Offset for pagination","default":0,"minimum":0,"example":0},"limit":{"type":"number","description":"Maximum number of items to return","default":20,"minimum":1,"maximum":100,"example":20},"address":{"type":"string","description":"User wallet address to filter actions for","example":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e"},"status":{"type":"string","description":"Filter by action status","enum":["CANCELED","CREATED","WAITING_FOR_NEXT","PROCESSING","FAILED","SUCCESS","STALE"]},"statuses":{"type":"array","description":"Filter by multiple action statuses (supports CSV or repeated query params)","items":{"type":"string","enum":["CANCELED","CREATED","WAITING_FOR_NEXT","PROCESSING","FAILED","SUCCESS","STALE"]}},"intent":{"type":"string","description":"Filter by action intent","enum":["enter","manage","exit"]},"type":{"type":"string","description":"Filter by action type","enum":["STAKE","UNSTAKE","WITHDRAW_REQUEST","INSTANT_WITHDRAW","CLAIM_REWARDS","AUTO_SWEEP_UNSTAKE_REWARDS","AUTO_SWEEP_WITHDRAW_REWARDS","RESTAKE_REWARDS","WITHDRAW","WITHDRAW_ALL","RESTAKE","CLAIM_UNSTAKED","UNLOCK_LOCKED","STAKE_LOCKED","VOTE","REVOKE","VOTE_LOCKED","REVOTE","REBOND","MIGRATE","VERIFY_WITHDRAW_CREDENTIALS","DELEGATE"]},"yieldId":{"type":"string","description":"Filter by yield ID","example":"ethereum-eth-lido-staking"},"yieldTypes":{"type":"array","description":"Filter by multiple yield types (supports CSV or repeated query params)","items":{"type":"string","enum":["staking","restaking","lending","vault","fixed_yield","real_world_asset","concentrated_liquidity_pool","liquidity_pool","liquid_staking"]}},"network":{"type":"string","description":"Filter by network","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"]}},"required":["address"]},"SubmitHashDto":{"type":"object","properties":{"hash":{"type":"string","description":"Transaction hash from the blockchain","example":"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"}},"required":["hash"]},"SubmitTransactionDto":{"type":"object","properties":{"signedTransaction":{"type":"string","description":"Encoded signed transaction to submit to the blockchain","example":"0aba010aa0010a232f636f736d6f732e7374616b696e672e763162657461312e4d736744656c656761746512790a2a696e6a316a61366664646e6e33727272677137646d6a757a6b71363279376d68346675346b6e656d37791231696e6a76616c6f7065723167346436646d766e706737773779756779366b706c6e6470376a70666d66336b7274736368701a180a03696e6a121131303030303030303030303030303030301215766961205374616b654b6974204349442d31303039129e010a7e0a740a2d2f696e6a6563746976652e63727970746f2e763162657461312e657468736563703235366b312e5075624b657912430a41042aec99dce37ea3d8f11b44da62bce0e885f0ba5b309382954babec76eb138cb0bb84f4f24b9f63143f2ce66923b2dd3ee55475e680a7b992b9cbc17941f6486312040a0208011802121c0a160a03696e6a120f31383732303030303030303030303010d0b4471a0b696e6a6563746976652d312092c35b"}},"required":["signedTransaction"]},"KycStatusResponseDto":{"type":"object","properties":{"kycStatus":{"type":"string","description":"Normalized KYC status for the address on this yield","enum":["not_required","not_started","pending","approved","rejected"],"example":"not_required"},"authorizeUrl":{"type":"string","description":"Issuer's KYC portal URL, when applicable"}},"required":["kycStatus"]},"NetworkDto":{"type":"object","properties":{"id":{"type":"string","description":"The network identifier","example":"ethereum","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","monad-testnet","monad","robinhood-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","agoric","akash","axelar","band-protocol","bitsong","canto","chihuahua","comdex","coreum","cosmos","crescent","cronos","cudos","desmos","dydx","evmos","fetch-ai","gravity-bridge","injective","irisnet","juno","kava","ki-network","mars-protocol","nym","okex-chain","onomy","osmosis","persistence","quicksilver","regen","secret","sentinel","sommelier","stafi","stargaze","stride","teritori","tgrade","umee","sei","mantra","celestia","saga","zetachain","dymension","humansai","neutron","polkadot","kusama","westend","bittensor","aptos","binancebeacon","cardano","near","solana","solana-devnet","stellar","stellar-testnet","sui","tezos","tron","ton","ton-testnet","hyperliquid"]},"name":{"type":"string","description":"Human-readable display name of the network","example":"Ethereum"},"category":{"type":"string","description":"The category of the network","example":"evm","enum":["evm","cosmos","substrate","misc"]},"logoURI":{"type":"string","description":"Logo URI for the network","example":"https://assets.stakek.it/networks/ethereum.svg"}},"required":["id","name","category","logoURI"]},"ProviderDto":{"type":"object","properties":{"name":{"type":"string","description":"Provider name","example":"Morpho"},"id":{"type":"string","description":"Provider ID","example":"morpho"},"logoURI":{"type":"string","description":"Provider logo URI","example":"https://morpho.xyz/logo.png"},"description":{"type":"string","description":"Short description of the provider","example":"A peer-to-peer DeFi lending protocol"},"website":{"type":"string","description":"Provider website","example":"https://morpho.xyz"},"tvlUsd":{"type":"object","description":"Total TVL across the entire provider in USD","example":"10,200,000","nullable":true},"type":{"type":"string","description":"Type of provider (protocol or validator provider)","enum":["protocol","validator_provider"],"example":"protocol"},"references":{"description":"Optional social/media references or audit links","nullable":true,"type":"array","items":{"type":"string"}}},"required":["name","id","logoURI","description","website","tvlUsd","type"]},"HealthStatus":{"type":"string","description":"The health status of the service","enum":["OK","FAIL"]},"HealthStatusDto":{"type":"object","properties":{"status":{"example":"OK","$ref":"#/components/schemas/HealthStatus"},"timestamp":{"type":"string","format":"date-time","example":"2024-01-15T10:30:00.000Z","description":"Timestamp when the health check was performed"}},"required":["status","timestamp"]}}},"externalDocs":{"description":"For more information","url":"https://docs.yield.xyz"}}