Skip to main content
Every yield opportunity is one YieldDto, returned by GET /v1/yields/{yieldId} (or in the list from GET /v1/yields). Every yield uses the same format, whatever the protocol. It carries what you need to render the opportunity (the reward rate and its breakdown, TVL, entry limits, cooldowns, and fees), validate input, and drive an action, grouped below by what each group is for. For the exact schema, see the API reference.

Identity

Tokens

Reward rate

rewardRate is the yield’s current estimated return, not its history. It has:
  • total: the estimated rate across all sources, which can include a campaign component when one applies to your project (see Incentive Campaigns)
  • rateType: APR or APY. APR is the simple annualized rate; APY compounds it. For most yields the type follows the mechanics: vault, lending, and real-world-asset yields report APY; other types report APY when rewards compound automatically and APR when they need a manual claim. Read rateType rather than assuming it
  • components[]: the breakdown behind total, each with its own rate, rateType, token, yieldSource, and an optional description
yieldSource is one of: staking, liquid_staking, restaking, protocol_incentive, campaign_incentive, points, lending, mev, real_world_asset_yield, vault. For historical APY and TVL, see Rewards and history.

Statistics and risk

statistics is a current snapshot, not a time series: tvlUsd, tvl (in the underlying token), tvlRaw, uniqueUsers, averagePositionSizeUsd, and averagePositionSize. Some fields are null when the yield isn’t ERC-4626 or indexing hasn’t run yet. risk.ratings[] aggregates the grades published by third-party raters (credora, stakingRewards) and is returned only for the yields those raters cover. It is a summary; the full report comes from GET /v1/yields/{yieldId}/risk, with an updatedAt timestamp and one object per source: Independent ratings that agree are a stronger signal than one score on its own. Fields are null when a source has not rated the yield.

Mechanics

mechanics is the operational contract: what the yield requires and how it behaves.

Fee configurations

feeConfigurations[] lists the fee setups live for your project on this yield, when it supports fees. Each entry has: Only live configurations appear. See Monetization for how they are created.

KYC requirements

When mechanics.requirements.kycRequired is true, mechanics.requirements.kyc carries the public criteria you need to render a verification step before the user tries to enter: eligibility describes jurisdictions and investor types:
  • defaultPolicy: deny (only listed countries may enter) or allow (anyone except blocked jurisdictions)
  • countries, blockedCountries (ISO 3166-1 alpha-2) and blockedSubdivisions (ISO 3166-2, for example UA-43)
  • usPersonAllowed, and geoBlockingEnforced when the issuer enforces geo-blocking itself
  • subjectTypes: KYC for individuals, KYB for businesses, or both
  • investorEligibility[]: per jurisdiction (a country code, EEA, GCC or *), the investor tier required, such as us_accredited, us_qualified_purchaser, eu_professional or sg_ai, how it must be verified (verificationLevel: self_attested, verified_documentation, letter or third_party_attestation) and, if needed, expiresAfterDays for re-verification
A wallet’s own status comes from GET /v1/yields/{yieldId}/kyc/status. See RWA KYC.

Argument schemas

mechanics.arguments defines what each action on this yield needs, before you call it: enter and exit are each one ArgumentSchemaDto; manage is a map of one ArgumentSchemaDto per supported action type (CLAIM_REWARDS, CLAIM_UNSTAKED, and others); balance covers extra fields the balances call needs, such as alternative addresses. Each ArgumentSchemaDto is a list of fields:
name is one of a fixed set of argument names (amount, validatorAddress, duration, and others); type is string, number, address, enum, or boolean; optionsRef points to the endpoint that lists the valid choices, such as a yield’s validators (GET /v1/yields/{yieldId}/validators). Read this schema before calling actions instead of hardcoding fields per protocol.

Status and lifecycle

Live state

state carries dynamic, protocol-level values, present only where they apply to the yield’s type:

Fund schedules and execution contracts

Two fields apply mainly to RWA and custody-constrained integrations:
  • executionContracts: the on-chain contract addresses transactions for this yield may target (tx.to), used by custody providers that whitelist execution destinations.
  • investmentSchedule: present on fund-style RWA yields. It layers subscription and redemption timing on top of cooldownPeriod and status.
investmentSchedule has a timezone, optional notes, and a subscription and a redemption side. Each side lists paths[], the ways to act on it, with paths[0] as the default. A fund can offer an instant path, for example an on-demand redemption pool, next to a standard one. Each path has: Use the schedule to show users when a subscription or redemption will execute and settle before they confirm.

Next steps

Discover yields

Filter and page through the yields enabled for your project.

Actions

Use the argument schemas to build enter, exit, and manage flows.