> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ndovu.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Getting Products

> List the investment plans/funds available to your partner account.

Once you have an access token (see [Authentication](/authentication)), use it to list the investment plans ("funds") your partner account is configured to offer.

```
GET /api/v3/partners/{shortName}/plans
```

## Path parameters

| Parameter   | Description                                                 |
| ----------- | ----------------------------------------------------------- |
| `shortName` | Your partner short name, included in your onboarding email. |

<Note>
  You can only ever list your own plans — the API checks that `shortName`
  matches the partner identified by your access token and returns `403
      Forbidden` if it doesn't.
</Note>

## Request

<CodeGroup>
  ```bash cURL theme={null}
  curl https://be-dev-1.dev.ndovu.co/api/v3/partners/YOUR_SHORT_NAME/plans \
    -H "Authorization: Bearer $ACCESS_TOKEN"
  ```

  ```javascript Node.js theme={null}
  const res = await fetch(
    `https://be-dev-1.dev.ndovu.co/api/v3/partners/${shortName}/plans`,
    { headers: { Authorization: `Bearer ${accessToken}` } }
  );

  const { data } = await res.json();
  console.log(data.total, data.plans);
  ```

  ```python Python theme={null}
  res = requests.get(
      f"https://be-dev-1.dev.ndovu.co/api/v3/partners/{short_name}/plans",
      headers={"Authorization": f"Bearer {access_token}"},
  )
  res.raise_for_status()
  plans = res.json()["data"]["plans"]
  ```
</CodeGroup>

## Query parameters

All filters are optional. Omit them to get every plan available to your partner account.

| Parameter    | Type   | Description                            |
| ------------ | ------ | -------------------------------------- |
| `categoryId` | number | Filter to a single plan category.      |
| `fundType`   | string | Filter by fund type.                   |
| `currency`   | string | Filter by currency, e.g. `KES`, `USD`. |

This endpoint is not paginated — it returns the full matching list in one response.

## Response

```json theme={null}
{
  "message": "Plans fetched successfully",
  "data": {
    "total": 2,
    "plans": [
      {
        "id": 101,
        "identifier": "ndovu-money-market",
        "name": "Ndovu Money Market Fund",
        "coolName": "Money Market",
        "about": "A low-risk fund investing in short-term government securities.",
        "hint": "Great for short-term savings goals.",
        "imageUrl": "https://cdn.ndovu.co/plans/money-market.png",
        "thumbnail": "https://cdn.ndovu.co/plans/money-market-thumb.png",
        "sector": "Money Market",
        "fundType": "MONEY_MARKET",
        "profitType": "VARIABLE",
        "profitTypeDescription": "Returns vary based on market performance.",
        "performance1": 12.4,
        "performance3": 11.8,
        "performance5": 10.9,
        "performance10": null,
        "performanceDate": "2026-06-30",
        "currency": "USD",
        "minInvestableAmounts": { "USD": 10 },
        "minTopUpAmounts": { "USD": 5 },
        "tenor": "Open-ended",
        "lockInPeriod": 0,
        "partialWithdrawable": true,
        "factSheet": "https://cdn.ndovu.co/plans/money-market-factsheet.pdf",
        "prospectus": "https://cdn.ndovu.co/plans/money-market-prospectus.pdf",
        "isInvestable": true,
        "nonInvestableNote": null,
        "category": { "id": 1, "name": "money_market", "displayName": "Money Market", "tagLine": "Low risk, steady returns" },
        "planType": { "id": 1, "name": "Fund" },
        "productRiskLevel": { "id": 1, "name": "Low" },
        "fundManager": { "id": 3, "name": "Ndovu Asset Managers" },
        "fundCurrency": { "currency": "USD" }
      }
    ]
  }
}
```

### Fields

| Field                                                              | Type           | Description                                                   |
| ------------------------------------------------------------------ | -------------- | ------------------------------------------------------------- |
| `id`                                                               | number         | Internal plan ID.                                             |
| `identifier`                                                       | string         | Stable machine-readable identifier for the plan.              |
| `name`                                                             | string         | Formal plan name.                                             |
| `coolName`                                                         | string         | Short, friendly display name — prefer this in user-facing UI. |
| `about`                                                            | string         | Longer description of the plan.                               |
| `hint`                                                             | string         | Short marketing tagline.                                      |
| `imageUrl` / `thumbnail`                                           | string         | Plan artwork.                                                 |
| `sector`                                                           | string         | Sector the fund invests in.                                   |
| `fundType`                                                         | string         | Fund type classification.                                     |
| `profitType` / `profitTypeDescription`                             | string         | How returns are generated.                                    |
| `performance1` / `performance3` / `performance5` / `performance10` | number \| null | Annualized returns over 1/3/5/10 years, where available.      |
| `performanceDate`                                                  | string         | As-of date for the performance figures.                       |
| `currency`                                                         | string         | Plan's base currency.                                         |
| `minInvestableAmounts`                                             | object         | Minimum initial investment, keyed by currency.                |
| `minTopUpAmounts`                                                  | object         | Minimum top-up amount, keyed by currency.                     |
| `tenor`                                                            | string         | Investment term.                                              |
| `lockInPeriod`                                                     | number         | Lock-in period in days (`0` if none).                         |
| `partialWithdrawable`                                              | boolean        | Whether partial withdrawals are allowed.                      |
| `factSheet` / `prospectus`                                         | string         | Links to legal/informational documents.                       |
| `isInvestable`                                                     | boolean        | Whether the plan currently accepts new investment.            |
| `nonInvestableNote`                                                | string \| null | Explanation shown when `isInvestable` is `false`.             |
| `category`                                                         | object \| null | Plan category (`id`, `name`, `displayName`, `tagLine`).       |
| `planType`                                                         | object \| null | Plan type (`id`, `name`).                                     |
| `productRiskLevel`                                                 | object \| null | Risk rating (`id`, `name`).                                   |
| `fundManager`                                                      | object \| null | Managing entity (`id`, `name`).                               |
| `fundCurrency`                                                     | object \| null | Fund's operating currency.                                    |

## Which plans show up here

The plans returned are scoped to the **country** configured on your partner account — every partner in the same country sees the same catalog. If you expect a plan to appear and it doesn't, it likely isn't marked viewable for your country yet; contact [support@ndovu.co](mailto:support@ndovu.co).

## Errors

| Status             | Cause                                                                                             |
| ------------------ | ------------------------------------------------------------------------------------------------- |
| `401 Unauthorized` | Missing, expired, or invalid access token. Re-authenticate via [Authentication](/authentication). |
| `403 Forbidden`    | `shortName` in the URL doesn't match the partner identified by your access token.                 |
