Building an AI agent? Start with /llms.txt for the full site index.
Capital Flows
Per-ticker daily short-sale restriction state: whether a short-sale control is active, margin-short and SBL limit values, disposition-active flag, and a restriction note. Derived from short-sale-balance-control + attention/disposition events. Not a forecast, not a recommendation.
GET /v2/datasets/short-restriction-flagsThis dataset is in build and not yet queryable via the API. The coverage and honest limitations below are the real database state; it moves off "Building" once serving lands (targeted 8/1).
| Field | Type | Description |
|---|---|---|
has_short_sale_control | bool | |
ms_limit_value | ||
sbl_limit_value | ||
disposition_active | bool | |
restriction_note | text | scope per row |
42,609 rows, 2009-12-29..2026-07-31, 1,646 tickers. HONEST GAP: the official (below-par short-sale eligibility) list is not loaded — has_short_sale_control reflects the control/disposition sources present; restriction_note explains scope per row.
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": "short-restriction-flags", "row_count": 3, "data": [ { "ticker": "8383", "market": "TPEx", "trade_date": "2026-07-31", "has_short_sale_control": false, "ms_limit_value": null, "sbl_limit_value": null, "disposition_active": true, "restriction_note": null }, { "ticker": "6907", "market": "TPEx", "trade_date": "2026-07-30", "has_short_sale_control": false, "ms_limit_value": null, "sbl_limit_value": null, "disposition_active": true, "restriction_note": null }, { "ticker": "6173", "market": "TPEx", "trade_date": "2026-07-30", "has_short_sale_control": false, "ms_limit_value": null, "sbl_limit_value": null, "disposition_active": true, "restriction_note": null } ]}Captured from the live API on 2026-07-20.
curl "https://api.twmarketdata.com/v2/datasets/short-restriction-flags?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/short-restriction-flags", 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/short-restriction-flags", 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/short-restriction-flags. The full machine-readable schema (parameters, security, response envelope) lives in the OpenAPI spec.