Skip to main content
All requests require an API key via the X-API-Key header. See API Keys for details.

Overview

The Opportunities API is how you discover what a user can deposit into. Each opportunity carries its accepted tokens, chain, estimated APR, current TVL, incentives, and which deposit modes it supports. This page is the canonical reference for the Opportunity object; every other endpoint that returns one links here. There are three read endpoints:
  • GET /v2/opportunities/ lists the full catalog, with optional filters.
  • GET /v2/opportunities/{id} returns one opportunity by ID.
  • GET /v2/opportunities/distributors/{distributorId} returns the set configured for a distributor.
For the product context (what configuration is and why you’d scope a set), see the Distribution overview.

Get All Opportunities

Retrieve all available opportunities with simplified token information.
Query Parameters
string
Comma-separated list of chain IDs to filter by. Example: 1,8453,42161 for Ethereum, Base, and Arbitrum.
string
Filter by deposit token in the format address-chainId. Example: 0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7-43114.
number
Return only opportunities with TVL at or above this USD value. Example: 1000000 returns opportunities above $1M.
number
Return only opportunities with TVL at or below this USD value.
Response

Get Opportunity by ID

Retrieve a single opportunity by its unique identifier.
Path Parameters
uuid
required
Opportunity unique identifier.
Response Returns a single Opportunity object directly, using the structure documented under Response Fields.

Get Distributor Opportunities

Every distributor has a set of opportunities configured in the Client Portal. This endpoint returns only that set: the opportunities your users should see. Use it instead of the full catalog when you want to serve exactly what you have selected for your integration.
Path Parameters
string
required
Your distributor ID. Find it under Distribution in the Client Portal.
Response Same shape as Get All Opportunities (a data array plus a pagination object), filtered to the configured set. An empty data array means no opportunities have been configured yet; that is a 200, not an error. Which endpoint to use How configuration works: select opportunities in the Client Portal, which stores them in the distributor’s earn-details configuration, and this endpoint returns that selection. For the concept and how attribution ties to it, see Distributor Model.

Response Fields

The same Opportunity object is returned by all three endpoints above.

Opportunity Object

uuid
required
Opportunity unique identifier.
string
required
Opportunity display name.
string
URL-friendly identifier for the opportunity.
string
Opportunity detailed description.
string
Opportunity type, for example vault or lending.
number
Total Value Locked in USD.
number
Estimated annual percentage rate.
Whether the opportunity is featured.
number
Minimum deposit amount in USD. Deposits below this value are rejected.
OpportunityMeta
Interaction and availability flags for the opportunity. See Meta Object.
Token[]
Tokens accepted for deposit.
Token
Base token for the opportunity.
Token
Token received as a receipt for deposits.
Curator
Curator organization for the opportunity.
Incentive[]
Incentives available on this opportunity.

Token Object

string
Token symbol, for example USDC or ETH.
string
Token contract address.
integer
Numeric chain ID the token belongs to.
integer
ERC20 decimals.
string
Token logo image URL.

Meta Object

boolean
Whether direct interaction with the opportunity is available. When true, the user can deposit the vault’s native token directly with mode=direct.
boolean
Whether entering via a routed swap is supported. When true, the user can deposit a different input token with mode=swap and the API routes through a DEX. See Deposit Modes.
boolean
Whether deposits are currently enabled.
boolean
Whether withdrawals are currently enabled.
boolean
Whether deposits settle asynchronously and require a follow-up claim.
boolean
Whether withdrawals settle asynchronously.
boolean
Whether the opportunity can only be entered via a secondary market.
string
Reason deposits are disabled, if any.
string
Reason withdrawals are disabled, if any.

Curator Object

uuid
Curator organization ID.
string
Curator name.
string
Curator description.
string
Curator icon image URL.
string
Curator website URL.

Incentive Object

uuid
Incentive unique identifier.
string
Incentive name.
string
Incentive description.
string
Incentive icon URL.
string
Type of reward: points, tokens, yield, or vesting.
string
Human-readable reward type name.
number
Annual percentage rate. May be null.
number
Minimum annual percentage rate. May be null.
number
Maximum annual percentage rate. May be null.
number
Fully diluted valuation estimate. May be null.
number
Token supply allocation percentage. May be null.
number
Estimated price in USD. May be null.
boolean
Whether the incentive is indexed.

Operational Notes

Some vaults settle deposits instantly; others (such as Mellow and Lagoon) are asynchronous and require a follow-up claim. In v2, the meta.asyncDeposit flag signals this: when true, the deposit settles asynchronously and the user must submit a follow-up claim. The meta.asyncWithdraw flag signals the same for withdrawals.
GET /v2/opportunities/distributors/{distributorId} returns { "data": [], "pagination": { "page": 1, "limit": 20, "total": 0, "totalPages": 0 } } when nothing is configured. Treat this as a prompt to configure the set in the Client Portal, not as a failure.

Error Handling

Status Code: 401 UnauthorizedSolution: Pass a valid X-API-Key header. See API Keys.
Status Code: 404 Not Found
Solution: Verify the opportunity ID or distributor ID is correct and active.
Status Code: 500 Internal Server ErrorSolution: Retry with exponential backoff and contact support if it persists.