Director Holdings
Retrieve the monthly shareholding balances, pledged shares, and pledge ratios of directors, supervisors, and managers for a given stock within a year-month range.
GET /ownership/director-holdings/{symbol}
Version Note
Available since v2.4.0
Parameters
| Name | Type | Description |
|---|---|---|
symbol* | string | Stock symbol (e.g. 2330), path parameter |
from | string | Start month (format: yyyy-MM; yyyy-MM-dd is also accepted, with only the year and month used); when both from and to are omitted, the latest month is returned |
to | string | End month (format: yyyy-MM; yyyy-MM-dd is also accepted, with only the year and month used); when only one of from / to is provided, it is treated as a query for that year-month |
sort | string | Sort by year-month, defaults to desc; asc is also supported |
Response
| Name | Type | Description |
|---|---|---|
type* | string | Security type |
exchange* | string | Exchange |
market* | string | Market |
symbol* | string | Stock symbol |
data* | object[] | One entry per month |
data.date* | string | Data year-month (format: yyyy-MM) |
data.directors* | object[] | Shareholding details of directors, supervisors, and managers |
data.directors.order* | number | Disclosure order (starting from 0) |
data.directors.title* | string | Title (e.g. 董事長本人, 獨立董事本人, 總經理本人) |
data.directors.name* | string | Name of the individual or juridical person |
data.directors.electedShares | number | Shares held at election (shares) |
data.directors.heldShares | number | Current shares held (shares) |
data.directors.pledgedShares | number | Pledged shares (shares) |
data.directors.pledgeRatio | number | Pledge ratio (ratio value, 0.2146 means 21.46%) |
data.directors.relatedHeldShares | number | Combined shares held by spouse, minor children, and nominees (shares) |
data.directors.relatedPledgedShares | number | Pledged shares of the aforementioned holdings (shares) |
data.directors.relatedPledgeRatio | number | Pledge ratio of the aforementioned holdings (ratio value) |
Data Notes
- Data source: Compiled from the shareholding balance disclosures of directors, supervisors, and managers published on the Market Observation Post System (MOPS).
- Data frequency: One entry per month, with
datebeing the data year-month. - Historical coverage: Available from 2017-01. Covers TWSE-listed, TPEx-listed, and emerging-market stocks. For symbols without director data such as ETFs,
data: []is returned. - Year-month semantics:
from/toare month-based; full dates are also accepted with the day part ignored (2026-07-15is treated as2026-07). - Query range: The span between
fromandtomust be less than 1 year, otherwise400is returned. Invalid dates orfromlater thantoalso return400. - No data: For nonexistent symbols or ranges without data,
200withdata: []is returned (not404). In this casetype/exchange/marketare default values and do not reflect the symbol's actual attributes.
Example
- Python
- Node.js
- C#
from fubon_neo.sdk import FubonSDK, Order
sdk = FubonSDK()
accounts = sdk.login("Your ID", "Your password", "Your cert path", "Your cert password")
sdk.init_realtime() # Establish market data connection
reststock = sdk.marketdata.rest_client.stock
## Version 2.2.6 and later using following Exception for error handling
from fubon_neo.sdk import FugleAPIError
try:
response = reststock.ownership.director_holdings(**{"symbol": "2330", "from": "2026-07", "to": "2026-08"})
except FugleAPIError as e:
print(f"Error: {e}")
print("------------")
print(f"Status Code: {e.status_code}") # ex: 429
print(f"Response Text: {e.response_text}") # ex: {"statusCode":429,"message":"Rate limit exceeded"}
print(response)
const { FubonSDK } = require('fubon-neo');
const sdk = new FubonSDK();
const accounts = sdk.login("Your ID", "Your Password", "Your Cert Path", "Your Cert Password");
sdk.initRealtime(); // Establish market data connection
const client = sdk.marketdata.restClient
client.stock.ownership.directorHoldings({ symbol: '2330', from: '2026-07', to: '2026-08' })
.then(data => console.log(data));
using FubonNeo.Sdk;
using FugleMarketData.QueryModels.Stock.Ownership;
var sdk = new FubonSDK();
var result = sdk.Login("Your ID", "Your Password", "Your Cert Path", "Your Cert Password");
sdk.InitRealtime(); // Establish market data connection
var rest = sdk.MarketData.RestClient.Stock;
var directorHoldings = await rest.Ownership.DirectorHoldings("2330", new()
{
From = new DateTime(2026, 7, 1),
To = new DateTime(2026, 8, 1)
});
var directorHoldings_cont = directorHoldings.Content.ReadAsStringAsync().Result;
Console.WriteLine(directorHoldings_cont);
Response Body (to keep this example short, only the first 2 entries of directors are shown and the truncation is marked with ...; the actual response contains the full details of the month, using data for the 2026-07 period (2026-08 had not been published at query time, so only 2026-07 is returned)):
{
"type": "EQUITY",
"exchange": "TWSE",
"market": "TSE",
"symbol": "2330",
"data": [
{
"date": "2026-07",
"directors": [
{
"order": 0,
"title": "董事長本人",
"name": "魏哲家",
"electedShares": 6392834,
"heldShares": 7452349,
"pledgedShares": 1600000,
"pledgeRatio": 0.2146,
"relatedHeldShares": 700261,
"relatedPledgedShares": 0,
"relatedPledgeRatio": 0
},
{
"order": 1,
"title": "董事本人",
"name": "行政院國家發展基金管理會",
"electedShares": 1653709980,
"heldShares": 1653709980,
"pledgedShares": 0,
"pledgeRatio": 0,
"relatedHeldShares": 0,
"relatedPledgedShares": 0,
"relatedPledgeRatio": 0
}
// ... remaining entries omitted
]
}
]
}