# ETF Disclosed Portfolio

Periodically disclosed ETF security holdings with quantity, market value, NAV weight, and float ownership ratio. The latest reporting periods are revisited every Sunday.

`GET /v2/etf/portfolio`

## Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `symbol` | string | No | ETF code, e.g. 510300.SH |
| `con_symbol` | string | No | Constituent security code, e.g. 300750.SZ |
| `start_date` | string | No | Reporting-period start date, YYYYMMDD |
| `end_date` | string | No | Reporting-period end date, YYYYMMDD |
| `period` | string | No | Reporting period, YYYYMMDD |
| `ann_date` | string | No | Announcement date, YYYYMMDD |

## Response Fields

| Field | Type | Description |
| --- | --- | --- |
| `symbol` | string | ETF code |
| `ann_date` | string | Announcement date, YYYYMMDD |
| `end_date` | string | Reporting period, YYYYMMDD |
| `con_symbol` | string | Constituent security code |
| `mkv` | number | Holding market value |
| `amount` | number | Holding quantity |
| `stk_mkv_ratio` | number | Holding market value as a percentage of fund NAV |
| `stk_float_ratio` | number | Holding quantity as a percentage of free float |

## API Example

cURL

```
curl -H "X-API-Key: YOUR_KEY" \
  "https://asharehub.com/v2/etf/portfolio?symbol=510300.SH&period=20260630"
```

Python SDK

```
from asharehub import AShareHub

client = AShareHub(api_key="YOUR_KEY")
df = client.etf_portfolio(symbol="510300.SH", period="20260630")
print(df.head())
```

## Sample Data

returns a pandas.DataFrame

| symbol | ann_date | end_date | con_symbol | mkv | amount | stk_mkv_ratio | stk_float_ratio |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 510300.SH | 20260721 | 20260630 | 300308.SZ | 4504019440 | 3546472 | 4.95 | 0.32 |
| 510300.SH | 20260721 | 20260630 | 300750.SZ | 3364164420.97 | 8559997 | 3.7 | 0.2 |
| 510300.SH | 20260721 | 20260630 | 300502.SZ | 2746497756 | 4524708 | 3.02 | 0.36 |
