# Mutual funds

Every open-end and pension fund reported by the **Mutual Funds Association of Pakistan (MUFAP)**, 567 funds from 25 asset managers. The data covers daily NAVs back to 1996, trailing returns, dividend payouts, expense ratios (TER) and monthly asset allocation. Funds are identified by MUFAP's numeric `fund_id`.

## `GET /v1/funds` (key required)

List and search funds.

| Param | Type | Notes |
|---|---|---|
| `amc` | string | Asset-manager filter, partial match (e.g. `Meezan`, `ABL`) |
| `category` | string | e.g. `Money Market`, `Equity`, `Shariah Compliant Income` |
| `sector` | string | e.g. `Open-End Funds` |
| `q` | string | Fund-name filter |
| `limit` | int | Default 1000 |

```bash
curl -H "X-API-Key: pk_live_xxx" "https://api.pakdatahub.com/v1/funds?amc=Meezan&limit=2"
```

```json
{ "success": true, "count": 2, "data": [
  { "fund_id": 12821, "name": "Al Meezan Mutual Fund", "amc": "Al Meezan Investment Management Limited",
    "sector": "Open-End Funds", "category": "Shariah Compliant Equity",
    "inception_date": "1995-07-13", "trustee": "CDC",
    "latest_nav": { "date": "2026-09-17", "nav": 48.071, "offer": 49.1766, "repurchase": 48.071 } },
  { "fund_id": 12826, "name": "KSE Meezan Index Fund", "...": "..." }
] }
```

## `GET /v1/funds/screener` (key required)

**Every active fund in one response**, with the fields a screener ranks on. Use it instead of calling `/returns` and `/expenses` once per fund. It's cached for about an hour.

```json
{ "success": true, "count": 588, "data": [
  { "fund_id": 14750, "name": "786 Islamic Money Market Fund", "amc": "786 Investments Limited",
    "category": "Shariah Compliant Money Market", "sector": "Open-End Funds",
    "rating": null, "benchmark": "N/A",
    "nav": { "date": "2026-09-18", "value": 102.7144 },
    "returns": { "as_of": "2026-09-23", "ytd": 9.84, "m3": 9.94, "y1": 9.83 },
    "ter_ytd": 0.79, "ter_as_of": "2026-09-18" }
] }
```

`returns` are MUFAP's reported trailing returns in % (`m3` = 90 days, `y1` = 365 days, `ytd` = fiscal year to date, where Pakistan's fiscal year starts 1 July). `ter_ytd` is the total expense ratio in %. The free [fund screener tool](https://pakdatahub.com/tools/fund-screener) is built on this endpoint.

## `GET /v1/funds/{fund_id}` (key required)

Profile plus latest NAV:

```json
{ "success": true,
  "fund": { "fund_id": 12843, "name": "Meezan Asset Allocation Fund", "amc": "Al Meezan Investment Management Limited",
            "sector": "Open-End Funds", "category": "Shariah Compliant Asset Allocation",
            "inception_date": "2016-04-18", "trustee": "CDC" },
  "latest_nav": { "date": "2026-09-18", "nav": 113.0185, "offer": 116.9176, "repurchase": 113.0185 } }
```

## `GET /v1/funds/{fund_id}/nav` (key required)

Daily NAV history. Params: `from`, `to`, `limit` (default 1000), `sort`.

```json
{ "success": true, "fund_id": 12843, "count": 2, "data": [
  { "date": "2026-09-18", "nav": 113.0185, "offer": 116.9176, "repurchase": 113.0185 },
  { "date": "2026-09-17", "nav": 112.1417, "offer": 116.0105, "repurchase": 112.1417 } ] }
```

Historical points before a fund's daily snapshots began carry `nav` only. Free and Developer plans are clamped to their history window.

## `GET /v1/funds/{fund_id}/returns` (key required)

MUFAP trailing returns, in %, as published each day. Params: `from`, `to`, `limit`, `sort`.

```json
{ "success": true, "fund_id": 12843, "count": 1, "data": [
  { "date": "2026-09-23", "rating": null, "benchmark": "N/A",
    "ytd": null, "mtd": null, "d1": 0.72, "d15": null, "d30": null,
    "d90": null, "d180": 11.14, "d270": null, "d365": 0.17 } ] }
```

`dN` = N-day return. A `null` means MUFAP didn't publish that period.

**Annualized for fixed-income funds:** following MUFAP's convention, returns for money-market, income, fixed-rate and other debt funds are **annualized**, while equity-type funds report plain period returns. A one-day return (`d1`) annualized can therefore look extreme, e.g. 100%+ after a sharp daily NAV move. To compare funds, use longer windows (`d90`, `d365`), or [`/analytics`](https://pakdatahub.com/docs/api-fund-analytics.md) for returns computed from the full NAV history (3y, 5y, CAGR, volatility, drawdown).

## `GET /v1/funds/{fund_id}/payouts` (key required)

Dividend and payout history, back to about 2010. Param: `limit`.

```json
{ "success": true, "fund_id": 12843, "count": 2, "data": [
  { "payout_date": "2025-06-27", "per_unit": 1.0, "ex_nav": 93.1809 },
  { "payout_date": "2024-06-28", "per_unit": 3.25, "ex_nav": 60.7337 } ] }
```

Daily-dividend money-market funds have thousands of records.

## `GET /v1/funds/{fund_id}/expenses` (key required)

Expense ratios over time, in %. Param: `limit`.

```json
{ "success": true, "fund_id": 12843, "count": 1, "data": [
  { "date": "2026-09-18", "ter_mtd": 4.87, "ter_ytd": 4.87, "management_fee": 3.0, "selling_marketing": 0.0 } ] }
```

## `GET /v1/funds/{fund_id}/portfolio` (key required)

The latest monthly asset allocation, as a % of net assets:

```json
{ "success": true, "fund_id": 12843, "as_of": "2026-08-01", "count": 4, "data": [
  { "asset_class": "Equities", "percent": 89.96 },
  { "asset_class": "Cash", "percent": 10.23 },
  { "asset_class": "Other & receivables", "percent": 0.69 },
  { "asset_class": "Liabilities", "percent": -0.88 } ] }
```

Allocations sum to about 100%. A negative `Liabilities` line is normal: it reconciles gross holdings to net assets. The asset classes include Cash, Equities, T-Bills, PIBs, GoP Ijara Sukuk, TFCs/Sukuk, placements, Commodity/Gold and others.

## Recipes

```python
import httpx, pandas as pd
H = {"X-API-Key": "pk_live_xxx"}
B = "https://api.pakdatahub.com/v1/funds"

# Top 10 money-market funds by 1-year return, from one call
s = pd.json_normalize(httpx.get(f"{B}/screener", headers=H).json()["data"])
mm = s[s["category"].str.contains("Money Market")]
print(mm.sort_values("returns.y1", ascending=False).head(10)[["name", "amc", "returns.y1", "ter_ytd"]])

# Full NAV history of one fund
nav = pd.DataFrame(httpx.get(f"{B}/12843/nav", params={"sort": "asc", "limit": 10000}, headers=H).json()["data"])
```

Related: [Fund analytics](https://pakdatahub.com/docs/api-fund-analytics.md) - [AMCs](https://pakdatahub.com/docs/api-amcs.md) - [Mutual funds dataset](https://pakdatahub.com/docs/data-mutual-funds.md).

---
Source: https://pakdatahub.com/docs/api-funds - PakDataHub docs index: https://pakdatahub.com/docs/llms.txt
