openapi: 3.0.0
paths:
  /v1/yields:
    get:
      operationId: YieldsController_getYields
      summary: List all yield opportunities
      description: >-
        Retrieve a paginated list of available yield opportunities across all
        supported networks and protocols.
      parameters:
        - name: offset
          required: false
          in: query
          description: Offset for pagination
          example: 0
          schema:
            minimum: 0
            default: 0
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page
          example: 20
          schema:
            minimum: 1
            maximum: 100
            default: 20
            type: number
        - name: network
          required: false
          in: query
          description: Filter by network
          schema:
            enum:
              - ethereum
              - ethereum-goerli
              - ethereum-holesky
              - ethereum-sepolia
              - ethereum-hoodi
              - arbitrum
              - base
              - base-sepolia
              - gnosis
              - optimism
              - polygon
              - polygon-amoy
              - starknet
              - zksync
              - linea
              - unichain
              - monad-testnet
              - monad
              - avalanche-c
              - avalanche-c-atomic
              - avalanche-p
              - binance
              - celo
              - fantom
              - harmony
              - moonriver
              - okc
              - viction
              - core
              - sonic
              - plasma
              - katana
              - hyperevm
              - agoric
              - akash
              - axelar
              - band-protocol
              - bitsong
              - canto
              - chihuahua
              - comdex
              - coreum
              - cosmos
              - crescent
              - cronos
              - cudos
              - desmos
              - dydx
              - evmos
              - fetch-ai
              - gravity-bridge
              - injective
              - irisnet
              - juno
              - kava
              - ki-network
              - mars-protocol
              - nym
              - okex-chain
              - onomy
              - osmosis
              - persistence
              - quicksilver
              - regen
              - secret
              - sentinel
              - sommelier
              - stafi
              - stargaze
              - stride
              - teritori
              - tgrade
              - umee
              - sei
              - mantra
              - celestia
              - saga
              - zetachain
              - dymension
              - humansai
              - neutron
              - polkadot
              - kusama
              - westend
              - bittensor
              - aptos
              - binancebeacon
              - cardano
              - near
              - solana
              - solana-devnet
              - stellar
              - stellar-testnet
              - sui
              - tezos
              - tron
              - ton
              - ton-testnet
              - hyperliquid
            type: string
        - name: chainId
          required: false
          in: query
          description: 'Filter by EVM chain ID (Ethereum: 1, Polygon: 137)'
          example: '1'
          schema:
            type: string
        - name: networks
          required: false
          in: query
          description: Filter by multiple networks (comma separated)
          schema:
            type: string
        - name: yieldId
          required: false
          in: query
          example: optimism-usdt-aave-v3-lending
          schema:
            maxLength: 200
            type: string
        - name: yieldIds
          required: false
          in: query
          example:
            - optimism-usdt-aave-v3-lending
          schema:
            maxItems: 100
            maxLength: 200
            type: array
            items:
              type: string
        - name: type
          required: false
          in: query
          description: Filter by yield type
          schema:
            enum:
              - staking
              - restaking
              - lending
              - vault
              - fixed_yield
              - real_world_asset
              - concentrated_liquidity_pool
              - liquidity_pool
            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
        - name: hasCooldownPeriod
          required: false
          in: query
          description: Filter by cooldown period
          example: true
          schema:
            type: boolean
        - name: hasWarmupPeriod
          required: false
          in: query
          description: Filter by warmup period
          example: true
          schema:
            type: boolean
        - name: token
          required: false
          in: query
          description: Filter by token symbol or address
          schema:
            type: string
        - name: inputToken
          required: false
          in: query
          description: Filter by input token symbol or address
          schema:
            type: string
        - name: inputTokens
          required: false
          in: query
          description: Filter by multiple input token symbol or address (comma separated)
          schema:
            type: array
            items:
              type: string
        - name: provider
          required: false
          in: query
          description: Filter by provider ID
          schema:
            type: string
        - name: providers
          required: false
          in: query
          description: Filter by multiple provider IDs (comma separated)
          schema:
            type: array
            items:
              type: string
        - name: search
          required: false
          in: query
          description: Search by yield name
          schema:
            type: string
        - name: sort
          required: false
          in: query
          description: Sort by yield status or reward rate
          schema:
            enum:
              - statusEnterAsc
              - statusEnterDesc
              - statusExitAsc
              - statusExitDesc
              - rewardRateAsc
              - rewardRateDesc
            type: string
      responses:
        '200':
          description: Returns a paginated list of yield opportunities
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PaginatedResponseDto'
                  - properties:
                      items:
                        type: array
                        items:
                          $ref: '#/components/schemas/YieldDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Discovery
  /v1/yields/balances:
    post:
      operationId: YieldsController_getAggregateBalances
      summary: Get balances across multiple yields and networks
      description: >-
        Retrieve balances for multiple wallet addresses across different
        networks and yield opportunities. Send an array of balance requests -
        each request can specify a yieldId (optional for chain scanning),
        address, network, and custom arguments. This is the same format as the
        single yield balance endpoint but in array form. Duplicate requests
        (same yieldId + address + network) are automatically deduplicated, with
        specific yield requests taking precedence over chain scans.
      parameters: []
      requestBody:
        required: true
        description: >-
          Request containing an array of balance queries. Each query contains:
          yieldId (optional), address (required), network (required), and
          arguments (optional). When yieldId is omitted, all yields for that
          network will be scanned. You can mix chain scans with specific yield
          queries - duplicates are automatically deduplicated with specific
          queries taking precedence.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BalancesRequestDto'
      responses:
        '200':
          description: >-
            Returns balances grouped by yield with detailed error information
            for failed yields. Only yields with non-zero balances are included
            in the response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BalancesResponseDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Portfolio
  /v1/yields/{yieldId}:
    get:
      operationId: YieldsController_getYield
      summary: Get yield metadata
      description: >-
        Retrieve detailed information about a specific yield opportunity
        including APY, tokens, protocol details, and more.
      parameters:
        - name: yieldId
          required: true
          in: path
          description: The unique identifier of the yield
          example: ethereum-eth-lido-staking
          schema:
            type: string
      responses:
        '200':
          description: >-
            Returns yield metadata including network, APR, TVL, and token
            information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/YieldDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: Yield not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Discovery
  /v1/yields/{yieldId}/risk:
    get:
      operationId: YieldsController_getYieldRisk
      summary: Get risk ratings for a yield
      description: >-
        Retrieve consolidated risk ratings from third-party providers for a
        yield.
      parameters:
        - name: yieldId
          required: true
          in: path
          description: The unique identifier of the yield
          example: ethereum-eth-lido-staking
          schema:
            type: string
      responses:
        '200':
          description: Risk ratings retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/YieldRiskDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: >-
            Yield not found, or risk data has not yet been collected for this
            yield
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Yields
  /v1/yields/{yieldId}/balances/history:
    get:
      operationId: YieldsController_getBalanceHistory
      summary: Get historical balance snapshots for a yield
      description: >-
        Returns a chronological time series of balance snapshots for a wallet
        address within a yield. Each entry reflects the position at a specific
        timestamp or block. Supports configurable sampling intervals and
        point-in-time queries. Only available for ERC4626 vaults with indexed
        transfer history.
      parameters:
        - name: yieldId
          required: true
          in: path
          description: The unique identifier of the yield
          example: ethereum-eth-lido-staking
          schema:
            type: string
        - name: address
          required: true
          in: query
          description: Wallet address to fetch history for
          example: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e'
          schema:
            type: string
        - name: from
          required: false
          in: query
          description: Start of time range (ISO 8601)
          example: '2025-01-01T00:00:00Z'
          schema:
            type: string
        - name: to
          required: false
          in: query
          description: End of time range (ISO 8601). Defaults to now.
          example: '2025-07-12T00:00:00Z'
          schema:
            type: string
        - name: blockNumber
          required: false
          in: query
          description: >-
            Block number for a point-in-time snapshot. When provided,
            from/to/interval are ignored.
          example: 20540000
          schema:
            type: number
        - name: interval
          required: false
          in: query
          description: Sampling resolution for the time series
          schema:
            enum:
              - block
              - hour
              - day
              - week
            type: string
        - name: sort
          required: false
          in: query
          description: Sort order by timestamp. Defaults to most recent first (desc).
          schema:
            enum:
              - asc
              - desc
            type: string
        - name: limit
          required: false
          in: query
          description: Maximum number of items to return (default 30, max 100)
          example: 30
          schema:
            minimum: 1
            maximum: 100
            default: 30
            type: number
        - name: offset
          required: false
          in: query
          description: Pagination offset
          example: 0
          schema:
            minimum: 0
            default: 0
            type: number
      responses:
        '200':
          description: Returns a paginated time series of balance snapshots
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PaginatedResponseDto'
                  - properties:
                      items:
                        type: array
                        items:
                          $ref: '#/components/schemas/BalanceHistorySnapshotDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: Yield not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Portfolio
  /v1/yields/{yieldId}/balances:
    post:
      operationId: YieldsController_getYieldBalances
      summary: Get balances for a specific yield
      description: >-
        Retrieve all balances associated with a yield opportunity for a specific
        wallet address, including active, pending, claimable, and withdrawable
        balances. The network is automatically determined from the yield
        configuration.
      parameters:
        - name: yieldId
          required: true
          in: path
          description: The unique identifier of the yield opportunity
          example: ethereum-eth-lido-staking
          schema:
            type: string
      requestBody:
        required: true
        description: >-
          Balance request with address and optional arguments for advanced
          balance queries
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/YieldBalancesRequestDto'
      responses:
        '200':
          description: >-
            Returns balance information including different balance types
            (active, entering, exiting, withdrawable, claimable, locked) with
            amounts and available actions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/YieldBalancesDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: Yield not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Portfolio
  /v1/yields/{yieldId}/rewards/history:
    get:
      operationId: YieldsController_getYieldRewards
      summary: Get reward history
      description: >-
        Retrieve a chronological list of on-chain reward events for an indexed
        yield. Each record includes timestamp, token metadata, amount, reward
        source, and transaction reference.
      parameters:
        - name: yieldId
          required: true
          in: path
          description: The unique identifier of the yield
          example: ethereum-usdc-morpho-vault
          schema:
            type: string
        - name: address
          required: true
          in: query
          description: Wallet address to fetch rewards for
          example: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e'
          schema:
            type: string
        - name: from
          required: false
          in: query
          description: Start of time range (ISO 8601)
          example: '2025-01-01T00:00:00Z'
          schema:
            type: string
        - name: to
          required: false
          in: query
          description: End of time range (ISO 8601)
          example: '2025-07-12T00:00:00Z'
          schema:
            type: string
        - name: sort
          required: false
          in: query
          description: 'Sort order by timestamp (default: desc)'
          schema:
            enum:
              - asc
              - desc
            type: string
        - name: limit
          required: false
          in: query
          description: 'Maximum number of items to return (default: 100, max: 100)'
          example: 100
          schema:
            minimum: 1
            maximum: 100
            default: 100
            type: number
        - name: offset
          required: false
          in: query
          description: 'Pagination offset (default: 0)'
          example: 0
          schema:
            minimum: 0
            default: 0
            type: number
      responses:
        '200':
          description: Paginated reward events
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedResponseDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: Reward history not available for this yield (not indexed)
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Portfolio
  /v1/yields/{yieldId}/reward-rate/history:
    get:
      operationId: YieldsController_getYieldRewardRateHistory
      summary: Get historical reward rate snapshots for a yield
      description: >-
        Returns a chronological time series of reward rate snapshots for the
        specified yield, suitable for charting and analytics. Supports
        configurable time ranges, sampling intervals (day/week/month), and
        pagination.
      parameters:
        - name: yieldId
          required: true
          in: path
          description: The unique identifier of the yield
          example: ethereum-eth-lido-staking
          schema:
            type: string
        - name: offset
          required: false
          in: query
          description: Pagination offset
          example: 0
          schema:
            minimum: 0
            default: 0
            type: number
        - name: limit
          required: false
          in: query
          description: Maximum number of data points to return (default 100, max 365)
          example: 20
          schema:
            minimum: 1
            maximum: 365
            default: 100
            type: number
        - name: from
          required: false
          in: query
          description: Start of time range (ISO 8601). Overrides period when provided.
          example: '2025-01-01T00:00:00Z'
          schema:
            type: string
        - name: to
          required: false
          in: query
          description: End of time range (ISO 8601). Defaults to now.
          example: '2025-07-10T00:00:00Z'
          schema:
            type: string
        - name: period
          required: false
          in: query
          description: >-
            Predefined time window. Ignored when from/to are provided. Default:
            30d.
          schema:
            enum:
              - 1d
              - 7d
              - 30d
              - 90d
              - 1y
              - all
            type: string
        - name: interval
          required: false
          in: query
          description: 'Sampling resolution (day/week/month). Default: day.'
          schema:
            enum:
              - day
              - week
              - month
            type: string
      responses:
        '200':
          description: Returns a time series of reward rate snapshots
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RewardRateHistoryResponseDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: Yield not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - YieldData
  /v1/yields/{yieldId}/tvl/history:
    get:
      operationId: YieldsController_getYieldTvlHistory
      summary: Get historical TVL snapshots for a yield
      description: >-
        Returns a chronological time series of Total Value Locked for the
        specified yield, expressed in underlying token units. Supports
        configurable time ranges, sampling intervals (day/week/month), and
        pagination.
      parameters:
        - name: yieldId
          required: true
          in: path
          description: The unique identifier of the yield
          example: ethereum-usdc-aave-v3-lending
          schema:
            type: string
        - name: offset
          required: false
          in: query
          description: Pagination offset
          example: 0
          schema:
            minimum: 0
            default: 0
            type: number
        - name: limit
          required: false
          in: query
          description: Maximum number of data points to return (default 100, max 365)
          example: 20
          schema:
            minimum: 1
            maximum: 365
            default: 100
            type: number
        - name: from
          required: false
          in: query
          description: Start of time range (ISO 8601). Overrides period when provided.
          example: '2025-01-01T00:00:00Z'
          schema:
            type: string
        - name: to
          required: false
          in: query
          description: End of time range (ISO 8601). Defaults to now.
          example: '2025-07-10T00:00:00Z'
          schema:
            type: string
        - name: period
          required: false
          in: query
          description: >-
            Predefined time window. Ignored when from/to are provided. Default:
            30d.
          schema:
            enum:
              - 1d
              - 7d
              - 30d
              - 90d
              - 1y
              - all
            type: string
        - name: interval
          required: false
          in: query
          description: 'Sampling resolution (day/week/month). Default: day.'
          schema:
            enum:
              - day
              - week
              - month
            type: string
      responses:
        '200':
          description: Returns a time series of TVL snapshots in token units
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TvlHistoryResponseDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: Yield not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - YieldData
  /v1/yields/{yieldId}/validators:
    get:
      operationId: YieldsController_getYieldValidators
      summary: Get yield validators
      description: >-
        Retrieve a paginated list of validators available for staking or
        delegation for this yield opportunity.
      parameters:
        - name: yieldId
          required: true
          in: path
          description: The unique identifier of the yield
          example: solana-sol-native-multivalidator-staking
          schema:
            type: string
        - name: offset
          required: false
          in: query
          description: Offset for pagination
          example: 0
          schema:
            minimum: 0
            default: 0
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page
          example: 20
          schema:
            minimum: 1
            maximum: 100
            default: 20
            type: number
        - name: name
          required: false
          in: query
          description: Filter by validator name (case-insensitive, partial match)
          schema:
            type: string
        - name: address
          required: false
          in: query
          description: Filter by validator address
          schema:
            type: string
        - name: provider
          required: false
          in: query
          description: Filter by provider ID
          schema:
            type: string
        - name: status
          required: false
          in: query
          description: Filter by validator status
          schema:
            type: string
        - name: preferred
          required: false
          in: query
          description: Filter by preferred flag
          schema:
            type: boolean
      responses:
        '200':
          description: >-
            Returns paginated list of available validators with detailed
            information
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PaginatedResponseDto'
                  - properties:
                      items:
                        type: array
                        items:
                          $ref: '#/components/schemas/ValidatorDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: Yield not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Discovery
  /v1/yields/{yieldId}/campaigns:
    get:
      operationId: YieldsController_getYieldCampaigns
      summary: Get yield campaigns
      description: >-
        Returns campaign metadata for the given yield opportunity within the API
        key project scope.
      parameters:
        - name: yieldId
          required: true
          in: path
          example: cosmos-atom-native-staking
          description: Yield integration ID.
          schema:
            type: string
        - name: offset
          required: false
          in: query
          description: Offset for pagination
          example: 0
          schema:
            minimum: 0
            default: 0
            type: number
        - name: limit
          required: false
          in: query
          description: Maximum number of items to return
          example: 20
          schema:
            minimum: 1
            maximum: 100
            default: 20
            type: number
        - name: status
          required: false
          in: query
          description: Campaign status filter. Defaults to active.
          schema:
            $ref: '#/components/schemas/CampaignStatus'
      responses:
        '200':
          description: Campaign metadata for the given yield
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PaginatedResponseDto'
                  - properties:
                      items:
                        type: array
                        items:
                          $ref: '#/components/schemas/YieldCampaignDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: Yield not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Discovery
  /v1/actions:
    get:
      operationId: ActionsController_getActions
      summary: Get user actions
      description: >-
        Retrieve all actions performed by a user, with optional filtering by
        yield, status, category, etc. In the future, this may include
        personalized action recommendations.
      parameters:
        - name: offset
          required: false
          in: query
          description: Offset for pagination
          example: 0
          schema:
            minimum: 0
            default: 0
            type: number
        - name: limit
          required: false
          in: query
          description: Maximum number of items to return
          example: 20
          schema:
            minimum: 1
            maximum: 100
            default: 20
            type: number
        - name: address
          required: true
          in: query
          description: User wallet address to get actions for
          example: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e'
          schema:
            type: string
        - name: status
          required: false
          in: query
          description: Filter actions by status
          schema:
            enum:
              - CANCELED
              - CREATED
              - WAITING_FOR_NEXT
              - PROCESSING
              - FAILED
              - SUCCESS
              - STALE
            type: string
        - name: statuses
          required: false
          in: query
          description: >-
            Filter actions by multiple statuses (supports CSV or repeated query
            params)
          schema:
            type: array
            items:
              type: string
              enum:
                - CANCELED
                - CREATED
                - WAITING_FOR_NEXT
                - PROCESSING
                - FAILED
                - SUCCESS
                - STALE
        - name: intent
          required: false
          in: query
          description: Filter actions by intent
          schema:
            enum:
              - enter
              - exit
              - manage
            type: string
        - name: type
          required: false
          in: query
          description: Filter by action type
          schema:
            enum:
              - STAKE
              - UNSTAKE
              - CLAIM_REWARDS
              - AUTO_SWEEP_UNSTAKE_REWARDS
              - AUTO_SWEEP_WITHDRAW_REWARDS
              - RESTAKE_REWARDS
              - WITHDRAW
              - WITHDRAW_ALL
              - RESTAKE
              - CLAIM_UNSTAKED
              - UNLOCK_LOCKED
              - STAKE_LOCKED
              - VOTE
              - REVOKE
              - VOTE_LOCKED
              - REVOTE
              - REBOND
              - MIGRATE
              - VERIFY_WITHDRAW_CREDENTIALS
              - DELEGATE
            type: string
        - name: yieldId
          required: false
          in: query
          description: Filter actions by specific yield
          example: ethereum-eth-lido-staking
          schema:
            type: string
        - name: network
          required: false
          in: query
          description: Filter by network
          schema:
            enum:
              - ethereum
              - ethereum-goerli
              - ethereum-holesky
              - ethereum-sepolia
              - ethereum-hoodi
              - arbitrum
              - base
              - base-sepolia
              - gnosis
              - optimism
              - polygon
              - polygon-amoy
              - starknet
              - zksync
              - linea
              - unichain
              - monad-testnet
              - monad
              - avalanche-c
              - avalanche-c-atomic
              - avalanche-p
              - binance
              - celo
              - fantom
              - harmony
              - moonriver
              - okc
              - viction
              - core
              - sonic
              - plasma
              - katana
              - hyperevm
              - agoric
              - akash
              - axelar
              - band-protocol
              - bitsong
              - canto
              - chihuahua
              - comdex
              - coreum
              - cosmos
              - crescent
              - cronos
              - cudos
              - desmos
              - dydx
              - evmos
              - fetch-ai
              - gravity-bridge
              - injective
              - irisnet
              - juno
              - kava
              - ki-network
              - mars-protocol
              - nym
              - okex-chain
              - onomy
              - osmosis
              - persistence
              - quicksilver
              - regen
              - secret
              - sentinel
              - sommelier
              - stafi
              - stargaze
              - stride
              - teritori
              - tgrade
              - umee
              - sei
              - mantra
              - celestia
              - saga
              - zetachain
              - dymension
              - humansai
              - neutron
              - polkadot
              - kusama
              - westend
              - bittensor
              - aptos
              - binancebeacon
              - cardano
              - near
              - solana
              - solana-devnet
              - stellar
              - stellar-testnet
              - sui
              - tezos
              - tron
              - ton
              - ton-testnet
              - hyperliquid
            type: string
      responses:
        '200':
          description: Returns a paginated list of user actions
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PaginatedResponseDto'
                  - properties:
                      items:
                        type: array
                        items:
                          $ref: '#/components/schemas/ActionDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Actions
  /v1/actions/{actionId}:
    get:
      operationId: ActionsController_getAction
      summary: Get action details
      description: >-
        Retrieve detailed information about a specific action including current
        status, transactions, and execution details.
      parameters:
        - name: actionId
          required: true
          in: path
          description: The unique identifier of the action
          example: action_123abc
          schema:
            type: string
      responses:
        '200':
          description: Action details retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActionDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: Action not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Actions
  /v1/actions/enter:
    post:
      operationId: ActionsController_enterYield
      summary: Enter a yield
      description: >-
        Generate the transactions needed to enter a yield position with the
        provided parameters.
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateActionDto'
      responses:
        '201':
          description: Returns action with array of transactions to execute
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActionDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '403':
          description: Access denied due to geolocation restrictions
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Access denied from US (US-CA)
                  error:
                    type: string
                    example: Forbidden
                  statusCode:
                    type: number
                    example: 403
        '404':
          description: Yield not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Actions
  /v1/actions/exit:
    post:
      operationId: ActionsController_exitYield
      summary: Exit a yield
      description: >-
        Generate the transactions needed to exit a yield position with the
        provided parameters.
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateActionDto'
      responses:
        '201':
          description: Returns action with array of transactions to execute
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActionDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '403':
          description: Access denied due to geolocation restrictions
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Access denied from US (US-CA)
                  error:
                    type: string
                    example: Forbidden
                  statusCode:
                    type: number
                    example: 403
        '404':
          description: Yield not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Actions
  /v1/actions/manage:
    post:
      operationId: ActionsController_manageYield
      summary: Manage a yield
      description: >-
        Generate the transactions needed to perform management actions on a
        yield position.
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateManageActionDto'
      responses:
        '201':
          description: Returns action with array of transactions to execute
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActionDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '403':
          description: Access denied due to geolocation restrictions
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Access denied from US (US-CA)
                  error:
                    type: string
                    example: Forbidden
                  statusCode:
                    type: number
                    example: 403
        '404':
          description: Yield not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Actions
  /v1/transactions/{transactionId}/submit-hash:
    put:
      operationId: TransactionsController_submitTransactionHash
      summary: Submit transaction hash
      description: >-
        Submit the transaction hash after broadcasting a transaction to the
        blockchain. This updates the transaction status and enables tracking.
      parameters:
        - name: transactionId
          required: true
          in: path
          description: The unique identifier of the transaction
          example: 21f5fd15-cf80-4b9a-804f-062c40dc3740
          schema: {}
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitHashDto'
      responses:
        '200':
          description: Transaction successfully updated with hash
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionDto'
        '400':
          description: Invalid transaction hash format
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: Transaction not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Actions
  /v1/transactions/{transactionId}/submit:
    post:
      operationId: TransactionsController_submitTransaction
      summary: Submit transaction
      description: Submit the transaction to the blockchain.
      parameters:
        - name: transactionId
          required: true
          in: path
          description: The unique identifier of the transaction
          example: 21f5fd15-cf80-4b9a-804f-062c40dc3740
          schema: {}
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitTransactionDto'
      responses:
        '200':
          description: Transaction successfully submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionDto'
        '400':
          description: Invalid transaction format
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: Transaction not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Actions
  /v1/transactions/{transactionId}:
    get:
      operationId: TransactionsController_getTransaction
      summary: Get transaction details
      description: >-
        Retrieve detailed information about a specific transaction including
        current status, hash, and execution details.
      parameters:
        - name: transactionId
          required: true
          in: path
          description: The unique identifier of the transaction
          example: 21f5fd15-cf80-4b9a-804f-062c40dc3740
          schema: {}
      responses:
        '200':
          description: Transaction details retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '404':
          description: Transaction not found with the specified ID
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Actions
  /v1/networks:
    get:
      operationId: NetworksController_getNetworks
      summary: List all available networks
      description: >-
        Retrieve a list of all supported networks that can be used for filtering
        yields and other operations.
      parameters: []
      responses:
        '200':
          description: Returns a list of all available networks
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NetworkDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Discovery
  /v1/providers:
    get:
      operationId: ProvidersController_getProviders
      summary: Get all providers
      description: >-
        Returns a paginated list of all providers, including both protocol and
        validator providers.
      parameters:
        - name: offset
          required: false
          in: query
          description: Offset for pagination
          example: 0
          schema:
            minimum: 0
            default: 0
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page
          example: 20
          schema:
            minimum: 1
            maximum: 100
            default: 20
            type: number
      responses:
        '200':
          description: List of providers
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PaginatedResponseDto'
                  - properties:
                      items:
                        type: array
                        items:
                          $ref: '#/components/schemas/ProviderDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Discovery
  /v1/providers/{providerId}:
    get:
      operationId: ProvidersController_getProvider
      summary: Get provider by ID
      description: Returns detailed information about a specific provider.
      parameters:
        - name: providerId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Provider details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProviderDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation failed
                  error:
                    type: string
                    example: Bad Request
                  statusCode:
                    type: number
                    example: 400
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid API key
                  error:
                    type: string
                    example: Unauthorized
                  statusCode:
                    type: number
                    example: 401
        '429':
          description: Rate limit exceeded
          headers:
            x-ratelimit-limit:
              description: Request limit per window
              schema:
                type: string
            x-ratelimit-remaining:
              description: Remaining requests (will be 0)
              schema:
                type: string
            x-ratelimit-reset:
              description: Unix timestamp when window resets
              schema:
                type: string
            retry-after:
              description: Seconds to wait before retrying
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Rate limit exceeded
                  error:
                    type: string
                    example: Too Many Requests
                  statusCode:
                    type: number
                    example: 429
                  retryAfter:
                    type: number
                    example: 30
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                  error:
                    type: string
                    example: Internal Server Error
                  statusCode:
                    type: number
                    example: 500
      security:
        - ApiKey: []
      tags:
        - Discovery
  /health:
    get:
      operationId: HealthController_health
      summary: Health check
      description: Get the health status of the yield API with current timestamp
      parameters: []
      responses:
        '200':
          description: Health check status with timestamp
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HealthStatusDto'
      tags:
        - Health
