GET/v1/partner/pools

List available pools

Returns a paginated list of yield pools that your tenant is allowed to use. Each item contains the protocol, chain, underlying token, current APY snapshot, TVL, and — critically — the market_address that you must pass when creating a portfolio. This endpoint is Entra token only (Entra token required, no user token).

Call this endpoint once at app startup and cache the result; pool metadata changes infrequently. Re-fetch when creating a portfolio to ensure you pass a current market_address.

Headers

Authorizationstringrequired

Entra M2M access token. Format: Bearer <token>. Obtain via the OAuth 2.0 Client Credentials grant against your Azure AD tenant. See Entra authentication.

Query parameters

limitnumberoptional

Maximum number of pools to return. Range 1–100. Default: 25. See Pagination.

starting_afterstringoptional

Cursor for forward pagination — the pool_id of the last item from the previous page.

ending_beforestringoptional

Cursor for backward pagination — the pool_id of the first item from the current page.

Example request

const baseUrl = process.env.YIELDFORCE_API_BASE_URL ?? 'https://yieldforce.io/api';
 
const res = await fetch(`${baseUrl}/v1/partner/pools`, {
  headers: {
    Authorization: `Bearer ${entraToken}`,
  },
});
const data = await res.json();

Response

200 Paginated list of pools

{
  "data": [
    {
      "pool_id": "pool_aave_base_usdc",
      "protocol": "aave",
      "chain_id": "84532",
      "token_symbol": "USDC",
      "token_address": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
      "market_address": "0x8bAB6d1b75f19e9eD9fCe8b9BD338844fF79aE27",
      "apy": "0.042",
      "tvl_usd": "1250000.00"
    },
    {
      "pool_id": "pool_morpho_base_usdc",
      "protocol": "morpho",
      "chain_id": "84532",
      "token_symbol": "USDC",
      "token_address": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
      "market_address": "0x6A0935DEF442D92c3456FBb38B888375F022C646",
      "apy": "0.063",
      "tvl_usd": "870000.00"
    }
  ],
  "has_more": false,
  "next_cursor": null,
  "prev_cursor": null
}

market_address is not the same as token_address

For both Aave and Morpho, market_address identifies the pool or vault contract — not the ERC-20 token. You must pass market_address verbatim as the market_address field when calling POST /v1/partner/end_users/{external_id}/portfolios. Passing token_address there will fail.

On Base Sepolia: the Morpho yfUSDC vault address is 0x6A0935DEF442D92c3456FBb38B888375F022C646.

Errors

401 token_missing — No Authorization: Bearer header on the request.

401 invalid_entra_token — Token is expired, malformed, or has an unexpected audience. Force-refresh your cached token and retry once.

401 unknown_partner — The appid in your Entra token does not match any registered tenant. Contact Yieldforce to confirm your App Registration is onboarded.

403 insufficient_role — Your tenant does not have access to this endpoint. Contact Yieldforce to verify your tenant configuration.