解答
TWSE API 有什麼限制?官方 OpenAPI 怎麼用、什麼時候該換?
TWSE 官方 OpenAPI 免費、免金鑰、資料權威,直接 GET 就回 JSON。使用上主要的邊界有三個:多數端點回傳的是「最新一期」快照而非歷史區間、日期是民國年字串、上市與上櫃的同一份資料欄位命名不同。只要你自己每期抓下來存、做好欄位對映,它完全夠用。
先講清楚:官方 OpenAPI 是第一手來源,而且免費
臺灣證券交易所(TWSE)與證券櫃檯買賣中心(TPEx)都提供開放資料 API,不需要註冊、不需要 API key,直接 HTTP GET 就回傳 JSON 陣列。這是所有台股資料的源頭——包括本站在內,任何第三方的資料最終都來自這裡。如果你要的東西官方端點就有,而且你願意自己處理後續的整理工作,直接用官方的是最合理的選擇。
curl "https://openapi.twse.com.tw/v1/opendata/t187ap05_L"限制一:多數端點回的是「最新一期」,不是歷史區間
這是實務上最常撞到的一點。以上市月營收端點 t187ap05_L 為例,呼叫它會回傳最新一期的全市場快照(2026-07-31 實測約一千多筆,全部屬於同一個資料年月),而不是可指定期間的歷史查詢。試著加上 ?date= 之類的參數,回傳內容不會改變。換句話說,歷史深度不是「查」出來的,是你自己每個月固定抓一次、存進自己的資料庫、日積月累出來的。如果你今天才開始,就沒有去年的資料。
curl -s "https://openapi.twse.com.tw/v1/opendata/t187ap05_L?date=202401" | head -c 200
# 回傳與不帶參數時相同:仍是最新一期限制二:日期是民國年字串,欄位名是中文
回傳的日期形如 1150730,代表民國 115 年 7 月 30 日,需要自己轉成西元。欄位名稱多為中文字串(例如「營業收入-當月營收」「公司代號」),寫程式時要嘛用中文 key,要嘛自己做一層對映。數值也是字串型別,需自行轉型;部分欄位帶有全形空白或「-」表示無資料。這些都能處理,只是每接一個端點就要重做一次。
限制三:上市與上櫃分屬兩套 API,欄位不同名
同一份邏輯上的資料,上市在 openapi.twse.com.tw、上櫃在 www.tpex.org.tw,而且欄位命名慣例不同。以公司基本資料為例,上市的 t187ap03_L 用中文欄名(公司代號、董事長),上櫃的 mopsfin_t187ap03_O 用英文欄名(SecuritiesCompanyCode、Chairman)。要做全市場的分析,就得自己維護一份跨市場的欄位對映表,並且在官方調整格式時跟著更新。
額度與格式:以官方公告為準
官方並未在端點回應中提供明確的速率限制標頭,實際的請求額度、使用條款與格式異動請以 TWSE 與 TPEx 的官方公告為準——這也是唯一可靠的來源。務實的做法是自己節流、加上重試與快取,不要假設可以高頻輪詢。
什麼時候該換成可追溯的 API
官方端點適合的情境是:你要的是當期資料、量不大、願意自己維運抓取與清洗。當出現以下任一情況,自建的成本會開始超過收益——需要多年歷史做回測、需要跨資料集(價格 × 營收 × 籌碼)在一次查詢裡完成、需要每一筆資料能追回來源與知悉時點做 point-in-time 驗證、或需要讓 AI agent 自行探索端點。
# TW Market Data:同一套 schema,跨資料集、可指定區間
curl "https://api.twmarketdata.com/v2/datasets/monthly-revenue?symbol=2330" \
-H "X-API-Key: $TWMD_API_KEY"相關連結