Building an AI agent? Start with /llms.txt for the full site index.
Funds & Corporate Intelligence
ETF holdings — the latest disclosed constituent list per ETF (constituent, weight, as-of date), sourced from the issuer.
GET /v2/datasets/etf-holdingsetf-holdings is a reference dataset: for each ETF it returns the constituents of its latest disclosed portfolio with each one's weight, sourced from the issuer. It is an issuer-limited latest snapshot — the coverage is only the ETFs whose holdings the issuer publishes, and only the most recent disclosure, not a market-wide or historical holdings series. Each row carries a source role and lineage so a weight can be reconciled against the issuer disclosure.
| Field | Type | Description |
|---|---|---|
symbol | string | ETF code (e.g. 0050). |
constituent_symbol | string | Ticker of the held constituent. |
constituent_name | string | Name of the held constituent. |
weight_pct | number | Constituent weight in the ETF (percent). |
as_of | string | Disclosure date of this holdings snapshot. |
source_role | string | Canonical source role (issuer_etf_holdings). |
| Rows | 9,425 |
| Window | 2026-06-04 – 2026-07-16 |
| Grade | Reference |
A real response from this endpoint. Rows are returned under "data", and provenance is carried in the shape shown below — it is not identical across datasets, so read this page's rather than assuming another's.
{ "dataset_id": "etf_holdings", "request_context": { "scope": "fubon_issuer_limited_latest_available_snapshot_set", "coverage_type": "latest_available_snapshot_set", "filters": { "etf_code": null, "issuer": null, "as_of_date": null, "holding_ticker": null, "market": null, "source_family": null, "limit": 50 }, "min_as_of_date": "2026-07-16", "max_as_of_date": "2026-07-16" }, "quality": { "row_count": 50, "etf_count": 1, "sensitive_fields_exposed": false }, "lineage": { "source_providers": [ "etfapi.yuantaetfs.com" ], "source_roles": [ "etf_holdings" ], "source_families": [ "pcf_yuanta" ] }, "error": null, "data": [ { "etf_code": "0050", "etf_name": "<Chinese value - see the zh page>", "issuer": "yuanta", "market": "TWSE", "as_of_date": "2026-07-16", "holding_ticker": "1216", "holding_name": "<Chinese value - see the zh page>", "holding_weight": 0.38, "holding_units": 108225075, "holding_market": null, "source_provider": "etfapi.yuantaetfs.com", "source_role": "etf_holdings", "source_family": "pcf_yuanta", "lineage": { "url": "https://etfapi.yuantaetfs.com/ectranslation/api/bridge?APIType=ETFAPI&CompanyName=YUANTAFUNDS&PageName=%2FtradeInfo%2Fpcf%2F0050&DeviceId=null&FuncId=PCF%2FDaily&AppName=ETF&Device=3&Platform=ETF&ticker=0050&ndate=20260716", "parser": "feature_engine.etf.pcf_sources:yuanta", "source": "official_issuer_pcf", "pcf_meta": { "nav": 106.36, "fundid": "1066", "osunit": 21113000000, "anndate": "20260717", "totalav": 2245633183230, "upddate": "2026-07-16 16:24:05", "trandate": "20260716", "inkind_rows": 50 }, "fetched_at": "2026-07-18T17:47:07.565821+00:00", "parser_version": "v1" }, "data_gaps": [] }, { "etf_code": "0050", "etf_name": "<Chinese value - see the zh page>", "issuer": "yuanta", "market": "TWSE", "as_of_date": "2026-07-16", "holding_ticker": "1303", "holding_name": "<Chinese value - see the zh page>", "holding_weight": 1.07, "holding_units": 108086690, "holding_market": null, "source_provider": "etfapi.yuantaetfs.com", "source_role": "etf_holdings", "source_family": "pcf_yuanta", "lineage": { "url": "https://etfapi.yuantaetfs.com/ectranslation/api/bridge?APIType=ETFAPI&CompanyName=YUANTAFUNDS&PageName=%2FtradeInfo%2Fpcf%2F0050&DeviceId=null&FuncId=PCF%2FDaily&AppName=ETF&Device=3&Platform=ETF&ticker=0050&ndate=20260716", "parser": "feature_engine.etf.pcf_sources:yuanta", "source": "official_issuer_pcf", "pcf_meta": { "nav": 106.36, "fundid": "1066", "osunit": 21113000000, "anndate": "20260717", "totalav": 2245633183230, "upddate": "2026-07-16 16:24:05", "trandate": "20260716", "inkind_rows": 50 }, "fetched_at": "2026-07-18T17:47:07.565821+00:00", "parser_version": "v1" }, "data_gaps": [] } ], "data_count": 50, "known_gaps": [ "latest_available_snapshot_only", "issuer_limited_fubon_only", "approved_etf_scope_only=fubon_page_discovered_50_etfs" ], "warnings": [ "not_investment_advice" ], "envelope": { "dataset_id": "etf_holdings", "scope": "fubon_issuer_limited_latest_available_snapshot_set", "row_count": 50 }}Captured from the live API on 2026-07-20.
Chinese data values are shown as a marker here so this page stays in English; the /zh page shows them verbatim.
curl "https://api.twmarketdata.com/v2/datasets/etf-holdings?symbol=2330" \ -H "X-API-Key: sk_live_..."| Parameter | Required | Type | Description |
|---|---|---|---|
symbol | No | string | Ticker to filter to a single security. |
limit | No | integer | Maximum rows to return. |
A first call:
import requests resp = requests.get( "https://api.twmarketdata.com/v2/datasets/etf-holdings", params={"symbol": "2330"}, headers={"X-API-Key": "sk_live_..."},)resp.raise_for_status()print(resp.json()["data"])With a date-range filter:
import requests # The full verified example — the same call with every supported filter set.resp = requests.get( "https://api.twmarketdata.com/v2/datasets/etf-holdings", params={"symbol": "2330"}, headers={"X-API-Key": "sk_live_..."},)resp.raise_for_status()for row in resp.json()["data"]: print(row)This endpoint is GET /v2/datasets/etf-holdings. The full machine-readable schema (parameters, security, response envelope) lives in the OpenAPI spec.