{"openapi":"3.0.0","paths":{"/v1/yields":{"get":{"description":"Retrieve a paginated list of available yield opportunities across all supported networks and protocols.","operationId":"YieldsController_getYields_v1","parameters":[{"name":"offset","required":false,"in":"query","description":"Offset for pagination","schema":{"minimum":0,"default":0,"example":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"minimum":1,"maximum":100,"default":20,"example":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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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)","schema":{"example":"1","type":"string"}},{"name":"networks","required":false,"in":"query","description":"Filter by multiple networks (comma separated)","schema":{"type":"string"}},{"name":"yieldId","required":false,"in":"query","schema":{"maxLength":200,"example":"optimism-usdt-aave-v3-lending","type":"string"}},{"name":"yieldIds","required":false,"in":"query","schema":{"maxItems":100,"maxLength":200,"example":["optimism-usdt-aave-v3-lending"],"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","schema":{"example":true,"type":"boolean"}},{"name":"hasWarmupPeriod","required":false,"in":"query","description":"Filter by warmup period","schema":{"example":true,"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.","schema":{"example":true,"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":[]}],"summary":"List all yield opportunities","tags":["Discovery"]}},"/v1/yields/balances":{"post":{"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.","operationId":"YieldsController_getAggregateBalances_v1","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":[]}],"summary":"Get balances across multiple yields and networks","tags":["Portfolio"]}},"/v1/yields/{yieldId}":{"get":{"description":"Retrieve detailed information about a specific yield opportunity including APY, tokens, protocol details, and more.","operationId":"YieldsController_getYield_v1","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield","schema":{"example":"ethereum-eth-lido-staking","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":[]}],"summary":"Get yield metadata","tags":["Discovery"]}},"/v1/yields/{yieldId}/risk":{"get":{"description":"Retrieve consolidated risk ratings from third-party providers for a yield.","operationId":"YieldsController_getYieldRisk_v1","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield","schema":{"example":"ethereum-eth-lido-staking","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":[]}],"summary":"Get risk ratings for a yield","tags":["Discovery"]}},"/v1/yields/{yieldId}/balances":{"post":{"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.","operationId":"YieldsController_getYieldBalances_v1","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield opportunity","schema":{"example":"ethereum-eth-lido-staking","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":[]}],"summary":"Get balances for a specific yield","tags":["Portfolio"]}},"/v1/yields/{yieldId}/reward-rate/history":{"get":{"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.","operationId":"YieldsController_getYieldRewardRateHistory_v1","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield","schema":{"example":"ethereum-eth-lido-staking","type":"string"}},{"name":"offset","required":false,"in":"query","description":"Pagination offset","schema":{"minimum":0,"default":0,"example":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of data points to return (default 100, max 365)","schema":{"minimum":1,"maximum":365,"default":100,"example":20,"type":"number"}},{"name":"from","required":false,"in":"query","description":"Start of time range (ISO 8601). Overrides period when provided.","schema":{"example":"2025-01-01T00:00:00Z","type":"string"}},{"name":"to","required":false,"in":"query","description":"End of time range (ISO 8601). Defaults to now.","schema":{"example":"2025-07-10T00:00:00Z","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":[]}],"summary":"Get historical reward rate snapshots for a yield","tags":["Discovery"]}},"/v1/yields/{yieldId}/tvl/history":{"get":{"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.","operationId":"YieldsController_getYieldTvlHistory_v1","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield","schema":{"example":"ethereum-usdc-aave-v3-lending","type":"string"}},{"name":"offset","required":false,"in":"query","description":"Pagination offset","schema":{"minimum":0,"default":0,"example":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of data points to return (default 100, max 365)","schema":{"minimum":1,"maximum":365,"default":100,"example":20,"type":"number"}},{"name":"from","required":false,"in":"query","description":"Start of time range (ISO 8601). Overrides period when provided.","schema":{"example":"2025-01-01T00:00:00Z","type":"string"}},{"name":"to","required":false,"in":"query","description":"End of time range (ISO 8601). Defaults to now.","schema":{"example":"2025-07-10T00:00:00Z","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"}},{"name":"feeConfigurationId","required":false,"in":"query","description":"Fee configuration ID used to resolve partner allocator vault TVL history. Omit for underlying yield TVL history.","schema":{"example":"66f299cd-aaaa-bbbb-cccc-d1f26e3a02db","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":[]}],"summary":"Get historical TVL snapshots for a yield","tags":["Discovery"]}},"/v1/yields/{yieldId}/validators":{"get":{"description":"Retrieve a paginated list of validators available for staking or delegation for this yield opportunity.","operationId":"YieldsController_getYieldValidators_v1","parameters":[{"name":"yieldId","required":true,"in":"path","description":"The unique identifier of the yield","schema":{"example":"solana-sol-native-multivalidator-staking","type":"string"}},{"name":"offset","required":false,"in":"query","description":"Offset for pagination","schema":{"minimum":0,"default":0,"example":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"minimum":1,"maximum":100,"default":20,"example":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":[]}],"summary":"Get yield validators","tags":["Discovery"]}},"/v1/yields/{yieldId}/campaigns":{"get":{"description":"Returns campaign metadata for the given yield opportunity within the API key project scope.","operationId":"YieldsController_getYieldCampaigns_v1","parameters":[{"name":"yieldId","required":true,"in":"path","description":"Yield integration ID.","schema":{"example":"cosmos-atom-native-staking","type":"string"}},{"name":"offset","required":false,"in":"query","description":"Offset for pagination","schema":{"minimum":0,"default":0,"example":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of items to return","schema":{"minimum":1,"maximum":100,"default":20,"example":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":[]}],"summary":"Get yield campaigns","tags":["Discovery"]}},"/v1/tokens":{"get":{"description":"Retrieve tokens that have at least one enabled yield available for this project. Optionally filter by exact token identity, enter/exit availability, 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. Maintenance, deprecated, and decommissioned yields are always excluded.","operationId":"TokensController_getTokens_v1","parameters":[{"name":"address","required":false,"in":"query","description":"Filter by an exact token address. EVM addresses are case-insensitive; case-sensitive network addresses must match exactly.","schema":{"maxLength":256,"type":"string"}},{"name":"symbol","required":false,"in":"query","description":"Filter by an exact token symbol (case-insensitive).","schema":{"maxLength":64,"type":"string"}},{"name":"enter","required":false,"in":"query","description":"Filter available yields by known enter status. `true` returns tokens with enterable yields; `false` returns tokens with yields explicitly marked non-enterable. Missing or malformed status defaults to open. Narrows each token's `availableYields`; combined with `exit` using AND.","schema":{"type":"boolean"}},{"name":"exit","required":false,"in":"query","description":"Filter available yields by known exit status. `true` returns tokens with exitable yields; `false` returns tokens with yields explicitly marked non-exitable. Missing or malformed status defaults to open. Narrows each token's `availableYields`; combined with `enter` using AND. Does not surface deprecated yields.","schema":{"type":"boolean"}},{"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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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":[]}],"summary":"List tokens with available yields","tags":["Discovery"]}},"/v1/actions":{"get":{"description":"Retrieve all actions performed by a user, with optional filtering by yield, status, category, etc. STALE actions that never reached the chain are excluded unless a status filter is provided. In the future, this may include personalized action recommendations.","operationId":"ActionsController_getActions_v1","parameters":[{"name":"offset","required":false,"in":"query","description":"Offset for pagination","schema":{"minimum":0,"default":0,"example":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of items to return","schema":{"minimum":1,"maximum":100,"default":20,"example":20,"type":"number"}},{"name":"address","required":true,"in":"query","description":"User wallet address to get actions for","schema":{"example":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e","type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter actions by status. STALE actions that never reached the chain are excluded unless requested.","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). STALE actions that never reached the chain are excluded unless requested.","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":{"type":"string","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"]}},{"name":"yieldId","required":false,"in":"query","description":"Filter actions by specific yield","schema":{"example":"ethereum-eth-lido-staking","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":{"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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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"]}}],"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":[]}],"summary":"Get user actions","tags":["Actions"]}},"/v1/actions/{actionId}":{"get":{"description":"Retrieve detailed information about a specific action including current status, transactions, and execution details.","operationId":"ActionsController_getAction_v1","parameters":[{"name":"actionId","required":true,"in":"path","description":"The unique identifier of the action","schema":{"example":"action_123abc","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":[]}],"summary":"Get action details","tags":["Actions"]}},"/v1/actions/enter":{"post":{"description":"Generate the transactions needed to enter a yield position with the provided parameters.","operationId":"ActionsController_enterYield_v1","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":[]}],"summary":"Enter a yield","tags":["Actions"]}},"/v1/actions/exit":{"post":{"description":"Generate the transactions needed to exit a yield position with the provided parameters.","operationId":"ActionsController_exitYield_v1","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":[]}],"summary":"Exit a yield","tags":["Actions"]}},"/v1/actions/enter/simulate":{"post":{"description":"Simulates an enter action without creating or persisting an action or transactions. The response is sectioned so it can grow additively: v1 returns `gas` (and `entryReserveEstimate` for Solana enters); fee and execution-outcome sections will be added as further optional keys. A 200 does not guarantee the action would succeed on-chain — construction-level prechecks may be skipped during simulation.","operationId":"ActionsController_simulateEnter_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateActionDto"}}}},"responses":{"200":{"description":"Simulation result for the enter action","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionSimulationDto"}}}},"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"},"412":{"description":"Yield is currently closed for new deposits"},"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":[]}],"summary":"Simulate entering a yield","tags":["Actions"]}},"/v1/actions/exit/simulate":{"post":{"description":"Simulates an exit action without creating or persisting an action or transactions. The response is sectioned so it can grow additively: v1 returns `gas`; fee and execution-outcome sections will be added as further optional keys. A 200 does not guarantee the action would succeed on-chain — construction-level prechecks may be skipped during simulation.","operationId":"ActionsController_simulateExit_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateActionDto"}}}},"responses":{"200":{"description":"Simulation result for the exit action","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionSimulationDto"}}}},"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"},"412":{"description":"Yield is currently closed for withdrawals"},"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":[]}],"summary":"Simulate exiting a yield","tags":["Actions"]}},"/v1/actions/manage":{"post":{"description":"Generate the transactions needed to perform management actions on a yield position.","operationId":"ActionsController_manageYield_v1","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":[]}],"summary":"Manage a yield","tags":["Actions"]}},"/v1/transactions/{transactionId}/submit-hash":{"put":{"description":"Submit the transaction hash after broadcasting a transaction to the blockchain. This updates the transaction status and enables tracking.","operationId":"TransactionsController_submitTransactionHash_v1","parameters":[{"name":"transactionId","required":true,"in":"path","description":"The unique identifier of the transaction","schema":{"example":"21f5fd15-cf80-4b9a-804f-062c40dc3740"}}],"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":[]}],"summary":"Submit transaction hash","tags":["Actions"]}},"/v1/transactions/{transactionId}/submit":{"post":{"description":"Submit the transaction to the blockchain.","operationId":"TransactionsController_submitTransaction_v1","parameters":[{"name":"transactionId","required":true,"in":"path","description":"The unique identifier of the transaction","schema":{"example":"21f5fd15-cf80-4b9a-804f-062c40dc3740"}}],"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":[]}],"summary":"Submit transaction","tags":["Actions"]}},"/v1/transactions/{transactionId}":{"get":{"description":"Retrieve detailed information about a specific transaction including current status, hash, and execution details.","operationId":"TransactionsController_getTransaction_v1","parameters":[{"name":"transactionId","required":true,"in":"path","description":"The unique identifier of the transaction","schema":{"example":"21f5fd15-cf80-4b9a-804f-062c40dc3740"}}],"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":[]}],"summary":"Get transaction details","tags":["Actions"]}},"/v1/yields/{yieldId}/kyc/status":{"get":{"description":"Returns the normalized KYC status for the given address. Yields without a KYC requirement return not_required.","operationId":"KycController_getStatus_v1","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}}}}}}},"security":[{"ApiKey":[]}],"summary":"Get the KYC status of an address for a yield","tags":["Portfolio"]}},"/v1/networks":{"get":{"description":"Retrieve networks with enabled yield opportunities for the authenticated project.","operationId":"NetworksController_getNetworks_v1","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":[]}],"summary":"List enabled networks","tags":["Discovery"]}},"/v1/providers":{"get":{"description":"Returns a paginated list of all providers, including both protocol and validator providers.","operationId":"ProvidersController_getProviders_v1","parameters":[{"name":"offset","required":false,"in":"query","description":"Offset for pagination","schema":{"minimum":0,"default":0,"example":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"minimum":1,"maximum":100,"default":20,"example":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":[]}],"summary":"Get all providers","tags":["Discovery"]}},"/v1/providers/{providerId}":{"get":{"description":"Returns detailed information about a specific provider.","operationId":"ProvidersController_getProvider_v1","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":[]}],"summary":"Get provider by ID","tags":["Discovery"]}},"/health":{"get":{"description":"Get the health status of the yield API with current timestamp","operationId":"HealthController_health","parameters":[],"responses":{"200":{"description":"Health check status with timestamp","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatusDto"}}}}},"summary":"Health check","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, plus yield-level risk, reward rate, and TVL data"},{"name":"Portfolio","description":"User-specific balances and KYC status"},{"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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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 underlying integration reward rate across all sources. May include an additional campaign component when an active campaign applies to this project.","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 for this statistics scope","example":"1,200,000","nullable":true},"tvl":{"type":"string","description":"Total value locked in primary underlying token for this statistics scope","example":"500.25","nullable":true},"tvlRaw":{"type":"string","description":"Raw total value locked in smallest token units for this statistics scope","example":"500250000000000000000","nullable":true},"uniqueUsers":{"type":"number","description":"Number of wallets with an active position on the underlying vault share token. Null when the yield is not ERC4626, no precomputed data exists, or indexing has not run yet. Partner-specific stats are not included.","example":348,"nullable":true},"averagePositionSizeUsd":{"type":"string","description":"Average position size in USD for the underlying vault (TVL USD divided by base-vault unique holders). Not partner-scoped.","example":"3,448.27","nullable":true},"averagePositionSize":{"type":"string","description":"Average position size in primary underlying token for the underlying vault (TVL divided by base-vault unique holders). Not partner-scoped.","example":"1.44","nullable":true}}},"YieldFeeConfigurationDto":{"type":"object","properties":{"id":{"type":"string","description":"Fee configuration identifier","example":"66f299cd-aaaa-bbbb-cccc-d1f26e3a02db"},"default":{"type":"boolean","description":"Whether this is the default fee configuration for the integration","example":true},"managementFeeBps":{"type":"object","description":"Management fee in basis points","example":100,"nullable":true},"performanceFeeBps":{"type":"object","description":"Performance fee in basis points","example":1000,"nullable":true},"depositFeeBps":{"type":"object","description":"Deposit fee in basis points","example":0,"nullable":true},"allocatorVaultContractAddress":{"type":"object","description":"Partner allocator vault contract address","example":"0x80ac24aa929eaf5013f6436cda2a7ba190f5cc0b","nullable":true},"statistics":{"description":"Partner-scoped metrics for assets that entered through this fee configuration allocator vault","allOf":[{"$ref":"#/components/schemas/YieldStatisticsDto"}]}},"required":["id","default"]},"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","enum":["ERC20","ERC4626","ERC721","ERC1155"],"description":"Supported standards for this yield"},"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","description":"Supported standards for this yield","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","enum":["staking","restaking","lending","vault","fixed_yield","real_world_asset","concentrated_liquidity_pool","liquidity_pool","liquid_staking"],"description":"Type of yield mechanism (staking, restaking, LP, vault, etc.)"},"RewardSchedule":{"type":"string","enum":["block","hour","day","week","month","era","epoch","campaign"],"description":"How often rewards are distributed (e.g. continuously, epoch-based)"},"RewardClaiming":{"type":"string","enum":["auto","manual"],"description":"How rewards are claimed: auto, manual, or mixed"},"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"},"geoBlockingEnforced":{"type":"boolean","description":"Whether eligibility is IP-enforced at action creation: the blocked lists always, plus the countries allow-list when defaultPolicy is \"deny\". Absent or false means informational only"},"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"]},"SelfAttestationDocumentDto":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable document name","example":"Risk Disclosures"},"url":{"type":"string","description":"URL of the document the user must accept (HTTPS)"}},"required":["name","url"]},"SelfAttestationDto":{"type":"object","properties":{"documents":{"description":"Documents the user must accept before entering","type":"array","items":{"$ref":"#/components/schemas/SelfAttestationDocumentDto"}},"notes":{"type":"string","description":"Human-readable notes about the self-attestation requirement"}},"required":["documents"]},"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"},"selfAttestation":{"description":"Issuer-enforced self-attestation the user must complete before entering","allOf":[{"$ref":"#/components/schemas/SelfAttestationDto"}]},"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","amountRaw","amounts","shareAmount","shareAmountRaw","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":{"description":"Type of yield mechanism (staking, restaking, LP, vault, etc.)","allOf":[{"$ref":"#/components/schemas/YieldType"}]},"requiresValidatorSelection":{"type":"boolean","description":"Indicates whether this yield requires validator selection","example":true},"rewardSchedule":{"description":"How often rewards are distributed (e.g. continuously, epoch-based)","allOf":[{"$ref":"#/components/schemas/RewardSchedule"}]},"rewardClaiming":{"description":"How rewards are claimed: auto, manual, or mixed","allOf":[{"$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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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,"type":"object","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"}}}},"WindowBoundsDto":{"type":"object","properties":{"opensAt":{"type":"string","description":"Window open time (ISO 8601)","example":"2026-07-21T08:00:00Z"},"closesAt":{"type":"string","description":"Window close / cutoff time (ISO 8601); orders after this roll to nextWindow","example":"2026-07-27T20:00:00Z"},"source":{"type":"string","description":"Provenance of this window (on-chain read, issuer API, or hardcoded config)","enum":["onchain","api","config"]}},"required":["opensAt","closesAt"]},"SettlementSpecDto":{"type":"object","properties":{"type":{"type":"string","description":"How the order settles: atomic (same tx), next_business_day, cohort (batched off-chain), or cooldown (fixed delay)","enum":["atomic","next_business_day","cohort","cooldown"]},"marketDays":{"type":"number","description":"Settlement horizon in market days (T+N) when applicable","example":1},"estimatedDuration":{"description":"Best estimate of full settlement when not atomic","allOf":[{"$ref":"#/components/schemas/TimePeriodDto"}]},"estimatedSettlementAt":{"type":"string","description":"Concrete settlement date when known (ISO 8601, cohort/scheduled)"},"claimRequired":{"type":"boolean","description":"User must submit a separate on-chain claim to receive settled funds (ERC-7540)"},"instantPortion":{"type":"number","description":"Split delivery: fraction (0-1) delivered instantly; the rest is deferred","example":0.93},"deferredDeliveryAt":{"type":"string","description":"Concrete date the deferred portion is delivered (ISO 8601)"}},"required":["type"]},"AccrualSpecDto":{"type":"object","properties":{"startsAt":{"type":"string","description":"When earning starts (subscription) / earn-through boundary (redemption): immediate, next_business_day, on_cycle_start, or on_settlement","enum":["immediate","next_business_day","on_cycle_start","on_settlement"]},"startsAtDate":{"type":"string","description":"Concrete accrual start date when known (ISO 8601, cron-filled)"},"minimumHold":{"description":"Minimum hold before redemption is allowed","allOf":[{"$ref":"#/components/schemas/TimePeriodDto"}]}},"required":["startsAt"]},"PathLimitsDto":{"type":"object","properties":{"individualPer24h":{"type":"string","description":"Per-investor cap per rolling 24h"},"globalPer24h":{"type":"string","description":"Protocol-wide cap per rolling 24h"},"globalRemainingPer24h":{"type":"string","description":"Live remaining protocol-wide capacity in the current rolling 24h window (globalPer24h minus used); computed at request time"},"maxFractionOfNav":{"type":"number","description":"On-demand pool cap as a fraction of NAV (0-1)","example":0.05},"liquidityBounded":{"type":"boolean","description":"Path depends on an on-chain liquidity buffer; live depth lives in state.liquidityState"},"availableLiquidity":{"type":"string","description":"Live liquidity available to this path right now, in the payout token; computed at request time","example":"323155"},"minimumAmount":{"type":"string","description":"Per-path minimum when it differs from mechanics.entryLimits"}}},"PathFeeDto":{"type":"object","properties":{"rate":{"type":"number","description":"Fee charged on this path as a decimal fraction of the amount (0.0007 = 0.07%)","example":0.0007}},"required":["rate"]},"SchedulePathDto":{"type":"object","properties":{"kind":{"type":"string","description":"instant = atomic same-tx, liquidity/limit-bounded; standard = windowed / off-chain settled","enum":["instant","standard"]},"cadence":{"type":"string","description":"How the path recurs","enum":["continuous","daily_cutoff","periodic","scheduled"]},"status":{"type":"string","description":"Live status, refreshed by cron / on-chain read","enum":["open","closed","settling"]},"businessDaysOnly":{"type":"boolean","description":"false/omitted = 24/7/365 (instant DeFi paths); true = market days only"},"cutoffTime":{"type":"string","description":"For daily_cutoff: local cutoff time orders must be in by, e.g. \"16:00\"","example":"16:00"},"currentWindow":{"description":"The window the user is acting into right now (null when continuous)","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/WindowBoundsDto"}]},"nextWindow":{"description":"The next window after the current one closes; what a UI counts down to","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/WindowBoundsDto"}]},"settlement":{"description":"When the order is actually processed","allOf":[{"$ref":"#/components/schemas/SettlementSpecDto"}]},"accrual":{"description":"When earning starts/stops relative to the order","allOf":[{"$ref":"#/components/schemas/AccrualSpecDto"}]},"limits":{"description":"Caps that gate an instant path or an on-demand liquidity pool","allOf":[{"$ref":"#/components/schemas/PathLimitsDto"}]},"fee":{"description":"Fee this path charges on the amount (e.g. instant redemption fee)","allOf":[{"$ref":"#/components/schemas/PathFeeDto"}]}},"required":["kind","cadence","status","settlement","accrual"]},"SideScheduleDto":{"type":"object","properties":{"paths":{"description":"Ways to act on this side (e.g. instant + standard); paths[0] is the default","type":"array","items":{"$ref":"#/components/schemas/SchedulePathDto"}}},"required":["paths"]},"InvestmentScheduleDto":{"type":"object","properties":{"timezone":{"type":"string","description":"Issuer operating timezone (IANA); cutoff times and business days resolve against this","example":"America/New_York"},"subscription":{"description":"Subscription (enter) side","allOf":[{"$ref":"#/components/schemas/SideScheduleDto"}]},"redemption":{"description":"Redemption (exit) side","allOf":[{"$ref":"#/components/schemas/SideScheduleDto"}]},"notes":{"type":"string","description":"Free-form footnotes from the issuer"}},"required":["timezone","subscription","redemption"]},"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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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"}]},"feeConfigurations":{"description":"Live partner fee configurations for this yield. Each entry includes partner-scoped statistics for the allocator vault when available.","type":"array","items":{"$ref":"#/components/schemas/YieldFeeConfigurationDto"}},"statistics":{"description":"Underlying yield opportunity metrics (protocol-level TVL and base-vault holder counts). For partner-scoped metrics, see feeConfigurations.","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"}]},"investmentSchedule":{"description":"Deposit/redemption schedule for fund-style RWAs: subscription and redemption sides, each a list of paths (cadence, window, settlement, accrual, limits). Additive to cooldownPeriod/status. Static rules are merged with cron-hydrated live fields (status, windows, concrete dates).","allOf":[{"$ref":"#/components/schemas/InvestmentScheduleDto"}]},"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","enum":["active","entering","exiting","withdrawable","claimable","locked"],"description":"Type of balance"},"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,"type":"object","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":{"description":"Type of balance","allOf":[{"$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,"type":"object","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,"type":"object","allOf":[{"$ref":"#/components/schemas/BalanceDto"}]},"rewardRate":{"description":"Personalized reward rate breakdown for this balance position","nullable":true,"type":"object","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","enum":["ethereum","ethereum-goerli","ethereum-holesky","ethereum-sepolia","ethereum-hoodi","arbitrum","base","base-sepolia","gnosis","optimism","polygon","polygon-amoy","starknet","zksync","linea","unichain","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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"],"description":"Network for this address"},"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":{"description":"Network for this address","example":"ethereum","allOf":[{"$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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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"]},"ActionEventDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique event identifier","example":"event_123abc"},"type":{"type":"string","description":"Type of protocol-side event associated with the action","enum":["REDEMPTION_SETTLED","REDEMPTION_CANCELLED"],"example":"REDEMPTION_SETTLED"},"transactionHash":{"type":"string","description":"Hash of the protocol transaction that produced the event (e.g. the redemption settlement transaction)","nullable":true},"occurredAt":{"format":"date-time","type":"string","description":"When the event occurred on-chain, falling back to when it was detected if the block is unavailable"}},"required":["id","type","transactionHash","occurredAt"]},"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. Mutually exclusive with amountRaw.","example":"1.500000"},"amountRaw":{"type":"string","description":"Amount in the smallest denomination (wei for ETH, satoshi for BTC, etc.). For example, \"1500000\" for 1.5 USDC (6 decimals) or \"10000000000000000\" for 0.01 ETH (18 decimals). Mutually exclusive with amount.","example":"1000000000000000000"},"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"}},"shareAmount":{"type":"string","description":"Share amount to withdraw","example":"1.500000"},"shareAmountRaw":{"type":"string","description":"Share amount to withdraw in raw decimals","example":"1500000"},"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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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},"entryReserveEstimate":{"type":"string","description":"Total SOL side-reserve required for enter validation: account rent plus ~0.005 SOL priority-fee buffer. For max native-SOL deposit use balance minus this value; do not also subtract amount. Only returned on the enter action creation response; omitted for exits, manage actions, and action retrieval."},"transactions":{"description":"Array of transactions for this action","type":"array","items":{"$ref":"#/components/schemas/TransactionDto"}},"events":{"description":"Protocol-side events associated with this action, such as a redemption settlement executed by the protocol after the action completed. Omitted when there are none.","type":"array","items":{"$ref":"#/components/schemas/ActionEventDto"}},"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,"type":"object","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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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"]},"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":{"allOf":[{"$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":{"allOf":[{"$ref":"#/components/schemas/CampaignStatus"}]},"rewardMode":{"allOf":[{"$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.","type":"object","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":{"allOf":[{"$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":{"address":{"type":"string","description":"Filter by an exact token address","maxLength":256},"symbol":{"type":"string","description":"Filter by an exact token symbol","maxLength":64},"enter":{"type":"boolean","description":"Filter by enter availability of known yield status. `true` keeps yields that are enterable; `false` keeps yields explicitly marked non-enterable. Missing or malformed status defaults to open. When set, each token's `availableYields` is narrowed to matching yields; tokens left with none are omitted. Combined with `exit` using AND."},"exit":{"type":"boolean","description":"Filter by exit availability of known yield status. `true` keeps yields that are exitable; `false` keeps yields explicitly marked non-exitable. Missing or malformed status defaults to open. When set, each token's `availableYields` is narrowed to matching yields; tokens left with none are omitted. Combined with `enter` using AND. Does not include deprecated yields, which remain excluded from this endpoint."},"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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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"]},"TransactionType":{"type":"string","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"]},"TransactionGasEstimateDto":{"type":"object","properties":{"amount":{"type":"string","nullable":true},"token":{"$ref":"#/components/schemas/TokenDto"},"gasLimit":{"type":"string"},"stepIndex":{"type":"number"},"type":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/TransactionType"}]}},"required":["amount","token","stepIndex","type"]},"SimulationGasDto":{"type":"object","properties":{"amount":{"type":"string","nullable":true},"token":{"$ref":"#/components/schemas/TokenDto"},"gasLimit":{"type":"string"},"transactions":{"type":"array","items":{"$ref":"#/components/schemas/TransactionGasEstimateDto"}}},"required":["amount","token","transactions"]},"ActionSimulationDto":{"type":"object","properties":{"gas":{"description":"Estimated gas cost of the action, aggregated and per transaction.","allOf":[{"$ref":"#/components/schemas/SimulationGasDto"}]},"entryReserveEstimate":{"type":"string","description":"Total SOL side-reserve required for enter validation: account rent plus ~0.005 SOL priority-fee buffer. For max native-SOL deposit use balance minus this value; do not also subtract the gas amount. Only returned on enter simulations; omitted for exits and when unavailable."}},"required":["gas"]},"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. STALE actions that never reached the chain are excluded unless requested.","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). STALE actions that never reached the chain are excluded unless requested.","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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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","plume","monad-testnet","monad","robinhood","robinhood-testnet","arc-testnet","avalanche-c","avalanche-c-atomic","avalanche-p","binance","celo","fantom","harmony","moonriver","okc","viction","core","sonic","plasma","katana","hyperevm","tempo","pharos","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","enum":["OK","FAIL"],"description":"The health status of the service"},"HealthStatusDto":{"type":"object","properties":{"status":{"example":"OK","description":"The health status of the service","allOf":[{"$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"}}