info:
  title: Yield.xyz API
  description: API Documentation
  version: '1.0'
  contact: {}
tags:
  - name: Discovery
    description: Browse and discover yield opportunities, networks, and providers
  - name: Portfolio
    description: User-specific balances, activity, and rewards
  - name: Actions
    description: Generate transactions to enter, exit, and manage yields
servers:
  - url: https://api.yield.xyz
    description: Production environment
components:
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: x-api-key
  schemas:
    TokenDto:
      type: object
      properties:
        symbol:
          type: string
          description: Token symbol
          example: ETH
        name:
          type: string
          description: Token name
          example: Ethereum
        decimals:
          type: number
          description: Token decimal places
          example: 18
        network:
          type: string
          description: Token network
          enum:
            - ethereum
            - ethereum-goerli
            - ethereum-holesky
            - ethereum-sepolia
            - ethereum-hoodi
            - arbitrum
            - base
            - base-sepolia
            - gnosis
            - optimism
            - polygon
            - polygon-amoy
            - starknet
            - zksync
            - linea
            - unichain
            - monad-testnet
            - monad
            - avalanche-c
            - avalanche-c-atomic
            - avalanche-p
            - binance
            - celo
            - fantom
            - harmony
            - moonriver
            - okc
            - viction
            - core
            - sonic
            - plasma
            - katana
            - hyperevm
            - 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
            - restaking
            - protocol_incentive
            - campaign_incentive
            - points
            - lending
            - mev
            - real_world_asset_yield
            - vault
          example: protocol_incentive
        description:
          type: string
          description: Optional human-readable description of this reward
          example: LDO distributed to incentivize stETH adoption via Lido Boost
      required:
        - rate
        - rateType
        - token
        - yieldSource
    RewardRateDto:
      type: object
      properties:
        total:
          type: number
          description: Estimated reward rate across all sources (e.g. staking, points)
          example: 6.5
        rateType:
          type: string
          description: Whether this reward rate is APR or APY
          example: APR
        components:
          description: Breakdown of reward rates by source
          type: array
          items:
            $ref: '#/components/schemas/RewardDto'
      required:
        - total
        - rateType
        - components
    YieldStatisticsDto:
      type: object
      properties:
        tvlUsd:
          type: string
          description: Total value locked in USD
          example: 1,200,000
          nullable: true
        tvl:
          type: string
          description: Total value locked in primary underlying token
          example: '500.25'
          nullable: true
        tvlRaw:
          type: string
          description: Raw total value locked (full precision)
          example: '500250000000000000000'
          nullable: true
        uniqueUsers:
          type: number
          description: Number of users with active positions in the yield
          example: 348
          nullable: true
        averagePositionSizeUsd:
          type: string
          description: Average position size in USD
          example: 3,448.27
          nullable: true
        averagePositionSize:
          type: string
          description: Average position size in primary underlying token
          example: '1.44'
          nullable: true
    YieldRiskEntryDto:
      type: object
      properties:
        rating:
          type: string
          description: Provider top-level rating value
          example: AA
        source:
          type: string
          description: Provider source label
          enum:
            - credora
            - exponential
            - stakingRewards
          example: credora
      required:
        - rating
        - source
    YieldRiskSummaryDto:
      type: object
      properties:
        ratings:
          description: Top-level rating entries by provider
          type: array
          items:
            $ref: '#/components/schemas/YieldRiskEntryDto'
      required:
        - ratings
    YieldStatusDto:
      type: object
      properties:
        enter:
          type: boolean
          description: Whether the user can currently enter this yield
          example: true
        exit:
          type: boolean
          description: Whether the user can currently exit this yield
          example: true
      required:
        - enter
        - exit
    ERCStandards:
      type: string
      description: Supported standards for this yield
      enum:
        - ERC20
        - ERC4626
        - ERC721
        - ERC1155
    YieldMetadataDto:
      type: object
      properties:
        name:
          type: string
          description: Display name of the yield opportunity
          example: Lido Staking
        logoURI:
          type: string
          description: Yield opportunity logo URI
          example: https://lido.fi/logo.png
        description:
          type: string
          description: >-
            Markdown-supported short description of this yield opportunity,
            including where rewards come from.
          example: >-
            Stake ETH with Lido to earn auto-compounding validator rewards via
            stETH.
        documentation:
          type: string
          description: Link to documentation or integration guide
          example: https://docs.lido.fi
        underMaintenance:
          type: boolean
          description: Whether this yield is currently under maintenance
          example: false
        deprecated:
          type: boolean
          description: Whether this yield is deprecated and will be discontinued
          example: false
        supportedStandards:
          type: array
          items:
            $ref: '#/components/schemas/ERCStandards'
      required:
        - name
        - logoURI
        - description
        - documentation
        - underMaintenance
        - deprecated
        - supportedStandards
    YieldType:
      type: string
      description: Type of yield mechanism (staking, restaking, LP, vault, etc.)
      enum:
        - staking
        - restaking
        - lending
        - vault
        - fixed_yield
        - real_world_asset
        - concentrated_liquidity_pool
        - liquidity_pool
    RewardSchedule:
      type: string
      description: How often rewards are distributed (e.g. continuously, epoch-based)
      enum:
        - block
        - hour
        - day
        - week
        - month
        - era
        - epoch
        - campaign
    RewardClaiming:
      type: string
      description: 'How rewards are claimed: auto, manual, or mixed'
      enum:
        - auto
        - manual
    TimePeriodDto:
      type: object
      properties:
        seconds:
          type: number
          description: Duration in seconds
          example: 86400
      required:
        - seconds
    YieldFeeDto:
      type: object
      properties:
        deposit:
          type: string
          description: Deposit fee percentage
          example: '0.00'
        withdrawal:
          type: string
          description: Withdrawal fee percentage
          example: '0.00'
        management:
          type: string
          description: Management fee percentage (annual)
          example: '2.00'
        performance:
          type: string
          description: Performance fee percentage
          example: '20.00'
    YieldEntryLimitsDto:
      type: object
      properties:
        minimum:
          type: string
          description: >-
            Minimum amount required to enter this yield in token units (null if
            no minimum)
          example: '0.01'
          nullable: true
        maximum:
          type: string
          description: >-
            Maximum amount allowed to enter this yield in token units (null if
            no limit)
          example: '1000.0'
          nullable: true
      required:
        - minimum
        - maximum
    YieldRequirementsDto:
      type: object
      properties:
        kycRequired:
          type: boolean
          description: Whether off-chain KYC is required before transacting
        kycUrl:
          type: string
          description: Issuer's KYC portal URL
      required:
        - kycRequired
    ArgumentFieldDto:
      type: object
      properties:
        name:
          type: string
          description: Field name
          enum:
            - amount
            - amounts
            - validatorAddress
            - validatorAddresses
            - receiverAddress
            - providerId
            - duration
            - inputToken
            - inputTokenNetwork
            - outputToken
            - outputTokenNetwork
            - subnetId
            - tronResource
            - feeConfigurationId
            - cosmosPubKey
            - tezosPubKey
            - cAddressBech
            - pAddressBech
            - executionMode
            - ledgerWalletApiCompatible
            - useMaxAmount
            - useInstantExecution
            - rangeMin
            - rangeMax
            - percentage
            - tokenId
            - skipPrechecks
            - useMaxAllowance
            - feePayerAddress
          example: amount
        type:
          type: string
          description: Field type
          example: string
          enum:
            - string
            - number
            - address
            - enum
            - boolean
        label:
          type: string
          description: Field label
          example: Amount to Enter
        description:
          type: string
          description: Field description
        required:
          type: boolean
          description: Whether the field is required
          example: true
        options:
          description: Options for enum fields
          example:
            - individual
            - batched
          type: array
          items:
            type: string
        optionsRef:
          type: string
          description: Reference to API endpoint that provides options dynamically
          example: /api/v1/validators?integrationId=eth-lido
        default:
          type: object
          description: Default value for the field
        placeholder:
          type: string
          description: Placeholder text for the field
        minimum:
          type: string
          description: Minimum allowed value for number fields (null if no minimum)
          example: '1.0'
          nullable: true
        maximum:
          type: string
          description: Maximum allowed value for number fields (null if no maximum)
          example: '100.0'
          nullable: true
        isArray:
          type: boolean
          description: Whether the field is an array
          example: false
      required:
        - name
        - type
        - label
    ArgumentSchemaDto:
      type: object
      properties:
        fields:
          description: List of argument fields
          type: array
          items:
            $ref: '#/components/schemas/ArgumentFieldDto'
        notes:
          type: string
          description: Notes or instructions for these arguments
      required:
        - fields
    YieldMechanicsArgumentsDto:
      type: object
      properties:
        enter:
          $ref: '#/components/schemas/ArgumentSchemaDto'
        exit:
          $ref: '#/components/schemas/ArgumentSchemaDto'
        manage:
          type: object
          description: >-
            Manage action schemas. Each yield supports different ActionTypes
            (CLAIM_UNSTAKED, CLAIM_REWARDS, etc.). Keys are ActionTypes enum
            values.
          additionalProperties:
            $ref: '#/components/schemas/ArgumentSchemaDto'
        balance:
          description: >-
            Arguments for the balances endpoint (e.g., alternative addresses,
            chain-specific fields)
          allOf:
            - $ref: '#/components/schemas/ArgumentSchemaDto'
    PossibleFeeTakingMechanismsDto:
      type: object
      properties:
        depositFee:
          type: boolean
          description: User can take (earn) a deposit fee
          example: false
        managementFee:
          type: boolean
          description: User can take (earn) a management fee
          example: false
        performanceFee:
          type: boolean
          description: User can take (earn) a performance fee
          example: false
        validatorRebates:
          type: boolean
          description: User can take (earn) validator rebates
          example: false
      required:
        - depositFee
        - managementFee
        - performanceFee
        - validatorRebates
    YieldMechanicsDto:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/YieldType'
        requiresValidatorSelection:
          type: boolean
          description: Indicates whether this yield requires validator selection
          example: true
        rewardSchedule:
          $ref: '#/components/schemas/RewardSchedule'
        rewardClaiming:
          $ref: '#/components/schemas/RewardClaiming'
        gasFeeToken:
          description: Token used for gas fees (typically native)
          allOf:
            - $ref: '#/components/schemas/TokenDto'
        lockupPeriod:
          description: Lockup period - minimum time before exit can be initiated
          allOf:
            - $ref: '#/components/schemas/TimePeriodDto'
        cooldownPeriod:
          description: Cooldown period required before exit is allowed
          allOf:
            - $ref: '#/components/schemas/TimePeriodDto'
        warmupPeriod:
          description: Warmup period before rewards start accruing
          allOf:
            - $ref: '#/components/schemas/TimePeriodDto'
        fee:
          description: >-
            Fees charged to the user for this yield (e.g., deposit, management,
            performance).
          allOf:
            - $ref: '#/components/schemas/YieldFeeDto'
        entryLimits:
          description: Entry amount limits for this yield
          allOf:
            - $ref: '#/components/schemas/YieldEntryLimitsDto'
        requirements:
          description: Access requirements (e.g. KYC) for this yield
          allOf:
            - $ref: '#/components/schemas/YieldRequirementsDto'
        supportsLedgerWalletApi:
          type: boolean
          description: Supports Ledger Wallet API (connect via Ledger Live)
        extraTransactionFormatsSupported:
          type: array
          description: Additional transaction formats supported (e.g. safe, batch)
          items:
            type: string
            enum:
              - raw
              - default
        arguments:
          description: Arguments required for each action (enter, exit, manage, etc.)
          allOf:
            - $ref: '#/components/schemas/YieldMechanicsArgumentsDto'
        possibleFeeTakingMechanisms:
          description: >-
            Possible fee-taking mechanisms for the user or integrator (i.e.,
            what fees the user/integrator can potentially earn from this yield).
          allOf:
            - $ref: '#/components/schemas/PossibleFeeTakingMechanismsDto'
      required:
        - type
        - rewardSchedule
        - rewardClaiming
        - gasFeeToken
    CuratorDto:
      type: object
      properties:
        name:
          type: object
          description: Curator name
          nullable: true
        description:
          type: object
          description: Curator description
          nullable: true
        logoURI:
          type: object
          description: Curator logo URI
          nullable: true
    PricePerShareStateDto:
      type: object
      properties:
        price:
          type: number
          description: >-
            Price per share for the yield (e.g., LP token price, vault share
            price)
          example: 1.05
        shareToken:
          description: Share token (the token you own shares of)
          allOf:
            - $ref: '#/components/schemas/TokenDto'
        quoteToken:
          description: Quote token (the token the price is denominated in)
          allOf:
            - $ref: '#/components/schemas/TokenDto'
      required:
        - price
        - shareToken
        - quoteToken
    ConcentratedLiquidityPoolStateDto:
      type: object
      properties:
        baseApr:
          type: number
          description: Full-range trading APR (24h or rolling)
          example: 0.12
        price:
          type: number
          description: Current mid-price from the AMM (token1 per token0)
          example: 3950.42
        tickSpacing:
          type: number
          description: Tick spacing required so UI can snap ranges
          example: 50
        minTick:
          type: number
          description: Minimum tick bound for the pool
          example: -887272
        maxTick:
          type: number
          description: Maximum tick bound for the pool
          example: 887272
        volume24hUsd:
          type: number
          description: 24-hour trading volume in USD
          example: 149550871.99
          nullable: true
        fee24hUsd:
          type: number
          description: 24-hour fees earned by LPs in USD
          example: 14955.09
          nullable: true
        tvlUsd:
          type: number
          description: Total value locked in USD
          example: 9213550.2
          nullable: true
        feeTier:
          type: number
          description: Pool fee tier as a decimal (e.g., 0.0005 for 0.05%)
          example: 0.0005
        baseToken:
          description: Base token (token0)
          allOf:
            - $ref: '#/components/schemas/TokenDto'
        quoteToken:
          description: Quote token (token1)
          allOf:
            - $ref: '#/components/schemas/TokenDto'
      required:
        - baseApr
        - price
        - tickSpacing
        - minTick
        - maxTick
        - volume24hUsd
        - fee24hUsd
        - tvlUsd
        - feeTier
        - baseToken
        - quoteToken
    CapacityDto:
      type: object
      properties:
        current:
          type: string
          description: Current total assets in the yield
        max:
          type: string
          nullable: true
          description: Maximum capacity of the yield
        remaining:
          type: string
          nullable: true
          description: Remaining capacity available for deposits
      required:
        - current
    LiquidityStateDto:
      type: object
      properties:
        liquidity:
          type: object
          description: Available liquidity in underlying token units
          example: '250000.00'
          nullable: true
        utilization:
          type: object
          description: Utilization rate as a decimal (e.g., 0.8 = 80%)
          example: '0.80'
          nullable: true
    AllocationRewardRateDto:
      type: object
      properties:
        total:
          type: number
          description: Total reward rate
          example: 5.25
        rateType:
          type: string
          description: Whether this rate is APR or APY
          example: APY
      required:
        - total
        - rateType
    AllocationDto:
      type: object
      properties:
        address:
          type: string
          description: Contract address of the underlying strategy
          example: '0x1234567890abcdef1234567890abcdef12345678'
        network:
          type: string
          description: Network the underlying strategy is on
          enum:
            - ethereum
            - ethereum-goerli
            - ethereum-holesky
            - ethereum-sepolia
            - ethereum-hoodi
            - arbitrum
            - base
            - base-sepolia
            - gnosis
            - optimism
            - polygon
            - polygon-amoy
            - starknet
            - zksync
            - linea
            - unichain
            - monad-testnet
            - monad
            - avalanche-c
            - avalanche-c-atomic
            - avalanche-p
            - binance
            - celo
            - fantom
            - harmony
            - moonriver
            - okc
            - viction
            - core
            - sonic
            - plasma
            - katana
            - hyperevm
            - agoric
            - akash
            - axelar
            - band-protocol
            - bitsong
            - canto
            - chihuahua
            - comdex
            - coreum
            - cosmos
            - crescent
            - cronos
            - cudos
            - desmos
            - dydx
            - evmos
            - fetch-ai
            - gravity-bridge
            - injective
            - irisnet
            - juno
            - kava
            - ki-network
            - mars-protocol
            - nym
            - okex-chain
            - onomy
            - osmosis
            - persistence
            - quicksilver
            - regen
            - secret
            - sentinel
            - sommelier
            - stafi
            - stargaze
            - stride
            - teritori
            - tgrade
            - umee
            - sei
            - mantra
            - celestia
            - saga
            - zetachain
            - dymension
            - humansai
            - neutron
            - polkadot
            - kusama
            - westend
            - bittensor
            - aptos
            - binancebeacon
            - cardano
            - near
            - solana
            - solana-devnet
            - stellar
            - stellar-testnet
            - sui
            - tezos
            - tron
            - ton
            - ton-testnet
            - hyperliquid
          example: base
        name:
          type: string
          description: Display name of the underlying strategy
          example: Morpho Moonwell USDC
        yieldId:
          type: string
          description: >-
            Yield ID if this strategy is supported as a separate yield
            opportunity
          example: base-usdc-morpho-moonwell-usdc
        providerId:
          type: string
          description: Provider ID for this strategy (e.g., morpho, aave, lido)
          example: morpho
        allocation:
          type: string
          description: Amount allocated to this strategy in input token units
          example: '50000.00'
        allocationUsd:
          type: string
          description: USD value of the allocation
          example: '50000.00'
          nullable: true
        weight:
          type: number
          description: Current weight of this strategy as a percentage (0-100)
          example: 50.5
        targetWeight:
          type: number
          description: Target weight of this strategy as a percentage (0-100)
          example: 50
        rewardRate:
          description: Reward rate of the underlying strategy
          nullable: true
          allOf:
            - $ref: '#/components/schemas/AllocationRewardRateDto'
        tvl:
          type: string
          description: Total value locked in the underlying strategy in input token units
          example: '500.25'
          nullable: true
        tvlUsd:
          type: string
          description: Total value locked in USD for the underlying strategy
          example: '10000000.00'
          nullable: true
        maxCapacity:
          type: string
          description: Maximum capacity of the underlying strategy
          example: '1000000.00'
          nullable: true
        remainingCapacity:
          type: string
          description: Remaining capacity in the underlying strategy
          example: '500000.00'
          nullable: true
      required:
        - address
        - network
        - name
        - allocation
        - allocationUsd
        - weight
        - targetWeight
        - rewardRate
        - tvl
        - tvlUsd
        - maxCapacity
        - remainingCapacity
    YieldStateDto:
      type: object
      properties:
        pricePerShareState:
          description: Price per share state metadata
          allOf:
            - $ref: '#/components/schemas/PricePerShareStateDto'
        concentratedLiquidityPoolState:
          description: Concentrated liquidity pool state metadata
          allOf:
            - $ref: '#/components/schemas/ConcentratedLiquidityPoolStateDto'
        capacityState:
          description: Capacity state metadata
          allOf:
            - $ref: '#/components/schemas/CapacityDto'
        liquidityState:
          description: Liquidity state (available liquidity, utilization rate)
          allOf:
            - $ref: '#/components/schemas/LiquidityStateDto'
        allocations:
          description: >-
            Allocations to underlying strategies for vault yields (e.g., OAV,
            Morpho). Includes allocation, APY, TVL, and capacity per strategy.
          type: array
          items:
            $ref: '#/components/schemas/AllocationDto'
    YieldDto:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for this yield opportunity
          example: ethereum-eth-lido-staking
        network:
          type: string
          description: Network this yield opportunity is on
          enum:
            - ethereum
            - ethereum-goerli
            - ethereum-holesky
            - ethereum-sepolia
            - ethereum-hoodi
            - arbitrum
            - base
            - base-sepolia
            - gnosis
            - optimism
            - polygon
            - polygon-amoy
            - starknet
            - zksync
            - linea
            - unichain
            - monad-testnet
            - monad
            - avalanche-c
            - avalanche-c-atomic
            - avalanche-p
            - binance
            - celo
            - fantom
            - harmony
            - moonriver
            - okc
            - viction
            - core
            - sonic
            - plasma
            - katana
            - hyperevm
            - agoric
            - akash
            - axelar
            - band-protocol
            - bitsong
            - canto
            - chihuahua
            - comdex
            - coreum
            - cosmos
            - crescent
            - cronos
            - cudos
            - desmos
            - dydx
            - evmos
            - fetch-ai
            - gravity-bridge
            - injective
            - irisnet
            - juno
            - kava
            - ki-network
            - mars-protocol
            - nym
            - okex-chain
            - onomy
            - osmosis
            - persistence
            - quicksilver
            - regen
            - secret
            - sentinel
            - sommelier
            - stafi
            - stargaze
            - stride
            - teritori
            - tgrade
            - umee
            - sei
            - mantra
            - celestia
            - saga
            - zetachain
            - dymension
            - humansai
            - neutron
            - polkadot
            - kusama
            - westend
            - bittensor
            - aptos
            - binancebeacon
            - cardano
            - near
            - solana
            - solana-devnet
            - stellar
            - stellar-testnet
            - sui
            - tezos
            - tron
            - ton
            - ton-testnet
            - hyperliquid
        chainId:
          type: string
          description: EVM chain ID for this network (only for EVM networks)
          example: '1'
        inputTokens:
          description: Accepted input tokens (auto-converted as needed)
          type: array
          items:
            $ref: '#/components/schemas/TokenDto'
        outputToken:
          description: Token received from the protocol
          allOf:
            - $ref: '#/components/schemas/TokenDto'
        token:
          description: Canonical deposit token - used for balances
          allOf:
            - $ref: '#/components/schemas/TokenDto'
        tokens:
          description: Canonical deposit tokens - used for balances
          type: array
          items:
            $ref: '#/components/schemas/TokenDto'
        rewardRate:
          description: Total effective yield broken down by source and token.
          allOf:
            - $ref: '#/components/schemas/RewardRateDto'
        statistics:
          description: Key statistics and analytics for this yield opportunity
          allOf:
            - $ref: '#/components/schemas/YieldStatisticsDto'
        risk:
          description: Top-level provider risk ratings for this yield.
          allOf:
            - $ref: '#/components/schemas/YieldRiskSummaryDto'
        status:
          description: Current availability of user actions like enter, exit, claim
          allOf:
            - $ref: '#/components/schemas/YieldStatusDto'
        metadata:
          description: >-
            Descriptive metadata including name, logo, description, and
            documentation
          allOf:
            - $ref: '#/components/schemas/YieldMetadataDto'
        mechanics:
          description: Operational mechanics including constraints, fees, and capabilities
          allOf:
            - $ref: '#/components/schemas/YieldMechanicsDto'
        providerId:
          type: string
          description: The provider ID this yield belongs to
          example: lido
        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'
      required:
        - id
        - network
        - inputTokens
        - token
        - tokens
        - rewardRate
        - status
        - metadata
        - mechanics
        - providerId
    BalanceType:
      type: string
      description: Type of balance
      enum:
        - active
        - entering
        - exiting
        - withdrawable
        - claimable
        - locked
    PendingActionDto:
      type: object
      properties:
        intent:
          type: string
          description: High-level action intent
          enum:
            - enter
            - manage
            - exit
          example: manage
        type:
          type: string
          description: Specific action type
          enum:
            - STAKE
            - UNSTAKE
            - CLAIM_REWARDS
            - AUTO_SWEEP_UNSTAKE_REWARDS
            - AUTO_SWEEP_WITHDRAW_REWARDS
            - RESTAKE_REWARDS
            - WITHDRAW
            - WITHDRAW_ALL
            - RESTAKE
            - CLAIM_UNSTAKED
            - UNLOCK_LOCKED
            - STAKE_LOCKED
            - VOTE
            - REVOKE
            - VOTE_LOCKED
            - REVOTE
            - REBOND
            - MIGRATE
            - VERIFY_WITHDRAW_CREDENTIALS
            - DELEGATE
          example: CLAIM_REWARDS
        passthrough:
          type: string
          description: >-
            Server-generated passthrough that must be included when executing
            the action
          example: eyJhZGRyZXNzZXMiOnsiYWRkcmVzcyI6ImNvc21vczF5ZXk...
        arguments:
          description: Argument schema required to execute this action
          nullable: true
          allOf:
            - $ref: '#/components/schemas/ArgumentSchemaDto'
        amount:
          type: string
          description: >-
            Amount involved in the action, in human-readable token units (not
            the smallest denomination).
          example: '0.1'
          nullable: true
      required:
        - intent
        - type
        - passthrough
    RevShareDetailsDto:
      type: object
      properties:
        minRevShare:
          type: number
          description: Minimum revenue share percentage (0-1)
          example: 0.3
        maxRevShare:
          type: number
          description: Maximum revenue share percentage (0-1)
          example: 0.7
      required:
        - minRevShare
        - maxRevShare
    RevShareTiersDto:
      type: object
      properties:
        trial:
          description: Trial tier revenue share details
          allOf:
            - $ref: '#/components/schemas/RevShareDetailsDto'
        standard:
          description: Standard tier revenue share details
          allOf:
            - $ref: '#/components/schemas/RevShareDetailsDto'
        pro:
          description: Pro tier revenue share details
          allOf:
            - $ref: '#/components/schemas/RevShareDetailsDto'
    ValidatorProviderDto:
      type: object
      properties:
        name:
          type: string
          description: Provider name
          example: Morpho
        id:
          type: string
          description: Provider ID
          example: morpho
        logoURI:
          type: string
          description: Provider logo URI
          example: https://morpho.xyz/logo.png
        description:
          type: string
          description: Short description of the provider
          example: A peer-to-peer DeFi lending protocol
        website:
          type: string
          description: Provider website
          example: https://morpho.xyz
        tvlUsd:
          type: object
          description: Total TVL across the entire provider in USD
          example: 10,200,000
          nullable: true
        type:
          type: string
          description: Type of provider (protocol or validator provider)
          enum:
            - protocol
            - validator_provider
          example: protocol
        references:
          description: Optional social/media references or audit links
          nullable: true
          type: array
          items:
            type: string
        rank:
          type: number
          description: Provider ranking (lower numbers indicate higher preference)
          example: 1
        preferred:
          type: boolean
          description: Whether this provider is marked as preferred
          example: true
        revshare:
          description: Revenue sharing details by tier
          example:
            standard:
              minRevShare: 0.3
              maxRevShare: 0.7
            pro:
              minRevShare: 0.4
              maxRevShare: 0.8
          allOf:
            - $ref: '#/components/schemas/RevShareTiersDto'
        uniqueId:
          type: string
          description: Provider ID (deprecated, use `id` instead)
          example: luganodes
          deprecated: true
        createdAt:
          format: date-time
          type: string
          description: Creation timestamp (deprecated)
          deprecated: true
        updatedAt:
          format: date-time
          type: string
          description: Last update timestamp (deprecated)
          deprecated: true
      required:
        - name
        - id
        - logoURI
        - description
        - website
        - tvlUsd
        - type
        - rank
        - preferred
    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
        pricePerShare:
          type: string
          description: Price per share of the validator
          example: '1.0'
        subnetId:
          type: number
          description: Subnet ID
          example: 1
        subnetName:
          type: string
          description: Subnet name
          example: Apex
        marketCap:
          type: string
          description: Market cap of the subnet
          example: '1000000'
        tokenSymbol:
          type: string
          description: Token symbol of the subnet
          example: α
      required:
        - address
    BalanceDto:
      type: object
      properties:
        address:
          type: string
          description: User wallet address that owns this balance
          example: 0x1234...
        type:
          $ref: '#/components/schemas/BalanceType'
        amount:
          type: string
          description: Balance amount in underlying token
          example: '2.625'
        amountRaw:
          type: string
          description: Raw balance amount (full precision)
          example: '2625000000000000000'
        date:
          format: date-time
          type: string
          description: Date relevant to this balance state
          nullable: true
          example: '2025-04-23T08:00:00Z'
        feeConfigurationId:
          type: string
          description: Fee configuration ID (if applicable)
          example: fee-config-1
        pendingActions:
          description: Pending actions for this balance
          type: array
          items:
            $ref: '#/components/schemas/PendingActionDto'
        token:
          description: Token used for balance amounts
          allOf:
            - $ref: '#/components/schemas/TokenDto'
        validator:
          description: Validator information (if applicable)
          nullable: true
          allOf:
            - $ref: '#/components/schemas/ValidatorDto'
        validators:
          description: >-
            Multiple validators information (when balance is distributed across
            multiple validators)
          nullable: true
          type: array
          items:
            $ref: '#/components/schemas/ValidatorDto'
        amountUsd:
          type: string
          description: Value of the balance in USD
          example: 2,500.00
          nullable: true
        isEarning:
          type: boolean
          description: Whether this balance is currently earning rewards
          example: true
        priceRange:
          type: object
          description: >-
            Price range for concentrated liquidity positions in
            tokens[1]/tokens[0] format (e.g., if tokens[0]=WETH and
            tokens[1]=USDC, then priceRange represents USDC/WETH)
          example:
            min: '2700'
            max: '3310'
        tokenId:
          type: string
          description: >-
            NFT token ID for liquidity positions (e.g., PancakeSwap V3 position
            NFT ID)
          example: '12345'
        shareAmount:
          type: string
          description: Share balance in human-readable format
          example: '1.5'
        shareAmountRaw:
          type: string
          description: Share balance in full precision (smallest unit)
          example: '1500000000000000000'
        shareToken:
          description: >-
            The share token that shareAmount and shareAmountRaw are denominated
            in
          allOf:
            - $ref: '#/components/schemas/TokenDto'
      required:
        - address
        - type
        - amount
        - amountRaw
        - pendingActions
        - token
        - isEarning
    YieldBalancesDto:
      type: object
      properties:
        yieldId:
          type: string
          description: Unique identifier of the yield
          example: ethereum-eth-lido-staking
        balances:
          description: List of balances for this yield
          type: array
          items:
            $ref: '#/components/schemas/BalanceDto'
        outputTokenBalance:
          description: Balance for the output token
          nullable: true
          allOf:
            - $ref: '#/components/schemas/BalanceDto'
        rewardRate:
          description: Personalized reward rate breakdown for this balance position
          nullable: true
          allOf:
            - $ref: '#/components/schemas/RewardRateDto'
      required:
        - yieldId
        - balances
    YieldErrorDto:
      type: object
      properties:
        yieldId:
          type: string
          description: Unique identifier of the yield that failed
          example: ethereum-compound-usdc
        error:
          type: string
          description: Error message describing what went wrong
          example: 'Failed to fetch data from blockchain: RPC timeout'
      required:
        - yieldId
        - error
    BalancesResponseDto:
      type: object
      properties:
        items:
          description: Successful yield balance results
          type: array
          items:
            $ref: '#/components/schemas/YieldBalancesDto'
        errors:
          description: Errors encountered while fetching balances
          type: array
          items:
            $ref: '#/components/schemas/YieldErrorDto'
      required:
        - items
        - errors
    Networks:
      type: string
      description: Network for this address
      enum:
        - ethereum
        - ethereum-goerli
        - ethereum-holesky
        - ethereum-sepolia
        - ethereum-hoodi
        - arbitrum
        - base
        - base-sepolia
        - gnosis
        - optimism
        - polygon
        - polygon-amoy
        - starknet
        - zksync
        - linea
        - unichain
        - monad-testnet
        - monad
        - avalanche-c
        - avalanche-c-atomic
        - avalanche-p
        - binance
        - celo
        - fantom
        - harmony
        - moonriver
        - okc
        - viction
        - core
        - sonic
        - plasma
        - katana
        - hyperevm
        - agoric
        - akash
        - axelar
        - band-protocol
        - bitsong
        - canto
        - chihuahua
        - comdex
        - coreum
        - cosmos
        - crescent
        - cronos
        - cudos
        - desmos
        - dydx
        - evmos
        - fetch-ai
        - gravity-bridge
        - injective
        - irisnet
        - juno
        - kava
        - ki-network
        - mars-protocol
        - nym
        - okex-chain
        - onomy
        - osmosis
        - persistence
        - quicksilver
        - regen
        - secret
        - sentinel
        - sommelier
        - stafi
        - stargaze
        - stride
        - teritori
        - tgrade
        - umee
        - sei
        - mantra
        - celestia
        - saga
        - zetachain
        - dymension
        - humansai
        - neutron
        - polkadot
        - kusama
        - westend
        - bittensor
        - aptos
        - binancebeacon
        - cardano
        - near
        - solana
        - solana-devnet
        - stellar
        - stellar-testnet
        - sui
        - tezos
        - tron
        - ton
        - ton-testnet
        - hyperliquid
    GetBalancesArgumentsDto:
      type: object
      properties:
        cAddressBech:
          type: string
          description: Avalanche C-chain address
          example: 0x123...
        pAddressBech:
          type: string
          description: Avalanche P-chain address
          example: P-avax1...
        autoSweepDayOfMonth:
          type: number
          description: >-
            Day of month when auto-sweep window starts (used by Solana
            auto-sweep balance actions)
          example: 20
          minimum: 1
          maximum: 31
        autoSweepTimezone:
          type: string
          description: >-
            IANA timezone used to evaluate auto-sweep window day (e.g.
            Europe/London)
          example: Europe/London
    BalancesQueryDto:
      type: object
      properties:
        yieldId:
          type: string
          description: The unique identifier of the yield (optional for chain scanning)
          example: ethereum-eth-lido-staking
        address:
          type: string
          description: User wallet address to check balances for
          example: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e'
        network:
          example: ethereum
          $ref: '#/components/schemas/Networks'
        arguments:
          description: Arguments for balance queries
          allOf:
            - $ref: '#/components/schemas/GetBalancesArgumentsDto'
      required:
        - address
        - network
    BalancesRequestDto:
      type: object
      properties:
        queries:
          description: Array of balance queries (maximum 25 queries per request)
          minItems: 1
          maxItems: 25
          example:
            - yieldId: ethereum-eth-lido-staking
              address: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e'
              network: ethereum
          type: array
          items:
            $ref: '#/components/schemas/BalancesQueryDto'
      required:
        - queries
    YieldBalancesRequestDto:
      type: object
      properties:
        address:
          type: string
          description: User wallet address to check balances for
          example: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e'
        arguments:
          description: Optional arguments for advanced or protocol-specific balance queries
          allOf:
            - $ref: '#/components/schemas/GetBalancesArgumentsDto'
      required:
        - address
    ValidatorQueryDto:
      type: object
      properties:
        offset:
          type: number
          description: Offset for pagination
          default: 0
          minimum: 0
          example: 0
        limit:
          type: number
          description: Maximum number of items to return
          default: 20
          minimum: 1
          maximum: 100
          example: 20
        name:
          type: string
          description: Filter by validator name (case-insensitive, partial match)
        address:
          type: string
          description: Filter by validator address
        provider:
          type: string
          description: Filter by provider ID
        status:
          type: string
          description: Filter by validator status
        preferred:
          type: boolean
          description: Filter by preferred flag
    TransactionDto:
      type: object
      properties:
        id:
          type: string
          description: Unique transaction identifier
          example: tx_123abc
        title:
          type: string
          description: Display title for the transaction
          example: Approve USDC
        network:
          type: string
          description: Network this transaction is for
          enum:
            - ethereum
            - ethereum-goerli
            - ethereum-holesky
            - ethereum-sepolia
            - ethereum-hoodi
            - arbitrum
            - base
            - base-sepolia
            - gnosis
            - optimism
            - polygon
            - polygon-amoy
            - starknet
            - zksync
            - linea
            - unichain
            - monad-testnet
            - monad
            - avalanche-c
            - avalanche-c-atomic
            - avalanche-p
            - binance
            - celo
            - fantom
            - harmony
            - moonriver
            - okc
            - viction
            - core
            - sonic
            - plasma
            - katana
            - hyperevm
            - 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
            - CLAIM_UNSTAKED
            - CLAIM_REWARDS
            - RESTAKE_REWARDS
            - UNSTAKE
            - SPLIT
            - MERGE
            - LOCK
            - UNLOCK
            - SUPPLY
            - ADD_LIQUIDITY
            - REMOVE_LIQUIDITY
            - BRIDGE
            - VOTE
            - REVOKE
            - RESTAKE
            - REBOND
            - WITHDRAW
            - WITHDRAW_ALL
            - CREATE_ACCOUNT
            - REVEAL
            - MIGRATE
            - DELEGATE
            - UNDELEGATE
            - UTXO_P_TO_C_IMPORT
            - UTXO_C_TO_P_IMPORT
            - WRAP
            - UNWRAP
            - UNFREEZE_LEGACY
            - UNFREEZE_LEGACY_BANDWIDTH
            - UNFREEZE_LEGACY_ENERGY
            - UNFREEZE_BANDWIDTH
            - UNFREEZE_ENERGY
            - FREEZE_BANDWIDTH
            - FREEZE_ENERGY
            - UNDELEGATE_BANDWIDTH
            - UNDELEGATE_ENERGY
            - P2P_NODE_REQUEST
            - CREATE_EIGENPOD
            - VERIFY_WITHDRAW_CREDENTIALS
            - START_CHECKPOINT
            - VERIFY_CHECKPOINT_PROOFS
            - QUEUE_WITHDRAWALS
            - COMPLETE_QUEUED_WITHDRAWALS
            - LZ_DEPOSIT
            - LZ_WITHDRAW
            - LUGANODES_PROVISION
            - LUGANODES_EXIT_REQUEST
            - INFSTONES_PROVISION
            - INFSTONES_EXIT_REQUEST
            - INFSTONES_CLAIM_REQUEST
            - BATCH
          example: STAKE
        hash:
          type: string
          description: Transaction hash (available after broadcast)
          nullable: true
          example: 0x1234567890abcdef...
        createdAt:
          format: date-time
          type: string
          description: When the transaction was created
        broadcastedAt:
          format: date-time
          type: string
          description: When the transaction was broadcasted to the network
          nullable: true
        signedTransaction:
          type: string
          description: Signed transaction data (ready for broadcast)
          nullable: true
        unsignedTransaction:
          description: The unsigned transaction data to be signed by the wallet
          oneOf:
            - type: string
              description: Serialized transaction data
            - type: object
              description: Transaction object (for non-EVM chains)
          nullable: true
          example: >-
            0x02f87082012a022f2f83018000947a250d5630b4cf539739df2c5dacb4c659f2488d880de0b6b3a764000080c080a0ef0de6c7b46fc75dd6cb86dccc3cfd731c2bdf6f3d736557240c3646c6fe01a6a07cd60b58dfe01847249dfdd7950ba0d045dded5bbe410b07a015a0ed34e5e00d
        annotatedTransaction:
          type: object
          description: Human-readable breakdown of the transaction for display purposes
          nullable: true
          example:
            method: stake
            inputs:
              amount: '1000000000000000000'
        structuredTransaction:
          type: object
          description: Detailed transaction data for client-side validation or simulation
          nullable: true
        stepIndex:
          type: number
          description: Zero-based index of the step in the action flow
          example: 0
        description:
          type: string
          description: User-friendly description of what this transaction does
          example: Approve USDC for staking
        error:
          type: string
          description: Error message if the transaction failed
          nullable: true
        gasEstimate:
          type: string
          description: Estimated gas cost for the transaction
          example: '21000'
        explorerUrl:
          type: string
          description: Link to the blockchain explorer for this transaction
          nullable: true
          example: https://etherscan.io/tx/0x1234...
        isMessage:
          type: boolean
          description: Whether this transaction is a message rather than a value transfer
          example: false
      required:
        - id
        - title
        - network
        - status
        - type
        - hash
        - createdAt
        - broadcastedAt
        - signedTransaction
        - unsignedTransaction
    ActionArgumentsDto:
      type: object
      properties:
        amount:
          type: string
          description: >-
            Amount in human-readable token units, not the smallest denomination.
            For example, "1.500000" for 1.5 USDC (6 decimals) or "0.01" for 0.01
            ETH (18 decimals). Precision up to the token's decimal places is
            supported.
          example: '1.500000'
        amounts:
          description: >-
            Amounts in human-readable token units, not the smallest
            denomination. Precision up to the token's decimal places is
            supported.
          example:
            - '1.500000'
            - '2.000000'
          type: array
          items:
            type: string
        validatorAddress:
          type: string
          description: Validator address for single validator selection
          example: cosmosvaloper1...
        validatorAddresses:
          description: Multiple validator addresses
          example:
            - cosmosvaloper1...
            - cosmosvaloper2...
          type: array
          items:
            type: string
        providerId:
          type: string
          description: Provider ID for Ethereum native staking
          example: kiln
        duration:
          type: number
          description: Duration for Avalanche native staking (in seconds)
          example: 1209600
        inputToken:
          type: string
          description: >-
            Token for deposits. Use "0x" for native token or provide the token
            address. For cross-chain deposits, also provide inputTokenNetwork.
          example: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
        inputTokenNetwork:
          type: string
          description: >-
            Network for the input token. Required for cross-chain deposits when
            the token is on a different network than the vault.
          enum:
            - ethereum
            - ethereum-goerli
            - ethereum-holesky
            - ethereum-sepolia
            - ethereum-hoodi
            - arbitrum
            - base
            - base-sepolia
            - gnosis
            - optimism
            - polygon
            - polygon-amoy
            - starknet
            - zksync
            - linea
            - unichain
            - monad-testnet
            - monad
            - avalanche-c
            - avalanche-c-atomic
            - avalanche-p
            - binance
            - celo
            - fantom
            - harmony
            - moonriver
            - okc
            - viction
            - core
            - sonic
            - plasma
            - katana
            - hyperevm
            - agoric
            - akash
            - axelar
            - band-protocol
            - bitsong
            - canto
            - chihuahua
            - comdex
            - coreum
            - cosmos
            - crescent
            - cronos
            - cudos
            - desmos
            - dydx
            - evmos
            - fetch-ai
            - gravity-bridge
            - injective
            - irisnet
            - juno
            - kava
            - ki-network
            - mars-protocol
            - nym
            - okex-chain
            - onomy
            - osmosis
            - persistence
            - quicksilver
            - regen
            - secret
            - sentinel
            - sommelier
            - stafi
            - stargaze
            - stride
            - teritori
            - tgrade
            - umee
            - sei
            - mantra
            - celestia
            - saga
            - zetachain
            - dymension
            - humansai
            - neutron
            - polkadot
            - kusama
            - westend
            - bittensor
            - aptos
            - binancebeacon
            - cardano
            - near
            - solana
            - solana-devnet
            - stellar
            - stellar-testnet
            - sui
            - tezos
            - tron
            - ton
            - ton-testnet
            - hyperliquid
        outputToken:
          type: string
          description: >-
            Token for withdrawals. Use "0x" for native token or provide the
            token address. For cross-chain withdrawals, also provide
            outputTokenNetwork.
          example: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
        outputTokenNetwork:
          type: string
          description: >-
            Network for the output token. Required for cross-chain withdrawals
            when the destination is on a different network than the vault.
          enum:
            - ethereum
            - ethereum-goerli
            - ethereum-holesky
            - ethereum-sepolia
            - ethereum-hoodi
            - arbitrum
            - base
            - base-sepolia
            - gnosis
            - optimism
            - polygon
            - polygon-amoy
            - starknet
            - zksync
            - linea
            - unichain
            - monad-testnet
            - monad
            - avalanche-c
            - avalanche-c-atomic
            - avalanche-p
            - binance
            - celo
            - fantom
            - harmony
            - moonriver
            - okc
            - viction
            - core
            - sonic
            - plasma
            - katana
            - hyperevm
            - 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
        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
            - CLAIM_REWARDS
            - AUTO_SWEEP_UNSTAKE_REWARDS
            - AUTO_SWEEP_WITHDRAW_REWARDS
            - RESTAKE_REWARDS
            - WITHDRAW
            - WITHDRAW_ALL
            - RESTAKE
            - CLAIM_UNSTAKED
            - UNLOCK_LOCKED
            - STAKE_LOCKED
            - VOTE
            - REVOKE
            - VOTE_LOCKED
            - REVOTE
            - REBOND
            - MIGRATE
            - VERIFY_WITHDRAW_CREDENTIALS
            - DELEGATE
          example: CLAIM_REWARDS
        yieldId:
          type: string
          description: Yield ID this action belongs to
          example: ethereum-eth-lido-staking
        address:
          type: string
          description: User wallet address
          example: 0x1234...
        amount:
          type: string
          description: >-
            Amount involved in the action, in human-readable token units (not
            the smallest denomination).
          example: '1.0'
          nullable: true
        amountRaw:
          type: string
          description: Raw smallest-denomination amount (full precision)
          example: '1000000000000000000'
          nullable: true
        amountUsd:
          type: string
          description: USD value of the amount
          example: '1500.50'
          nullable: true
        transactions:
          description: Array of transactions for this action
          type: array
          items:
            $ref: '#/components/schemas/TransactionDto'
        executionPattern:
          type: string
          description: >-
            Transaction execution pattern - synchronous (submit one by one, wait
            for each), asynchronous (submit all at once), or batch (single
            transaction with multiple operations)
          enum:
            - synchronous
            - asynchronous
            - batch
          example: synchronous
        rawArguments:
          description: Raw arguments exactly as submitted by the user for this action
          nullable: true
          allOf:
            - $ref: '#/components/schemas/ActionArgumentsDto'
        createdAt:
          format: date-time
          type: string
          description: When the action was created
        completedAt:
          format: date-time
          type: string
          description: When the action was completed
          nullable: true
        status:
          type: string
          description: Current status of the action
          enum:
            - CANCELED
            - CREATED
            - WAITING_FOR_NEXT
            - PROCESSING
            - FAILED
            - SUCCESS
            - STALE
      required:
        - id
        - intent
        - type
        - yieldId
        - address
        - amount
        - amountRaw
        - amountUsd
        - transactions
        - executionPattern
        - rawArguments
        - createdAt
        - completedAt
        - status
    PaginatedResponseDto:
      type: object
      properties:
        total:
          type: number
          description: Total number of items available
          example: 100
        offset:
          type: number
          description: Offset of the current page
          example: 0
        limit:
          type: number
          description: Limit of the current page
          example: 20
      required:
        - total
        - offset
        - limit
    YieldQueryDto:
      type: object
      properties:
        offset:
          type: number
          description: Offset for pagination
          default: 0
          minimum: 0
          example: 0
        limit:
          type: number
          description: Maximum number of items to return
          default: 20
          minimum: 1
          maximum: 100
          example: 20
        network:
          type: string
          description: Filter by network
          enum:
            - ethereum
            - ethereum-goerli
            - ethereum-holesky
            - ethereum-sepolia
            - ethereum-hoodi
            - arbitrum
            - base
            - base-sepolia
            - gnosis
            - optimism
            - polygon
            - polygon-amoy
            - starknet
            - zksync
            - linea
            - unichain
            - monad-testnet
            - monad
            - avalanche-c
            - avalanche-c-atomic
            - avalanche-p
            - binance
            - celo
            - fantom
            - harmony
            - moonriver
            - okc
            - viction
            - core
            - sonic
            - plasma
            - katana
            - hyperevm
            - 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
        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
        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
        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
    YieldRiskExponentialDto:
      type: object
      properties:
        poolRating:
          type: object
          description: Exponential pool rating
        poolScore:
          type: object
          description: Exponential pool score (1-5)
        ratingDescription:
          type: object
          description: Exponential rating description
        url:
          type: object
          description: Exponential pool URL
    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)
        exponentialFi:
          $ref: '#/components/schemas/YieldRiskExponentialDto'
        credora:
          $ref: '#/components/schemas/YieldRiskCredoraDto'
        stakingRewards:
          $ref: '#/components/schemas/YieldRiskStakingRewardsDto'
      required:
        - updatedAt
    BalanceHistorySnapshotDto:
      type: object
      properties:
        timestamp:
          type: string
          description: Timestamp of this snapshot (ISO 8601)
          example: '2025-07-12T00:00:00.000Z'
        blockNumber:
          type: number
          description: Block number closest to this snapshot
          example: 20540000
        yieldId:
          type: string
          description: Unique identifier of the yield
          example: ethereum-eth-lido-staking
        balances:
          description: Balance entries at this point in time
          type: array
          items:
            $ref: '#/components/schemas/BalanceDto'
      required:
        - timestamp
        - blockNumber
        - yieldId
        - balances
    RewardEventDto:
      type: object
      properties:
        timestamp:
          type: string
          description: Timestamp of this reward event (ISO 8601)
          example: '2025-07-12T00:00:00.000Z'
        blockNumber:
          type: number
          description: Block number when the reward was earned
          example: 20540000
        yieldId:
          type: string
          description: Unique identifier of the yield
          example: ethereum-usdc-morpho-vault
        token:
          description: Token metadata for the reward
          allOf:
            - $ref: '#/components/schemas/TokenDto'
        amount:
          type: string
          description: Human-readable reward amount
          example: '1.4'
        amountRaw:
          type: string
          description: Raw reward amount in base units (wei)
          example: '1400000'
        yieldSource:
          type: string
          description: Source of the reward derived from yield type
          example: vault_yield
        transactionHash:
          type: string
          description: Transaction hash where the reward was earned
          example: 0xabc123...
          nullable: true
      required:
        - timestamp
        - blockNumber
        - yieldId
        - token
        - amount
        - amountRaw
        - yieldSource
    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
        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
        - yieldId
        - interval
        - from
        - to
    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
    TvlHistoryResponseDto:
      type: object
      properties:
        total:
          type: number
          description: Total number of items available
          example: 100
        offset:
          type: number
          description: Offset of the current page
          example: 0
        limit:
          type: number
          description: Limit of the current page
          example: 20
        yieldId:
          type: string
          description: Unique identifier of the yield
          example: ethereum-usdc-aave-v3
        interval:
          type: string
          description: Sampling interval used for this response
          enum:
            - day
            - week
            - month
          example: day
        from:
          type: string
          description: Start of the returned date range (ISO 8601)
          example: '2025-06-12T00:00:00.000Z'
        to:
          type: string
          description: End of the returned date range (ISO 8601)
          example: '2025-07-12T00:00:00.000Z'
      required:
        - total
        - offset
        - limit
        - yieldId
        - interval
        - from
        - to
    TvlSnapshotDto:
      type: object
      properties:
        timestamp:
          type: string
          description: Timestamp of this snapshot (ISO 8601)
          example: '2025-07-11T00:00:00.000Z'
        tvl:
          type: string
          description: Total value locked in token units (human-readable)
          example: '512340000.12'
        tvlRaw:
          type: string
          description: Total value locked in smallest token unit (wei)
          example: '512340000120000'
      required:
        - timestamp
        - tvl
        - tvlRaw
    CampaignStatus:
      type: string
      enum:
        - draft
        - active
        - paused
        - ended
    CampaignRewardMode:
      type: string
      enum:
        - normal
        - compound
    CampaignQualificationType:
      type: string
      enum:
        - min_token_amount
    CampaignQualificationConfigDto:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/CampaignQualificationType'
        threshold:
          type: string
          example: '100'
          description: Minimum qualifying token amount balance.
        maxIncentivizedTvlToken:
          type: string
          nullable: true
          example: '1000000'
          description: Optional per-user token cap.
      required:
        - type
        - threshold
    CampaignPayoutFrequency:
      type: string
      enum:
        - weekly
        - daily
        - six_hourly
        - end_of_campaign
    YieldCampaignDto:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        yieldId:
          type: string
        status:
          $ref: '#/components/schemas/CampaignStatus'
        rewardMode:
          $ref: '#/components/schemas/CampaignRewardMode'
        rewardRate:
          nullable: true
          description: >-
            Campaign reward rate in the same shape as yield reward rates. Null
            when TVL or emission data is unavailable.
          allOf:
            - $ref: '#/components/schemas/RewardRateDto'
        totalBudget:
          type: string
          description: Total campaign reward budget.
        distributedBudget:
          type: string
          description: Amount of budget distributed so far.
        remainingBudget:
          type: string
          description: Amount of budget remaining.
        configuredHourlyEmission:
          type: string
          nullable: true
          description: Configured hourly emission amount.
        apyCeiling:
          type: number
          nullable: true
          example: 0.125
          description: Optional APY ceiling as a decimal rate, where 0.125 = 12.5%.
        qualificationConfig:
          description: Qualification configuration for the campaign.
          allOf:
            - $ref: '#/components/schemas/CampaignQualificationConfigDto'
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        lastProcessedHour:
          type: string
          format: date-time
          nullable: true
        nextPayoutDueAt:
          type: string
          format: date-time
          nullable: true
        payoutFrequency:
          $ref: '#/components/schemas/CampaignPayoutFrequency'
        rewardToken:
          description: Reward token metadata.
          allOf:
            - $ref: '#/components/schemas/TokenDto'
      required:
        - id
        - createdAt
        - updatedAt
        - yieldId
        - status
        - rewardMode
        - rewardRate
        - totalBudget
        - distributedBudget
        - remainingBudget
        - qualificationConfig
        - startTime
        - endTime
        - payoutFrequency
        - rewardToken
    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
            - CLAIM_REWARDS
            - AUTO_SWEEP_UNSTAKE_REWARDS
            - AUTO_SWEEP_WITHDRAW_REWARDS
            - RESTAKE_REWARDS
            - WITHDRAW
            - WITHDRAW_ALL
            - RESTAKE
            - CLAIM_UNSTAKED
            - UNLOCK_LOCKED
            - STAKE_LOCKED
            - VOTE
            - REVOKE
            - VOTE_LOCKED
            - REVOTE
            - REBOND
            - MIGRATE
            - VERIFY_WITHDRAW_CREDENTIALS
            - DELEGATE
          example: CLAIM_REWARDS
        passthrough:
          type: string
          description: >-
            Server-generated passthrough from the balances endpoint (required
            for manage actions)
          example: eyJhZGRyZXNzZXMiOnsiYWRkcmVzcyI6ImNvc21vczF5ZXk...
      required:
        - yieldId
        - address
        - action
        - passthrough
    ActionsQueryDto:
      type: object
      properties:
        offset:
          type: number
          description: Offset for pagination
          default: 0
          minimum: 0
          example: 0
        limit:
          type: number
          description: Maximum number of items to return
          default: 20
          minimum: 1
          maximum: 100
          example: 20
        address:
          type: string
          description: User wallet address to filter actions for
          example: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e'
        status:
          type: string
          description: Filter by action status
          enum:
            - CANCELED
            - CREATED
            - WAITING_FOR_NEXT
            - PROCESSING
            - FAILED
            - SUCCESS
            - STALE
        statuses:
          type: array
          description: >-
            Filter by multiple action statuses (supports CSV or repeated query
            params)
          items:
            type: string
            enum:
              - CANCELED
              - CREATED
              - WAITING_FOR_NEXT
              - PROCESSING
              - FAILED
              - SUCCESS
              - STALE
        intent:
          type: string
          description: Filter by action intent
          enum:
            - enter
            - manage
            - exit
        type:
          type: string
          description: Filter by action type
          enum:
            - STAKE
            - UNSTAKE
            - 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
        network:
          type: string
          description: Filter by network
          enum:
            - ethereum
            - ethereum-goerli
            - ethereum-holesky
            - ethereum-sepolia
            - ethereum-hoodi
            - arbitrum
            - base
            - base-sepolia
            - gnosis
            - optimism
            - polygon
            - polygon-amoy
            - starknet
            - zksync
            - linea
            - unichain
            - monad-testnet
            - monad
            - avalanche-c
            - avalanche-c-atomic
            - avalanche-p
            - binance
            - celo
            - fantom
            - harmony
            - moonriver
            - okc
            - viction
            - core
            - sonic
            - plasma
            - katana
            - hyperevm
            - 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
    NetworkDto:
      type: object
      properties:
        id:
          type: string
          description: The network identifier
          example: ethereum
          enum:
            - ethereum
            - ethereum-goerli
            - ethereum-holesky
            - ethereum-sepolia
            - ethereum-hoodi
            - arbitrum
            - base
            - base-sepolia
            - gnosis
            - optimism
            - polygon
            - polygon-amoy
            - starknet
            - zksync
            - linea
            - unichain
            - monad-testnet
            - monad
            - avalanche-c
            - avalanche-c-atomic
            - avalanche-p
            - binance
            - celo
            - fantom
            - harmony
            - moonriver
            - okc
            - viction
            - core
            - sonic
            - plasma
            - katana
            - hyperevm
            - agoric
            - akash
            - axelar
            - band-protocol
            - bitsong
            - canto
            - chihuahua
            - comdex
            - coreum
            - cosmos
            - crescent
            - cronos
            - cudos
            - desmos
            - dydx
            - evmos
            - fetch-ai
            - gravity-bridge
            - injective
            - irisnet
            - juno
            - kava
            - ki-network
            - mars-protocol
            - nym
            - okex-chain
            - onomy
            - osmosis
            - persistence
            - quicksilver
            - regen
            - secret
            - sentinel
            - sommelier
            - stafi
            - stargaze
            - stride
            - teritori
            - tgrade
            - umee
            - sei
            - mantra
            - celestia
            - saga
            - zetachain
            - dymension
            - humansai
            - neutron
            - polkadot
            - kusama
            - westend
            - bittensor
            - aptos
            - binancebeacon
            - cardano
            - near
            - solana
            - solana-devnet
            - stellar
            - stellar-testnet
            - sui
            - tezos
            - tron
            - ton
            - ton-testnet
            - hyperliquid
        name:
          type: string
          description: Human-readable display name of the network
          example: Ethereum
        category:
          type: string
          description: The category of the network
          example: evm
          enum:
            - evm
            - cosmos
            - substrate
            - misc
        logoURI:
          type: string
          description: Logo URI for the network
          example: https://assets.stakek.it/networks/ethereum.svg
      required:
        - id
        - name
        - category
        - logoURI
    ProviderDto:
      type: object
      properties:
        name:
          type: string
          description: Provider name
          example: Morpho
        id:
          type: string
          description: Provider ID
          example: morpho
        logoURI:
          type: string
          description: Provider logo URI
          example: https://morpho.xyz/logo.png
        description:
          type: string
          description: Short description of the provider
          example: A peer-to-peer DeFi lending protocol
        website:
          type: string
          description: Provider website
          example: https://morpho.xyz
        tvlUsd:
          type: object
          description: Total TVL across the entire provider in USD
          example: 10,200,000
          nullable: true
        type:
          type: string
          description: Type of provider (protocol or validator provider)
          enum:
            - protocol
            - validator_provider
          example: protocol
        references:
          description: Optional social/media references or audit links
          nullable: true
          type: array
          items:
            type: string
      required:
        - name
        - id
        - logoURI
        - description
        - website
        - tvlUsd
        - type
    HealthStatus:
      type: string
      description: The health status of the service
      enum:
        - OK
        - FAIL
    HealthStatusDto:
      type: object
      properties:
        status:
          example: OK
          $ref: '#/components/schemas/HealthStatus'
        timestamp:
          type: string
          format: date-time
          example: '2024-01-15T10:30:00.000Z'
          description: Timestamp when the health check was performed
      required:
        - status
        - timestamp
externalDocs:
  description: For more information
  url: https://docs.yield.xyz
