Skip to main content

TDCC Distribution

Retrieve the periodic TDCC shareholding distribution of a given stock within a date range, including the number of shareholders, shares held, and proportion of TDCC-deposited shares for each holding range.

GET /ownership/tdcc-distribution/{symbol}
Version Note

Available since v2.4.0

Parameters​

NameTypeDescription
symbol*stringStock symbol (e.g. 2330), path parameter
fromstringStart date (format: yyyy-MM-dd); when both from and to are omitted, the latest period is returned
tostringEnd date (format: yyyy-MM-dd); when only one of from / to is provided, it is treated as a single-day query for that date
sortstringSort by date, defaults to desc; asc is also supported

Response​

NameTypeDescription
type*stringSecurity type
exchange*stringExchange
market*stringMarket
symbol*stringStock symbol
data*object[]One entry per period
data.date*stringPublication base date
data.distributions*object[]Breakdown by holding range
data.distributions.range*stringHolding range (shares), 15 fixed ranges; also includes a "合計" (total) row, and some periods include a "異動" (adjustment) row
data.distributions.holders*numberNumber of shareholders
data.distributions.shares*numberShares held (shares)
data.distributions.proportion*numberProportion of TDCC-deposited shares (percentage value, 84.67 means 84.67%)
Data Notes
  • Data source: Compiled from the TDCC shareholding distribution tables published by the Taiwan Depository & Clearing Corporation.
  • Data frequency: Published once a week, with date being the publication base date (usually Friday; may be earlier around holidays). Historical data before 2015-05-08 is monthly.
  • Historical coverage: From 2013-07-01, covering TWSE-listed, TPEx-listed, and emerging-market stocks.
  • Single-day queries: Data only exists on publication base dates. When only one of from / to is provided (treated as a single-day query) and that date is not a publication base date, data: [] is returned.
  • Query range: The span between from and to must be less than 1 year, otherwise 400 is returned. Invalid dates or from later than to also return 400.
  • No data: For nonexistent symbols or ranges without data, 200 with data: [] is returned (not 404). In this case type / exchange / market are default values and do not reflect the symbol's actual attributes.

Example​

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.tdcc_distribution(**{"symbol": "2330", "from": "2026-08-07", "to": "2026-08-07"})
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)

Response Body (data for the 2026-08-07 period; one period consists of 15 fixed ranges, and this period also includes the "異動" (adjustment) and "合計" (total) rows):

{
"type": "EQUITY",
"exchange": "TWSE",
"market": "TSE",
"symbol": "2330",
"data": [
{
"date": "2026-08-07",
"distributions": [
{
"range": "1-999",
"holders": 2523071,
"shares": 293744991,
"proportion": 1.13
},
{
"range": "1000-5000",
"holders": 454920,
"shares": 869533934,
"proportion": 3.35
},
{
"range": "5001-10000",
"holders": 53011,
"shares": 379122752,
"proportion": 1.46
},
{
"range": "10001-15000",
"holders": 17491,
"shares": 214496406,
"proportion": 0.82
},
{
"range": "15001-20000",
"holders": 8096,
"shares": 142302572,
"proportion": 0.54
},
{
"range": "20001-30000",
"holders": 7803,
"shares": 190826713,
"proportion": 0.73
},
{
"range": "30001-40000",
"holders": 3686,
"shares": 127930452,
"proportion": 0.49
},
{
"range": "40001-50000",
"holders": 2048,
"shares": 92338466,
"proportion": 0.35
},
{
"range": "50001-100000",
"holders": 4123,
"shares": 288118496,
"proportion": 1.11
},
{
"range": "100001-200000",
"holders": 2053,
"shares": 288258115,
"proportion": 1.11
},
{
"range": "200001-400000",
"holders": 1314,
"shares": 368794003,
"proportion": 1.42
},
{
"range": "400001-600000",
"holders": 584,
"shares": 285446281,
"proportion": 1.1
},
{
"range": "600001-800000",
"holders": 353,
"shares": 246354564,
"proportion": 0.94
},
{
"range": "800001-1000000",
"holders": 208,
"shares": 186782272,
"proportion": 0.72
},
{
"range": "1000001以上",
"holders": 1475,
"shares": 21958321050,
"proportion": 84.67
},
{
"range": "異動",
"holders": 1,
"shares": 1000,
"proportion": 0
},
{
"range": "合計",
"holders": 3080236,
"shares": 25932370067,
"proportion": 100
}
]
}
]
}