---
title: "Get list of earn opportunities"
method: GET
path: "/earn/opportunities"
tags: ["Earn"]
---

# Get list of earn opportunities

`GET /earn/opportunities`

## Request

- Base URL: `https://api.fireblocks.io/v1`
- URL: `https://api.fireblocks.io/v1/earn/opportunities`
- Auth: none declared
- TypeScript: <https://skmtc.dev/fireblocks/apis/fireblocks-api/docs/earn/opportunities/get.ts> (a function with typed inputs; its response is checked against the schema)

Get list of earn opportunities (vaults).

## Query parameters

- `pageCursor` string
- `pageSize` integer
- `sortBy` string
- `order` 'ASC' | 'DESC'

## Response `200`

OK

- GetOpportunitiesResponse
  - `data` Opportunity[], required: Page of lending opportunities for this query.
    - `id` string: Unique opportunity identifier.
    - `providerId` 'MORPHO' | 'AAVE': Lending protocol (`MORPHO` or `AAVE`).
    - `type` 'VAULT' | 'MARKET': Opportunity kind — vault or market.
    - `chainId` string: Chain identifier as a string (e.g. "1" for Ethereum mainnet).
    - `address` string: Primary contract address for the vault or market.
    - `name` string: Display name of the opportunity.
    - `symbol` string: Symbol or share token ticker for the position asset.
    - `principalAsset` EarnAsset
      - `address` string: Contract address of the token on-chain.
      - `symbol` string: Human-readable ticker (e.g. USDC).
      - `decimals` integer: Token decimals used when interpreting on-chain amounts.
      - `assetId` string: Fireblocks legacy asset identifier (e.g. USDC_ETH, PYUSD).
    - `positionAsset` EarnAsset
      - `address` string: Contract address of the token on-chain.
      - `symbol` string: Human-readable ticker (e.g. USDC).
      - `decimals` integer: Token decimals used when interpreting on-chain amounts.
      - `assetId` string: Fireblocks legacy asset identifier (e.g. USDC_ETH, PYUSD).
    - `totalAssets` string: Human-readable total value locked / assets in the opportunity.
    - `totalAssetsUsd` string: USD-denominated total assets / TVL.
    - `liquidity` string: Human-readable available liquidity.
    - `liquidityUsd` string: USD-denominated available liquidity.
    - `apy` Apy
      - `native` number, double: APY in native format (before fees), as a percentage (e.g. 4.25 means 4.25%, not 0.0425).
      - `gross` number, double: Gross APY before fees, as a percentage (e.g. 4.25 means 4.25%, not 0.0425).
      - `net` number, double: Net APY after fees, as a percentage (e.g. 4.25 means 4.25%, not 0.0425).
      - `supplyIncentiveApy` number, double: Additional incentive APY from reward programs (e.g. Merkl rewards on Aave), as a percentage. Only present when the opportunity has active incentives.
    - `performanceFee` string: Performance fee as a human-readable decimal string.
    - `managementFee` string: Management fee as a human-readable decimal string.
    - `exposureType` 'UNSPECIFIED' | 'VAULT_ALLOCATION' | 'MARKET_COLLATERAL': What the `exposure` rows represent; `UNSPECIFIED` when there is no exposure.
    - `exposure` Exposure[]: Per-asset exposure breakdown (vault allocation slices, top 20 by USD notional). Empty when not applicable.
      - `address` string, required: Contract address of the exposure token on-chain.
      - `amount` string, required: Human-readable token amount (raw on-chain value scaled by 10^decimals).
      - `symbol` string: Human-readable ticker (e.g. USDC).
      - `decimals` integer: Token decimals used when interpreting on-chain amounts.
      - `assetId` string: Fireblocks legacy asset identifier (e.g. USDC_ETH, PYUSD); only present when resolved via asset-service.
      - `amountUsd` string: USD notional value of the exposure amount.
    - `curator` EarnCurator
      - `name` string: Curator display name.
      - `iconUrl` string, uri: URL of the curator's icon/logo.
    - `metadata` EarnMetadata
      - `name` string: Protocol display name (e.g. "Aave", "Aave Horizon").
      - `iconUrl` string, uri: URL of the protocol's icon/logo.
  - `next` string: Opaque cursor for the next page; empty when there is no next page.
  - `prev` string: Opaque cursor for the previous page; empty when there is no previous page.
  - `total` integer, required: Total number of items matching the query.

## Other responses

- `403`: Forbidden: insufficient permissions, disabled feature, or restricted access.
- `404`: Not found: requested resource does not exist.
- `429`: Rate limit exceeded: slow down and retry later.
- `500`: Internal error while processing the request.
- `default`: Error Response

---

[API](https://skmtc.dev/fireblocks/apis/fireblocks-api.md) - [All operations](https://skmtc.dev/fireblocks/apis/fireblocks-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fireblocks/apis/fireblocks-api/revisions/4eba9965659a?raw)
