Building an AI agent? Start with /llms.txt for the full site index.
Capital Flows
Daily margin-purchase and short-sale balances per listed stock from the official TWSE margin trading report.
GET /v2/datasets/margin-shortmargin-short returns one row per stock per trading day with the margin-purchase and short-sale balances from the official TWSE margin trading report. Each row carries its source role so a balance is traceable to the official report. This endpoint is a preview surface — coverage is currently partial and served as a snapshot rather than a fully backfilled history.
| Field | Type | Description |
|---|---|---|
symbol | string | Ticker. |
date | string | Trading date. |
margin_balance | number | Margin-purchase balance (shares). |
short_balance | number | Short-sale balance (shares). |
margin_quota | number | Margin balance limit for the stock (shares). |
source_role | string | Canonical source role (official_twse_margin). |
TODO — exact row / symbol counts and the coverage window are pending a measured snapshot; the source is the official TWSE margin trading report. This is a preview surface with partial, snapshot-only coverage, so no counts are shown rather than fabricated ones.
A real response from this endpoint. Rows are returned under "rows", 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": "margin_short", "dataset_id": "margin_short", "rows": [ { "ticker": "2330", "market": "TWSE", "trade_date": "2026-07-09", "margin_purchase_buy": 1064, "margin_purchase_sell": 272, "margin_purchase_balance": 33061, "short_sale_buy": 0, "short_sale_sell": 14, "short_sale_balance": 71, "data_gaps": [], "source_provider": "twse_official", "source_role": "official_twse_mi_margn", "source_lineage": { "feeds": [ "margin_trading_daily", "short_selling_daily" ], "merged_from": "margin_short_daily", "transformation_version": "margin_short_deep_merge_v1" }, "not_investment_advice": true, "symbol": "2330", "as_of_date": "2026-07-09", "margin_balance": 33061, "short_balance": 71, "margin_purchase": 1064, "short_sale": 14, "margin_utilization_ratio": 0.0021475454462962403 }, { "ticker": "2330", "market": "TWSE", "trade_date": "2026-07-08", "margin_purchase_buy": 807, "margin_purchase_sell": 829, "margin_purchase_balance": 32283, "short_sale_buy": 4, "short_sale_sell": 8, "short_sale_balance": 85, "data_gaps": [], "source_provider": "twse_official", "source_role": "official_twse_mi_margn", "source_lineage": { "feeds": [ "margin_trading_daily", "short_selling_daily" ], "merged_from": "margin_short_daily", "transformation_version": "margin_short_deep_merge_v1" }, "not_investment_advice": true, "symbol": "2330", "as_of_date": "2026-07-08", "margin_balance": 32283, "short_balance": 85, "margin_purchase": 807, "short_sale": 8, "margin_utilization_ratio": 0.0026329647182727752 } ], "count": 50, "plan_id": "enterprise", "meta": { "plan": "enterprise", "row_limit": 100000, "market": "TWSE", "private_beta_contract": true, "is_limited": false }}Captured from the live API on 2026-07-20.
curl "https://api.twmarketdata.com/v2/datasets/margin-short?symbol=2330" \ -H "X-API-Key: sk_live_..."| Parameter | Required | Type | Description |
|---|---|---|---|
symbol | Yes | string | Ticker, e.g. 2330. |
start_date | No | string (YYYY-MM-DD) | Start of the query range. |
end_date | No | string (YYYY-MM-DD) | End of the query range. |
limit | No | integer | Maximum rows to return. |
A first call:
import requests resp = requests.get( "https://api.twmarketdata.com/v2/datasets/margin-short", params={"symbol": "2330"}, headers={"X-API-Key": "sk_live_..."},)resp.raise_for_status()print(resp.json()["rows"])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/margin-short", params={"symbol": "2330"}, headers={"X-API-Key": "sk_live_..."},)resp.raise_for_status()for row in resp.json()["rows"]: print(row)This endpoint is GET /v2/datasets/margin-short. The full machine-readable schema (parameters, security, response envelope) lives in the OpenAPI spec.