31 個のエンドポイント · マーケットデータ · ファンダメンタルズ · 機関投資家の売買動向 · その他
https://api.blave.orgapi-key と secret-key ヘッダーを付けるAPI plan or Blave Agent planstock_id:TWSE(上市)/TPEx(上櫃)の銘柄コード。例:2330、0050、00878、006208。英数字(ドット可)、≤ 8 文字。それ以外は 400 {"error": "Invalid stock_id"} を返します。start/end:YYYY-MM-DD、当日を含みます。各エンドポイントに別記がない限り形式は検証されません(文字列比較で絞り込みます)。必ず YYYY-MM-DD で送ってください。503 {"error": "Upstream rate limit. Please retry shortly."}。後で再試行してください。batch/<data_type>(リクエストごとに ≤ 50 銘柄)を使います。単一銘柄のエンドポイントをユニバース全体に対してループさせないでください。/studio/market/twstock/list なし。
data = requests.get(f"{BASE_URL}/studio/market/twstock/list" , headers=headers, timeout=60).json()["data"]# [{"stock_id": "00400A", "name": "主動國泰動能高息", "close": 14.72, "market": "TWSE",# "industry_code": None, "listing_date": None}, ...] # 2,392 rows in this response{"data": [...]}、約 2,400 行(上市+上櫃、ETF を含む。興櫃は除く)。
| フィールド | 型 | 説明 |
|---|---|---|
stock_id | string | コード |
name | string | 名称 |
close | float | null | 直近の日次終値(売買停止などでアップストリームにデータがない場合は null) |
market | string | TWSE(上市)または TPEx(上櫃) |
industry_code | string | null | TWSE/TPEx の数値の産業別(產業別)コードをそのまま返します(デコードなし)。ETF/会社以外の証券は null。主なコード:15 航運業、17 金融保險業、22 生技醫療業、24 半導體業、25 電腦及週邊設備業、26 光電業、27 通信網路業、28 電子零組件業、29 電子通路業、30 資訊服務業、31 其他電子業 |
listing_date | string | null | YYYY-MM-DD。ETF/会社以外の証券は null |
共通エラーのみ(両市場とも取得に失敗した場合は 500)。
[:N] で切り詰めると少数の業種に偏ります。/studio/market/twstock/info/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 |
info = requests.get(f"{BASE_URL}/studio/market/twstock/info/2330" , headers=headers, timeout=30).json()["data"]# {"stock_id": "2330", "name": "台積電", "close": 2410.0, "industry_code": "24", "listing_date": "1994-09-05"}{"stock_id": "<stock_id>", "data": {...}}。data のフィールドは /list の一行と同じです。
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Invalid stock_id"} | 形式チェックに失敗 |
| 404 | {"error": "Stock not found"} | 現在上場中の証券ではない |
/list と同じキャッシュから返します。/studio/market/twstock/price/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | 上場(上市)または店頭(上櫃)の株式/ETF のコード | 英数字(ドット可)、≤ 8 文字。例:2330、0050、00878、006208 | |
startstring · query | 開始日(当日を含む) | YYYY-MM-DD | 全履歴 |
endstring · query | 終了日(当日を含む) | YYYY-MM-DD | 取得可能な最新日 |
response = requests.get(f"{BASE_URL}/studio/market/twstock/price/2330" , headers=headers, timeout=60)data = response.json()["data"] # no start/end → full history, 8,069 rows# [{"date": "1994-10-01", "stock_id": "2330", "open": 171.0, "high": 172.0,# "low": 171.0, "close": 172.0, "spread": 1.0,# "volume": 1660506, "turnover_value": 284858008, "turnover_count": 684},# {"date": "1994-10-03", "stock_id": "2330", "open": 172.0, "high": 173.0,# "low": 171.0, "close": 172.0, "spread": 0.0,# "volume": 1560000, "turnover_value": 268084000, "turnover_count": 711}, ...]{"stock_id": "<stock_id>", "data": [ ... ]}。行は date の昇順。
| フィールド | 型 | 単位 | 説明 |
|---|---|---|---|
date | string | YYYY-MM-DD | 取引日 |
stock_id | string | — | 銘柄コード |
open / high / low / close | float | 台湾ドル | 未調整の価格 |
spread | float | 台湾ドル | 前日終値比 |
volume | int | 株(股) | 出来高 |
turnover_value | int | 台湾ドル | 売買代金 |
turnover_count | int | 件(筆) | 約定件数 |
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Invalid stock_id"} | stock_id が形式チェックに失敗 |
| 404 | {"error": "No data found for stock_id: <stock_id>"} | 不明なコード/アップストリームにデータなし |
| 503 | {"error": "Upstream rate limit. Please retry shortly."} | アップストリームのクォータ超過。後で再試行 |
start/end は形式を検証しません。形式が不正な値は 400 を返さず、文字列比較で絞り込まれます。必ず YYYY-MM-DD で送ってください。price_adj を使ってください。このエンドポイントは未調整の価格です。batch/price(リクエストごとに ≤ 50 銘柄)を使ってください。/studio/market/twstock/price_adj/<stock_id> /price/<stock_id> と同じ。
params = {"start": "2020-01-01", "end": "2024-12-31"}data = requests.get(f"{BASE_URL}/studio/market/twstock/price_adj/2330" , headers=headers, params=params, timeout=60).json()["data"]構造とフィールドは /price/<stock_id> と同じです。open/high/low/close は調整後の価格、volume/turnover_* は未調整の系列と同一です。
/price/<stock_id> と同じ。
/price 系列が更新されると再構築されます。/studio/market/twstock/quote/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 |
data = requests.get(f"{BASE_URL}/studio/market/twstock/quote/2330" , headers=headers, timeout=30).json()["data"]# {"open": 2415.0, "high": 2465.0, "low": 2415.0, "close": 2445.0,# "change_price": -20.0, "change_rate": -0.81, "average_price": 2432.58,# "volume": 4245, "total_volume": 26403, "amount": 10379025000, "total_amount": 64227410000,# "yesterday_volume": 27390, "buy_price": 2445.0, "buy_volume": 17,# "sell_price": 2450.0, "sell_volume": 11, "volume_ratio": 0.96,# "quote_time": "2026-07-03 14:30:00", "stock_id": "2330", "tick_type": 2}{"stock_id": "<stock_id>", "data": {...}}。data はフラットなオブジェクトです。
| フィールド | 型 | 説明 |
|---|---|---|
open / high / low / close | float | 当日のここまでの OHLC |
change_price / change_rate | float | 前日終値比(台湾ドル/%) |
average_price | float | 平均約定価格 |
volume | int | 直近ティックの出来高 |
total_volume | int | 当日の累計出来高 |
amount / total_amount | float | 直近ティック/累計の売買代金 |
yesterday_volume | int | 前日の出来高 |
buy_price / buy_volume | float / int | 最良買い気配 |
sell_price / sell_volume | float / int | 最良売り気配 |
volume_ratio | float | 出来高比率 |
quote_time | string | YYYY-MM-DD HH:MM:SS。他のエンドポイントの date と異なり、完全なタイムスタンプです |
stock_id | string | コード |
tick_type | int | 0 判定不能、1 売り主導の約定(賣盤成交)、2 買い主導の約定(買盤成交) |
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Invalid stock_id"} | 形式チェックに失敗 |
| 404 | {"error": "No data found for stock_id: <stock_id>"} | 相場データなし |
| 503 | {"error": "Upstream rate limit. Please retry shortly."} | アップストリームのクォータ超過 |
/studio/market/twstock/quote | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idsstring · query必須 | 銘柄コード | カンマ区切り、≤ 50 銘柄 |
data = requests.get(f"{BASE_URL}/studio/market/twstock/quote" , headers=headers, params={"stock_ids": "2330,2317"}, timeout=30).json()["data"]# {"2330": {...}, "2317": {...}}{"data": {"<stock_id>": {...quote fields...}, ...}}。フィールドは /quote/<stock_id> と同じです。相場データのない銘柄は含まれません。
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "stock_ids parameter required"} | 未指定 |
| 400 | {"error": "stock_ids exceeds max 50 per request"} | 上限超過 |
| 400 | {"error": "Invalid stock_id in list"} | いずれかのコードが形式チェックに失敗 |
| 503 | {"error": "Upstream rate limit. Please retry shortly."} | アップストリームのクォータ超過 |
/studio/market/twstock/quote/all なし。
rows = requests.get(f"{BASE_URL}/studio/market/twstock/quote/all" , headers=headers, timeout=30).json()["data"]{"data": [{...quote fields...}, ...]}(約 2,800 行)。フィールドは /quote/<stock_id> と同じです。
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 503 | {"error": "Upstream rate limit. Please retry shortly."} | アップストリームのクォータ超過 |
/studio/market/twstock/minute/ohlcv/<stock_id>/<schema> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | 現在上場中の TWSE/TPEx の銘柄コード、または TAIEX(加權指數) | |
schemastring · path必須 | 時間足 | 1m, 5m, 15m, 30m, 60m, 1d | |
startstring · query | 開始日 | YYYY-MM-DD | end − その時間足の最大範囲 |
endstring · query | 終了日(当日を含む) | YYYY-MM-DD | 今日(UTC) |
adjuststring · query | 1 = 調整後(後復權)の OHLC。係数は /price_adj と同じです。volume は調整されません | 0, 1, true, false | 0 |
リクエストあたりの最大範囲(end − start):1m 31 日 · 5m 62 日 · 15m 93 日 · 30m 186 日 · 60m 365 日 · 1d 3650 日。
body = requests.get(f"{BASE_URL}/studio/market/twstock/minute/ohlcv/2330/1m" , headers=headers, params={"start": "2026-08-06", "end": "2026-08-06"}, timeout=60).json()# {"stock_id": "2330", "schema": "1m", "data": [# {"close": 2385.0, "high": 2395.0, "low": 2385.0, "open": 2395.0, "ts": "2026-08-06 01:00:00+00:00", "volume": 2540}, ...]}{"stock_id", "schema", "data": [...]}.
| フィールド | 型 | 単位 | 説明 |
|---|---|---|---|
ts | string | UTC の ISO 形式 | 足の開始時刻(分の開始でラベル付け)。台北時間 13:30 の足は引けの板寄せです |
open / high / low / close | float | 台湾ドル | 価格 |
volume | int | ロット(張)。株数ではない | 出来高。TAIEX の足はどの時間足でも常に volume: 0 です。指数には出来高がないため提供しません。売買代金として読まないでください |
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Invalid stock_id (must be a listed TWSE/TPEx security)"} | 上場していない |
| 400 | {"error": "Invalid schema. Allowed: [...]"} | 時間足が不正 |
| 400 | {"error": "Invalid adjust (use 0 or 1)"} | adjust が不正 |
| 400 | {"error": "Invalid date format. Use YYYY-MM-DD"} | 日付の形式が不正 |
| 400 | {"error": "date_range_too_large", "message": "...", "max_days": <n>} | 範囲が上限を超過 |
| 503 | {"error": "market data temporarily unavailable"} | ストアの読み取りに失敗 |
| 503 | {"error": "adjust factors temporarily unavailable"} | adjust=1 だが係数を取得できない場合。未調整のデータを黙って返すことはありません |
minute/ohlcv/symbols を確認してください。200 と [] を返します。/quote/<stock_id> を使ってください。/studio/market/twstock/minute/ohlcv/symbols なし。
covered = requests.get(f"{BASE_URL}/studio/market/twstock/minute/ohlcv/symbols" , headers=headers, timeout=30).json()["data"]{"data": ["2330", "TAIEX", ...]}:分足データをすでに保持している銘柄コード(現在上場中の銘柄と TAIEX)。ソート済み。
共通エラーのみ。
/studio/market/twstock/kbar/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | 現在上場中の TWSE/TPEx の銘柄コード、または TAIEX | |
startstring · query | 開始日 | YYYY-MM-DD | 今日 − 6 日 |
endstring · query | 終了日。end − start ≤ 31 日 | YYYY-MM-DD | 今日 |
data = requests.get(f"{BASE_URL}/studio/market/twstock/kbar/2330" , headers=headers, params={"start": "2026-08-03", "end": "2026-08-07"}, timeout=60).json()["data"]{"stock_id", "data": [...]}、昇順。
| フィールド | 型 | 説明 |
|---|---|---|
date | string | YYYY-MM-DD(台北時間) |
minute | string | HH:MM:SS 台北時間、足の開始時刻(09:00–13:30) |
stock_id | string | コード |
open / high / low / close | float | 台湾ドル |
volume | int | ロット(張) |
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Invalid stock_id (must be a listed TWSE/TPEx security)"} | 上場していない |
| 400 | {"error": "Date range exceeds 31 days"} | 範囲が長すぎる、または日付の形式が不正 |
minute/ohlcv/<stock_id>/1m の利用を推奨します。分足データのない上場銘柄は [] を返します(このエンドポイントは取り込みを開始しません)。minute/ohlcv/symbols に含まれる銘柄だけです。/studio/market/twstock/market_value/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 | |
startstring · query | 開始日 | YYYY-MM-DD | 全履歴 |
endstring · query | 終了日 | YYYY-MM-DD | 最新 |
data = requests.get(f"{BASE_URL}/studio/market/twstock/market_value/2330" , headers=headers, params={"start": "2026-01-01"}, timeout=60).json()["data"]{"stock_id", "data": [{"date", "stock_id", "market_value"}]}。market_value の単位は台湾ドルです。
400 stock_id が不正、404 データなし、503 アップストリームのクォータ超過。
/studio/market/twstock/market_value/all | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
topint · query | 時価総額の上位 N 件だけを返す | 1–3000 | 全件(約 2,400) |
body = requests.get(f"{BASE_URL}/studio/market/twstock/market_value/all" , headers=headers, params={"top": 10}, timeout=60).json()# {"date": "2026-09-17", "twse_ex_etf_market_value": 150952470507848,# "data": [{"is_etf": false, "market": "TWSE", "market_value": 62885997412475,# "name": "台積電", "rank": 1, "stock_id": "2330"},# ...,# {"is_etf": true, "market": "TWSE", "market_value": 2383312875000,# "name": "元大台灣50", "rank": 6, "stock_id": "0050"}, ...]}# Index weight of a 上市 non-ETF stock (works with any `top`, the denominator is whole-market)row = body["data"][0] # 2330 — market "TWSE", is_etf falseshare = row["market_value"] / body["twse_ex_etf_market_value"]# ETFs rank alongside stocks (0050 is rank 6) — filter them with `is_etf`. Never by code prefix,# and never by re-fetching a classification: `is_etf` already IS that classification.rows = requests.get(f"{BASE_URL}/studio/market/twstock/market_value/all" , headers=headers, params={"top": 100}, timeout=60).json()["data"]top50 = [r["stock_id"] for r in rows if not r["is_etf"]][:50] # ETF-free market-cap top 50tpex_only = [r["stock_id"] for r in rows if r["market"] == "TPEx"] # board filter is exact{"date": "YYYY-MM-DD", "twse_ex_etf_market_value": int, "data": [...]}。時価総額の降順。
| フィールド | 型 | 説明 |
|---|---|---|
date | string | 実際に使われた基準日(直近の公表日。今日より一日遅れることがあります) |
twse_ex_etf_market_value | int | 台湾ドル。同じ基準日における、market == "TWSE" かつ ETF でない行の合計。市場全体の分母であり、top を指定しても減りません |
data[].rank | int | 1 始まりの順位 |
data[].stock_id | string | コード |
data[].name | string | 名称 |
data[].market | string | "TWSE"(上市)または "TPEx"(上櫃)。TWSE/TPEx の上場銘柄名簿に基づきます |
data[].market_value | int | 台湾ドル |
data[].is_etf | bool | ランキング内の ETF は true(2026-09-17 時点で 2,370 行中 359 行)。false は「ETF の集合に含まれない」という意味で、「ETF でないと確認済み」という意味ではありません。産業分類のない証券(例:REIT の 01010T)は false になり、twse_ex_etf_market_value にも含まれたままです |
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "top must be an integer between 1 and 3000"} | top が不正 |
| 404 | {"error": "No recent market value data available"}(または上場銘柄リストが不完全である旨のメッセージ) | 直近のデータなし |
| 503 | {"error": "Upstream rate limit. Please retry shortly."} | アップストリームのクォータ超過 |
/market_value/<stock_id> をループさせず、このエンドポイントを使ってください。rank と twse_ex_etf_market_value はユニバースが異なります。rank は市場全体(上市+上櫃、ETF を含む)の順位で、分母を追加した後も変わっていません。分母は上市のみで、ETF(industry_category が {ETF, 上櫃ETF, 上櫃指數股票型基金(ETF)} のいずれか)を除きます。REIT と優先株は除かれません。したがって market_value / twse_ex_etf_market_value が指数ウェイトになるのは、market が "TWSE" で ETF でない行だけです。TPEx または ETF の行をこの分母で割ってもウェイトにはなりません。一方、rank は市場全体の順位のままです。この二つを同じランキングとして読まないでください。market は上場市場のタグであり、ETF フラグではありません。ETF フラグは is_etf です。ETF を除いたユニバースを作るときはこれを使います。stock_id の先頭から ETF を推測しないでください(00 は市場の慣例であって仕様ではなく、REIT の 01xxxT も拾えません)。分類を別の場所から取得し直すこともしないでください。is_etf は twse_ex_etf_market_value の計算に使う基準そのものなので、is_etf による絞り込みと分母が食い違うことはありません。/studio/market/twstock/per/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 | |
startstring · query | 開始日 | YYYY-MM-DD | 全履歴 |
endstring · query | 終了日 | YYYY-MM-DD | 最新 |
data = requests.get(f"{BASE_URL}/studio/market/twstock/per/2330" , headers=headers, params={"start": "2026-01-01", "end": "2026-07-22"}, timeout=60).json()["data"]# [{"date": "2026-07-21", "stock_id": "2330", "dividend_yield": 0.95, "PER": 34.87, "PBR": 11.05}, ...]{"stock_id", "data": [...]}.
| フィールド | 型 | 説明 |
|---|---|---|
date | string | 取引日 |
stock_id | string | コード |
dividend_yield | float | 配当利回り(%) |
PER | float | 株価収益率 |
PBR | float | 株価純資産倍率 |
400 stock_id が不正、404 データなし、503 アップストリームのクォータ超過。
batch/per を使ってください。/studio/market/twstock/financials/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 | |
startstring · query | 開始日 | YYYY-MM-DD | 2013-01-01 |
endstring · query | 終了日 | YYYY-MM-DD | 今日 |
import pandas as pddata = requests.get(f"{BASE_URL}/studio/market/twstock/financials/2330" , headers=headers, params={"start": "2022-01-01", "end": "2024-12-31"}, timeout=30).json()["data"]# [{"date": "2022-03-31", "stock_id": "2330", "type": "Revenue", "value": 491075000000.0, "origin_name": "營業收入"}, ...]wide = pd.DataFrame(data).pivot_table(index="date", columns="type", values="value", aggfunc="first"){"stock_id", "data": [...]}、ロング形式(四半期ごと・項目ごとに一行)。
| フィールド | 型 | 説明 |
|---|---|---|
date | string | 四半期末(03-31/06-30/09-30/12-31) |
stock_id | string | コード |
type | string | 項目コード。例:Revenue、GrossProfit、OperatingIncome、NetIncome、EPS、TAX、OtherComprehensiveIncome |
value | float | 値(台湾ドル。EPS は一株あたり台湾ドル) |
origin_name | string | 中国語の項目名。見慣れない type コードの判別に使います |
400 stock_id が不正、404 データなし、503 アップストリームのクォータ超過。
start の既定値は 2013-01-01 です。それより前の start を送ると、より古い行が返ります(2330 は 2000-06-30 まで遡れます)。/studio/market/twstock/balance_sheet/<stock_id> /financials/<stock_id> と同じ。
data = requests.get(f"{BASE_URL}/studio/market/twstock/balance_sheet/2330" , headers=headers, params={"start": "2022-01-01"}, timeout=30).json()["data"]/financials/<stock_id> と同じロング形式です。主な type コード:CashAndCashEquivalents、TotalAssets、TotalLiabilities、TotalEquity。末尾が _per のコードは総資産に対する % です。
400 stock_id が不正、404 データなし、503 アップストリームのクォータ超過。
start の既定値は 2013-01-01 です。それより前の start を送ると、より古い行が返ります(2330 は 2012-12-31 まで遡れます)。/studio/market/twstock/cashflow/<stock_id> /financials/<stock_id> と同じ。
import pandas as pddata = requests.get(f"{BASE_URL}/studio/market/twstock/cashflow/2330" , headers=headers, params={"start": "2022-01-01"}, timeout=30).json()["data"]cfo = (pd.DataFrame(data).query("type == 'CashFlowsFromOperatingActivities'") .assign(date=lambda d: pd.to_datetime(d["date"])).set_index("date")["value"].sort_index())cfo_q = cfo - cfo.groupby(cfo.index.year).shift(1).fillna(0) # YTD → single quarter/financials/<stock_id> と同じロング形式です。主な type コードは次のとおりです(アップストリームのデータセット独自のコードです。全体の集合は会社や年度によって異なるため、レスポンスを正とし、下記にないものは origin_name で判別してください)。絞り込みには origin_name ではなく type を使ってください。同じコードでも、年度によって項目名の括弧が全角と半角で入れ替わります:
type | origin_name |
|---|---|
CashFlowsFromOperatingActivities | 營業活動之淨現金流入(流出) |
CashProvidedByInvestingActivities | 投資活動之淨現金流入(流出) |
CashFlowsProvidedFromFinancingActivities | 籌資活動之淨現金流入(流出) |
PropertyAndPlantAndEquipment | 取得不動產、廠房及設備(設備投資、負の値) |
Depreciation / AmortizationExpense | 折舊費用/攤銷費用 |
CashBalancesIncrease | 本期現金及約當現金增加(減少)數 |
CashBalancesBeginningOfPeriod / CashBalancesEndOfPeriod | 期初(年初)/期末現金及約當現金餘額 |
フロー項目は、台湾での申告どおり年初来(YTD)累計です。03-31 の行は Q1 のみ、06-30 は Q1–Q2、09-30 は Q1–Q3、12-31 は通期です。単一四半期の値は、同じ年の前の四半期を差し引いて求めます(Q1 は差し引き不要)。そのため start は 1 月から取得してください。CashBalancesEndOfPeriod は四半期末の残高、CashBalancesBeginningOfPeriod は年初の残高です。このエンドポイントに period パラメータはなく、常に YTD を返します(単一四半期を表示する ?period=quarter はウェブのチャート用ルートにしかなく、ここにはありません)。
400 stock_id が不正、404 データなし、503 アップストリームのクォータ超過。
start の既定値は 2013-01-01 です。それより前の start を送ると、より古い行が返ります(2330 は 2012-03-31 まで遡れます)。/studio/market/twstock/monthly_revenue/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 | |
startstring · query | 開始日 | YYYY-MM-DD | 2000-01-01 |
endstring · query | 終了日 | YYYY-MM-DD | 今日 |
import pandas as pddata = requests.get(f"{BASE_URL}/studio/market/twstock/monthly_revenue/2330" , headers=headers, params={"start": "2024-01-01", "end": "2024-12-31"}, timeout=30).json()["data"]df = pd.DataFrame(data).sort_values(["revenue_year", "revenue_month"])df["yoy_pct"] = df["revenue"].pct_change(periods=12) * 100# [{"date": "2024-01-01", "stock_id": "2330", "country": "Taiwan", "create_time": "",# "revenue": 176299866000, "revenue_year": 2023, "revenue_month": 12},# {"date": "2024-02-01", "stock_id": "2330", "country": "Taiwan", "create_time": "",# "revenue": 215785127000, "revenue_year": 2024, "revenue_month": 1}, ...]{"stock_id", "data": [...]}、月ごとに一行。
| フィールド | 型 | 説明 |
|---|---|---|
date | string | 売上月の翌月の初日です。2024-01-01 の行は revenue_year: 2023、revenue_month: 12 です。これを売上の対象期間として使わないでください |
stock_id | string | コード |
country | string | 市場。観測される値は Taiwan |
create_time | string | すべての行で空("") |
revenue | int | 月次売上高。単位は台湾ドル(元)で、千元ではありません。これは桁数からの推定で、アップストリームには明記されていません。2330 の revenue_year 2024, revenue_month 1 は 215785127000 を返しており、元として読んだ場合(NT$215.8bn)にだけ妥当な数値になります |
revenue_month | int | 売上月(1–12)。対象期間には date ではなくこちらを使います |
revenue_year | int | 売上年 |
400 stock_id が不正、404 データなし、503 アップストリームのクォータ超過。
/studio/market/twstock/ratios/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 | |
startstring · query | 開始の四半期末日 | YYYY-MM-DD | 2013-01-01 |
endstring · query | 終了の四半期末日 | YYYY-MM-DD | 今日 |
import pandas as pddata = requests.get(f"{BASE_URL}/studio/market/twstock/ratios/2330" , headers=headers, params={"start": "2024-01-01"}, timeout=30).json()["data"]# [..., {"date": "2026-06-30", "stock_id": "2330",# "gross_margin_q": 67.7207, "gross_margin_ttm": 64.2302, "operating_margin_q": 60.3443, "operating_margin_ttm": 56.1009,# "net_margin_q": 55.6354, "net_margin_ttm": 50.3717, "roe_q": 11.3934, "roe_ttm": 40.3342, "roa_q": 7.8372, "roa_ttm": 27.3074,# "eps_q": 27.25, "eps_ttm": 86.28, "eps_yoy_q": 77.4089, "eps_yoy_ttm": 53.2232,# "revenue_yoy_q": 36.0453, "revenue_yoy_ttm": 30.5567, "revenue_qoq_q": 12.0163, "revenue_qoq_ttm": 8.2017,# "debt_ratio": 30.9438, "current_ratio": 245.7635, "quick_ratio": 225.0114, "equity_multiplier": 1.4481,# "interest_coverage_q": 280.5515, "interest_coverage_ttm": 227.0232,# "inventory_turnover_q": 1.1767, "inventory_turnover_ttm": 4.6058, "cfo_to_net_income_q": 1.1084, "cfo_to_net_income_ttm": 1.1779,# "fcf_q": 287363030000.0, "fcf_ttm": 1143556366000.0, "fcf_per_share_q": 11.0827, "fcf_per_share_ttm": 44.1036, ...}]df = pd.DataFrame(data).assign(date=lambda d: pd.to_datetime(d["date"])).set_index("date"){"stock_id", "data": [...]}、ワイド形式:四半期ごとに一行、古い順、比率ごとに一列。各比率は小数第 4 位に丸めた float、または null です。
| フィールド | 型 | 説明 |
|---|---|---|
date | string | 四半期末(03-31/06-30/09-30/12-31)。決算が公開された日ではありません |
stock_id | string | コード |
<ratio>_q | float | null | 単一四半期 |
<ratio>_ttm | float | null | 直近四四半期(単一四半期の値を四つ合計)。四つのうち一つでも欠けていれば null |
debt_ratio, current_ratio, quick_ratio, equity_multiplier | float | null | 期末時点の貸借対照表の比率。サフィックスなし |
<ratio>(それぞれ _q と _ttm の両方があります):
| グループ | 比率 | 単位 |
|---|---|---|
| 収益性 | gross_margin, operating_margin, pretax_margin, net_margin, opex_ratio, roe, roa | %(×100 済み) |
| 一株あたり | eps, revenue_per_share, fcf_per_share | 一株あたり台湾ドル |
| 成長性 | revenue_yoy, revenue_qoq, operating_income_yoy, net_income_yoy, eps_yoy | %(×100 済み) |
| 財務構造 | interest_coverage | 倍 |
| 効率性 | receivable_turnover, inventory_turnover, asset_turnover, cfo_to_net_income | 倍 |
| キャッシュフロー | fcf | 台湾ドル、実額(千単位ではない) |
サフィックスなしの列:debt_ratio、current_ratio、quick_ratio は %(×100 済み。流動比率 2.46 倍は 245.7635 で返ります)、equity_multiplier は倍です。
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Invalid stock_id"} | コードが形式チェックに失敗 |
| 404 | {"error": "No data found for stock_id: <id>"} | そのコードに財務諸表がない(0050/00878 などの ETF)、または start–end の範囲内に行がない |
| 503 | {"error": "Data temporarily unavailable. Please retry shortly."} | 比率ストアが未準備。後で再試行してください。「データなし」と読まないでください |
null です(売上総利益率、流動比率などがありません)。date でそのまま結合すると先読みバイアスになります。null を返し、0 にはなりません。per/<stock_id> を使用)と、月次売上高に関する比率(前年比/前月比は monthly_revenue/<stock_id> から計算してください)。GET /studio/market/twstock/batch/ratios?stock_ids=...(リクエストごとに ≤ 50 銘柄)。start を送っても、より古いデータは返りません。/studio/market/twstock/dividend/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | 現在上場中の銘柄コード(4–6 桁の数字、末尾に英字が付く場合あり) | |
startstring · query | 最初の効力発生日 | 厳密な YYYY-MM-DD | 全履歴 |
endstring · query | 最後の効力発生日 | 厳密な YYYY-MM-DD | 全履歴 |
範囲の絞り込みには三段階の効力発生日を使います。cash_ex_date があればそれ、なければ stock_ex_date、それもなければ record_date です。そのため、発表直後で権利落ち日が未定のイベントも返ります。
data = requests.get(f"{BASE_URL}/studio/market/twstock/dividend/2330" , headers=headers, params={"start": "2025-01-01", "end": "2025-12-31"}, timeout=30).json()["data"]# [{"record_date": "2025-03-24", "period": "113年第3季", "announce_date": "2025-03-03",# "cash_ex_date": "2025-03-18", "stock_ex_date": "", "pay_date": "2025-04-10",# "cash": 4.50002042, "stock": 0.0, "stock_ratio": 0.0}, ...]{"stock_id", "data": [...]}、公告の一行につき一行。
| フィールド | 型 | 説明 |
|---|---|---|
record_date | string | 権利確定の基準日(權利分派基準日)YYYY-MM-DD |
period | string | 配当の対象期間(股利所屬期間)。内容に規則のないラベルです(114年第3季、113、不適用…)。文字列として比較し、年に変換しないでください |
announce_date | string | 公告日。不明な場合は "" |
cash_ex_date | string | 配当落ち日(除息交易日)。なし/未定の場合は "" |
stock_ex_date | string | 権利落ち日(除權交易日)。ない場合は "" |
pay_date | string | 現金配当の支払日(現金股利發放日)。不明な場合は "" |
cash | float | 一株あたり現金配当(台湾ドル、盈餘+公積) |
stock | float | 一株あたり株式配当(元面額、盈餘+公積) |
stock_ratio | float | stock / 10。株式分割と同じ形の調整比率 |
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Invalid stock_id"} | 形式チェックに失敗 |
| 400 | {"error": "Invalid start date, expected YYYY-MM-DD"}(または end) | 日付の形式が不正 |
| 404 | {"error": "No data found for stock_id: <id>"} / {"error": "No dividend records for stock_id: <id>"} | 上場していない、または配当履歴がまったくない |
| 503 | {"error": "Upstream rate limit. Please retry shortly."} | アップストリームのクォータ超過 |
cash == 0 かつ stock == 0)も残します。無配の決定が公告されたことを表します。2330 の全履歴を取得したとき、最後の行はリクエスト日の一週間先でした。過去のイベントだけが必要な場合は、日付で絞り込んでください。200 + [] を返します(404 とは異なります)。404 です。/studio/market/twstock/news/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 | |
startstring · query | 開始日 | YYYY-MM-DD | 今日 − 6 日 |
endstring · query | 終了日。end − start ≤ 31 日 | YYYY-MM-DD | 今日 |
data = requests.get(f"{BASE_URL}/studio/market/twstock/news/2330" , headers=headers, params={"start": "2026-08-01", "end": "2026-08-07"}, timeout=60).json()["data"]{"stock_id", "data": [...]}、一日に複数の記事(週末を含む)。
| フィールド | 型 | 説明 |
|---|---|---|
date | string | 公開日時 |
stock_id | string | コード |
title | string | 見出し |
source | string | 配信元 |
link | string | URL |
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Date range exceeds 31 days"}、または日付の解析エラーのメッセージ | 範囲が長すぎる/日付の形式が不正 |
| 503 | {"error": "Upstream rate limit. Please retry shortly."} | アップストリームのクォータ超過 |
[] を返すことがあります。/studio/market/twstock/institutional/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 | |
startstring · query | 開始日 | YYYY-MM-DD | 全履歴 |
endstring · query | 終了日 | YYYY-MM-DD | 最新 |
data = requests.get(f"{BASE_URL}/studio/market/twstock/institutional/2330" , headers=headers, params={"start": "2024-01-01", "end": "2024-12-31"}, timeout=60).json()["data"]# [{"date": "2024-01-02", "stock_id": "2330", "foreign_buy": 28464159, "foreign_sell": 47404324,# "trust_buy": 5553520, "trust_sell": 269712, "dealer_self_buy": 452000, "dealer_self_sell": 366190,# "dealer_hedge_buy": 942546, "dealer_hedge_sell": 780090,# "foreign_dealer_self_buy": 0, "foreign_dealer_self_sell": 0}, ...]{"stock_id", "data": [...]}、ワイド形式、一日につき一行。値の単位はすべて株(股)です。
| フィールド | 説明 |
|---|---|
date, stock_id | 日付、銘柄コード |
foreign_buy / foreign_sell | 外国人投資家(外資。外国人自己売買部門を除く) |
trust_buy / trust_sell | 投資信託(投信) |
dealer_self_buy / dealer_self_sell | 自己売買部門の自己売買(自營商自行買賣) |
dealer_hedge_buy / dealer_hedge_sell | 自己売買部門のヘッジ(自營商避險) |
foreign_dealer_self_buy / foreign_dealer_self_sell | 外国人自己売買部門(外資自營商。ほぼ 0) |
400 stock_id が不正、404 データなし、503 アップストリームのクォータ超過。
*_buy − *_sell。GET /studio/market/twmarket/institutional)はまとめ方が異なります。該当のセクションを参照してください。/studio/market/twstock/margin/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 | |
startstring · query | 開始日 | YYYY-MM-DD | 全履歴 |
endstring · query | 終了日 | YYYY-MM-DD | 最新 |
import pandas as pddata = requests.get(f"{BASE_URL}/studio/market/twstock/margin/2330" , headers=headers, params={"start": "2024-01-01"}, timeout=60).json()["data"]df = pd.DataFrame(data)df["margin_util"] = df["margin_balance"] / df["margin_limit"] # 融資使用率{"stock_id", "data": [...]}、一日につき一行。値の単位は株ではなくロット(張)です。TWSE MI_MARGN と照合して確認済み:2026-09-15 の 2330 は margin_balance: 29282 と margin_limit: 6483092 を返し、同日の TWSE 公表値である今日餘額 29,282、次一營業日限額 6,483,092 と完全に一致しました。各行はそれぞれ date と stock_id を持ちます。全履歴を読む場合(start/end なし)は、すべての数値を同じ行から取ってください。margin_limit は毎日公表し直され、時期によって変わります。
| フィールド | 説明 |
|---|---|
margin_buy / margin_sell | 信用買い(融資)の買付/売却(融資買進/賣出) |
margin_cash_repay | 信用買い(融資)の現金返済(融資現金償還) |
margin_balance / margin_prev_balance | 信用買い(融資)の当日/前日残高(融資今日/前日餘額) |
margin_limit | 信用買いの限度額(融資限額)。その行の日付に TWSE が公表した次一營業日限額、つまり翌営業日に適用される上限です(2330 の 2026-09-15:6,483,092 ロット) |
short_buy / short_sell | 信用売り(融券)の買付/売却(融券買進/賣出) |
short_cash_repay | 信用売り(融券)の現金返済(融券現金償還) |
short_balance / short_prev_balance | 信用売り(融券)の当日/前日残高(融券今日/前日餘額) |
short_limit | 信用売りの限度額(融券限額) |
offset_loan_short | 信用買いと信用売りの相殺(資券相抵) |
400 stock_id が不正、404 データなし、503 アップストリームのクォータ超過。
/studio/market/twstock/gov_bank/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 | |
startstring · query | 開始日 | YYYY-MM-DD | 今日 − 6 日 |
endstring · query | 終了日。end − start ≤ 31 日 | YYYY-MM-DD | 今日 |
data = requests.get(f"{BASE_URL}/studio/market/twstock/gov_bank/2330" , headers=headers, params={"start": "2026-08-01", "end": "2026-08-07"}, timeout=60).json()["data"]{"stock_id", "data": [...]}、一日あたり最大 8 行(銀行ごとに一行)、日付・銀行の順でソート。
| フィールド | 説明 |
|---|---|
date, stock_id | 日付、銘柄コード |
bank_name | 銀行 |
buy / sell | 買付/売却の株数 |
buy_amount / sell_amount | 買付/売却の金額(台湾ドル) |
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Date range exceeds 31 days"}、または日付の解析エラーのメッセージ | 範囲が長すぎる/日付の形式が不正 |
| 503 | {"error": "Upstream rate limit. Please retry shortly."} | アップストリームのクォータ超過 |
/studio/market/twstock/lending/<stock_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 | |
startstring · query | 開始日 | YYYY-MM-DD | 全履歴 |
endstring · query | 終了日 | YYYY-MM-DD | 最新 |
data = requests.get(f"{BASE_URL}/studio/market/twstock/lending/2330" , headers=headers, params={"start": "2026-08-01"}, timeout=60).json()["data"]{"stock_id", "data": [...]}、一日に複数行。
| フィールド | 説明 |
|---|---|
date, stock_id | 日付、銘柄コード |
transaction_type | 競價 / 議借 |
volume | 数量 |
fee_rate | 貸株料率 |
close | 終値 |
original_return_date | 当初の返還日 |
original_lending_period | 当初の貸出期間 |
400 stock_id が不正、404 データなし、503 アップストリームのクォータ超過。
/studio/market/twstock/broker/search | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
namestring · query必須 | 検索する支店名 | 任意の部分文字列。大文字・小文字を区別しません |
rows = requests.get(f"{BASE_URL}/studio/market/twstock/broker/search" , headers=headers, params={"name": "松山"}, timeout=30).json()["data"]# [{"broker_id": "9217", "broker_name": "凱基-松山"}, ...]{"query": "<name>", "data": [{"broker_id", "broker_name"}]}.
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "name parameter required"} | 未指定 |
| 503 | {"error": "Upstream rate limit. Please retry shortly."} | アップストリームのクォータ超過 |
/studio/market/twstock/broker/stock/<stock_id> 単日は date を、範囲は start(+ end)を送ります。両方を送った場合は start が優先されます。
| 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
stock_idstring · path必須 | コード | このカテゴリの共通ルールを参照 | |
datestring · query | 単日 | YYYY-MM-DD | 今日 |
startstring · query | 範囲の開始日 | YYYY-MM-DD | |
endstring · query | 範囲の終了日。範囲は両端を含めて ≤ 366 日 | YYYY-MM-DD | start |
rows = requests.get(f"{BASE_URL}/studio/market/twstock/broker/stock/2330" , headers=headers, params={"start": "2026-08-03", "end": "2026-08-07"}, timeout=60).json()["data"]{"stock_id", "data": [...]}、支店ごと・日ごとに一行。
| フィールド | 型 | 説明 |
|---|---|---|
date | string | 取引日 |
stock_id | string | コード |
broker_id | string | 支店コード(920A のように英数字の場合があります) |
broker_name | string | 支店名 |
price | float | 出来高加重平均の約定価格 |
buy / sell | int | 買付/売却の株数 |
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Invalid stock_id"} | 形式チェックに失敗 |
| 400 | {"error": "Invalid date (YYYY-MM-DD)"} | 日付の形式が不正 |
| 400 | {"error": "start/end range is <n> days; max 366 (inclusive) — split into smaller ranges"} | 範囲が長すぎる |
| 503 | {"error": "Upstream rate limit. Please retry shortly."} | データを一時的に取得できません。再試行してください。「約定なし」と読まないでください |
200 + [] です。start/end を 2026-09-06 → 2026-09-13 にすると、broker/stock/<stock_id> と broker/trader/<trader_id> のどちらも、五つの取引日にまたがる行を返しました。/studio/market/twstock/broker/trader/<trader_id> date/start/end のルールは /broker/stock/<stock_id> と同じです。
| 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
trader_idstring · path必須 | /broker/search で得た支店コード | 英数字と -(例:9217、920A) | |
datestring · query | 単日 | YYYY-MM-DD | 今日 |
startstring · query | 範囲の開始日 | YYYY-MM-DD | |
endstring · query | 範囲の終了日。範囲は両端を含めて ≤ 366 日 | YYYY-MM-DD | start |
rows = requests.get(f"{BASE_URL}/studio/market/twstock/broker/trader/9217" , headers=headers, params={"date": "2026-08-07"}, timeout=60).json()["data"]{"trader_id", "data": [...]}、銘柄ごと・日ごとに一行。フィールドは date、broker_id、broker_name、stock_id、price、buy、sell(/broker/stock と同じ)。
/broker/stock/<stock_id> と同じです。加えて、コードが不正な場合は 400 {"error": "Invalid trader_id"} を返します。
/studio/market/twstock/alerts date を指定するか、start/end を指定するか、どちらも指定しません(= 台北時間の今日)。
| 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
datestring · query | 単日:その日に効力のある処置と、その日に公告された注意 | 厳密な YYYY-MM-DD。start/end とは併用不可 | |
startstring · query | 範囲の初日 | 厳密な YYYY-MM-DD | stock_id がある場合は 2001-01-01、それ以外は end − 365 日 |
endstring · query | 範囲の最終日(当日を含む) | 厳密な YYYY-MM-DD | 今日(start のほうが後ならその日) |
kindstring · query | 公告の種類 | disposal(處置)、notice(注意) | 両方 |
marketstring · query | 取引所 | twse, tpex | 両方 |
stock_idstring · query | 単一のコード。指定すると 366 日の上限が外れます | このカテゴリの共通ルールを参照 | すべて |
範囲の意味:処置はその期間(start–end)が範囲と重なる場合に、注意は公告の date が範囲内にある場合に返ります。stock_id を指定しない場合、範囲は両端を含めて最大 366 日です。市場全体でそれより長い範囲は分割してください(リクエストごとに一暦年なら収まります)。このカテゴリの既定と異なり、start/end/date は厳密に検証されます。
# disposals in force on one daydata = requests.get(f"{BASE_URL}/studio/market/twstock/alerts" , headers=headers, params={"date": "2026-10-13", "kind": "disposal"}, timeout=30).json()["data"]# [..., {"date": "2026-10-12", "stock_id": "5228", "stock_name": "鈺鎧", "market": "tpex",# "kind": "disposal", "count": 2, "start": "2026-10-13", "end": "2026-10-19",# "condition": "連續3個營業日", "measure": "第一次處置", "match_minutes": 2,# "reason": "* 公布日期:115/10/12\n* 證券代號:5228\n…", "close": 59.6, "pe": 29.22},# {"date": "2026-10-12", "stock_id": "2492", "stock_name": "華新科", "market": "twse",# "kind": "disposal", "count": 8, "start": "2026-10-13", "end": "2026-10-19",# "condition": "連續三次", "measure": "第一次處置", "match_minutes": 2,# "reason": "1處置原因:該有價證券之交易,連續三個營業日達本公司「公布注意交易資訊」標準。\n2處置期間:…", "close": None, "pe": None}, ...] # 36 rows# notices announced on one daynotes = requests.get(f"{BASE_URL}/studio/market/twstock/alerts" , headers=headers, params={"date": "2026-10-12", "kind": "notice"}, timeout=30).json()["data"]# [..., {"date": "2026-10-12", "stock_id": "5228", "stock_name": "鈺鎧", "market": "tpex",# "kind": "notice", "count": 15, "start": None, "end": None, "condition": "第一款、第三款、第四款",# "measure": None, "match_minutes": None,# "reason": "最近六個營業日(含當日)累積之最後成交價漲幅達32.63%(第一款)\n…", "close": 59.6, "pe": 29.22}, ...]# one stock's disposal history (no range cap with stock_id)hist = requests.get(f"{BASE_URL}/studio/market/twstock/alerts" , headers=headers, params={"stock_id": "2492", "kind": "disposal", "start": "2001-01-01"}, timeout=30).json()["data"]# 10 rows: 2001-11-23~2001-11-29 收足五成款券 (match_minutes None), 2018-05-08~2018-05-21 第一次處置 (5), …,# 2026-10-13~2026-10-19 第一次處置 (2){"start", "end", "data": [...]}。start/end には実際に適用された範囲が入ります(date を送った場合はどちらも date と同じ)。行は date、market、kind、stock_id の順でソートされます。公告ごとに一行です。
| フィールド | 型 | 説明 |
|---|---|---|
date | string | 公告日 YYYY-MM-DD(処置は翌取引日から効力が生じます) |
stock_id | string | コード。ワラント、ETF、転換社債を含みます(例:037060、45402) |
stock_name | string | null | 公表されたとおりの名称 |
market | string | twse(上市)または tpex(上櫃) |
kind | string | disposal または notice |
count | int | 取引所による累計回数(累計/累計次數) |
start, end | string | null | 処置期間(両端の日を含む)。注意では null |
condition | string | null | 処置:公表されたとおりの発動条件(連續三次、連續3個營業日、最近十個營業日已有六次 …)。注意:適用された条項(第一款、第五款)。ない場合は null |
measure | string | null | 処置の種類:第一次處置、第二次處置、再次處置、人工管制撮合、收足五成款券 …。注意と初期の TPEx の行では null |
match_minutes | int | null | 処置:本文から読み取った「約每N分鐘撮合一次」の N。本文に記載がない場合(2011 年頃より前の TWSE の処置はすべて本文が空白。板寄せ以外の措置も該当)と注意では null |
reason | string | null | 公告の全文。取引所が本文を公表していない場合(2011-03 より前の TWSE の処置すべて)は null(処置は處置內容、注意は注意交易資訊) |
close, pe | float | null | 公告時点の終値と PER。TWSE の処置では常に null |
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Invalid start date, expected YYYY-MM-DD"}(または end) | start/end の形式が不正 |
| 400 | {"error": "start must not be after end"} | 範囲が逆転 |
| 400 | {"error": "Invalid date, expected YYYY-MM-DD"} | date の形式が不正 |
| 400 | {"error": "use either date or start/end"} | date を start または end と同時に送信 |
| 400 | {"error": "Invalid stock_id"} | 形式チェックに失敗 |
| 400 | {"error": "kind must be one of ['disposal', 'notice']"} / {"error": "market must be one of ['twse', 'tpex']"} | 不明な値 |
| 400 | {"error": "start/end range is <n> days; max 366 (inclusive) without stock_id — split into smaller ranges"} | stock_id なしで範囲が 366 日を超過 |
| 503 | {"error": "Data temporarily unavailable. Please retry shortly."} | リクエストしたテーブルを提供できません(48 時間更新されていない、または読み取れない)。後で再試行してください。「公告なし」と読まないでください。チェックするのは、リクエストされた kind/market のテーブルだけです |
date は公告日、start は効力が生じる最初の日です。「D 日に処置中か」を調べるには、公告日ではなく date=D(または start=end=D)を使ってください。start/end は公告された期間です。期間中に休場日や売買停止があると実際の終了日は延びますが、このデータには記録されません。match_minutes は当時の規則に従います(TPEx は 5/20 分 → 2026-08-10 から 2 分)。行ごとに読み取り、固定値を前提にしないでください。/studio/market/twstock/batch/<data_type> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
data_typestring · path必須 | データセット | price, price_adj, per, institutional, shareholding, foreign_shareholding, financials, balance_sheet, monthly_revenue, ratios, dividend | |
stock_idsstring · query必須 | 銘柄コード | カンマ区切り、≤ 50 | |
startstring · query | 開始日 | YYYY-MM-DD(厳密に検証されるのは dividend のみ) | data_type による |
endstring · query | 終了日 | YYYY-MM-DD | data_type による |
payload = requests.get(f"{BASE_URL}/studio/market/twstock/batch/per" , headers=headers, params={"stock_ids": "2330,6182", "start": "2026-08-04", "end": "2026-08-08"}, timeout=120).json()# {"data_type": "per",# "data": {"2330": [{"date": "2026-08-04", "dividend_yield": 0.95, "PER": 31.19, "PBR": 10.21, "stock_id": "2330"}, ...],# "6182": [...]},# "failed": []}{"data_type", "data": {"<stock_id>": [...rows...]}, "failed": [...]}。行は対応する単一銘柄のエンドポイントと同一です。
failed:サーバー側での取得に失敗した銘柄コード(レート制限またはアップストリームのエラー)。これらは再試行してください。data にも failed にも含まれない銘柄コードは、実際にデータがありません。| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Unsupported data_type '<x>'. Supported: [...]"} | data_type が不正 |
| 400 | {"error": "stock_ids parameter required"} | 未指定 |
| 400 | {"error": "stock_ids exceeds max 50 per request"} | 上限超過 |
| 400 | {"error": "Invalid stock_id in list"} | いずれかのコードが形式チェックに失敗 |
| 400 | {"error": "Invalid start date, expected YYYY-MM-DD"} | dividend のみ |
ratios(財務比率):各銘柄コードの行は、/ratios/<stock_id> のワイド形式の四半期ごとの行です("data": {"2330": [{"date": "2026-06-30", "stock_id": "2330", "roe_q": 11.3934, ...}], "2317": [...]})。財務諸表のないコード(ETF)は data にも failed にも含まれません(404 は返しません)。比率ストアが未準備の場合は、すべての銘柄コードが failed に入ります(503 は返しません)。dividend は /dividend/<stock_id> と異なります。保存済みのデータだけを読み(更新はしません)、不明な銘柄コードや配当履歴のない銘柄は何も通知されずに結果から外れ(404 は返しません)、アップストリームのクォータの問題は 503 ではなく failed に現れます。