5 endpoints
https://api.blave.orgapi-key + secret-key en cada solicitudAPI plan or Blave Agent planSeries diarias de todo el mercado (sin stock_id). start / end son YYYY-MM-DD opcionales; omítalos para obtener el historial completo. No sume los endpoints por acción como sustituto — la cobertura y las unidades difieren.
/studio/market/twmarket/index/<index_id> | Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
index_idstring · pathObligatorio | Solo se admite TAIEX | TAIEX (sin distinguir mayúsculas de minúsculas) | |
startstring · query | Primera fecha | YYYY-MM-DD | 1999-01-05 |
endstring · query | Última fecha | YYYY-MM-DD | hoy |
body = requests.get(f"{BASE_URL}/studio/market/twmarket/index/TAIEX" , headers=headers, params={"start": "2024-01-01", "end": "2024-12-31"}, timeout=60).json()# {"index_id": "TAIEX", "data": [{"date": "2024-01-02", "open": 17939.79, "high": 17956.74, "low": 17784.97, "close": 17853.76}, ...]}{"index_id": "TAIEX", "data": [{"date", "open", "high", "low", "close"}]}; precios en puntos del índice. Sin volumen — use /twmarket/turnover.
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "Unsupported index"} | No es TAIEX |
| 404 | mensaje de error | Sin datos |
| 503 | {"error": "Market data is not ready on this server. Please retry later."} / rate limit del origen de datos | Almacén no disponible todavía / origen de datos caído |
/studio/market/twmarket/turnover | Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
startstring · query | Primera fecha | YYYY-MM-DD | 1990-01-04 |
endstring · query | Última fecha | YYYY-MM-DD | hoy |
data = requests.get(f"{BASE_URL}/studio/market/twmarket/turnover" , headers=headers, params={"start": "2024-01-01"}, timeout=60).json()["data"]# [{"date": "2024-01-02", "volume": 6411778806.0, "value": 301290668897.0, "trades": 2267660.0}, ...]{"data": [...]}.
| Campo | Unidad | Descripción |
|---|---|---|
date | — | Día de negociación |
volume | acciones | 成交股數 |
value | TWD | 成交金額 |
trades | número | 成交筆數 |
404 sin datos; 503 almacén no disponible todavía o rate limit del origen de datos.
/studio/market/twmarket/institutional | Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
startstring · query | Primera fecha | YYYY-MM-DD | 2004-04-07 |
endstring · query | Última fecha | YYYY-MM-DD | hoy |
data = requests.get(f"{BASE_URL}/studio/market/twmarket/institutional" , headers=headers, params={"start": "2024-01-01"}, timeout=60).json()["data"]# [{"date": "2024-01-02", "foreign": 1047078183.0, "investment_trust": 189637635.0,# "dealer": -4448119903.0, "total": -3211404085.0}, ...]{"data": [{"date", "foreign", "investment_trust", "dealer", "total"}]}; todos los valores son netos (compra − venta) en TWD.
404 sin datos; 503 rate limit del origen de datos.
foreign es 外資及陸資 sin la operativa por cuenta propia de los operadores extranjeros (外資自營商); dealer es 自營商 (自行買賣 + 避險), donde TWSE ya incluye 外資自營商. El endpoint por acción (GET /studio/market/twstock/institutional/<stock_id>) es una capa distinta: devuelve las columnas sin procesar de cada categoría y no agrupa nada. No deben mezclarse.foreign + investment_trust + dealer es igual a total, el 三大法人合計 publicado por la bolsa, todos los días. 外資自營商 no es una columna aparte: corresponde a warrants/ETN, que Blave no sirve, y ha sido 0 todos los días después de 2024-08-16./studio/market/twmarket/margin | Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
startstring · query | Primera fecha | YYYY-MM-DD | 2001-01-03 |
endstring · query | Última fecha | YYYY-MM-DD | hoy |
data = requests.get(f"{BASE_URL}/studio/market/twmarket/margin" , headers=headers, params={"start": "2024-01-01"}, timeout=60).json()["data"]# [{"date": "2024-01-02", "margin_balance": 8012561, "margin_balance_prev": 7999081,# "margin_balance_value": 248424271000, "short_balance": 369678, "short_balance_prev": 359738}, ...]{"data": [...]}.
| Campo | Unidad | Descripción |
|---|---|---|
date | — | Día de negociación |
margin_balance / margin_balance_prev | lotes (張) | 融資餘額 de hoy / del día anterior |
margin_balance_value | TWD | 融資餘額金額 |
short_balance / short_balance_prev | lotes (張) | 融券餘額 de hoy / del día anterior |
404 sin datos; 503 rate limit del origen de datos.
/studio/market/twmarket/dividend_points | Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
startstring · query | Primera fecha | YYYY-MM-DD estricto | 2003-01-02 |
endstring · query | Última fecha; se recorta sin aviso a hoy + 120 días | YYYY-MM-DD estricto | hoy + 120 días |
import pandas as pdpayload = requests.get(f"{BASE_URL}/studio/market/twmarket/dividend_points" , headers=headers, params={"start": "2026-08-01"}, timeout=60).json()# {"data": [{"date": "2026-08-03", "points": 2.853, "estimated": false}, ...,# {"date": "2026-08-28", "points": 3.846, "estimated": true}, ...],# "meta": {"estimated_coverage": 0.9999, "degraded": false}}df = pd.DataFrame(payload["data"])future_div = df[df["estimated"]].set_index("date")["points"]# fair basis at t for settlement T: futures_price - (spot_index - future_div.loc[t_plus_1:T].sum()){"data": [{"date", "points", "estimated"}], "meta": {"estimated_coverage", "degraded"}}.
| Campo | Tipo | Descripción |
|---|---|---|
data[].date | string | Día |
data[].points | float | Puntos del índice descontados por los eventos ex-dividendo de ese día |
data[].estimated | bool | false = realizado (a partir del diferencial entre el índice de rentabilidad total y el índice de precios; días sin ex-dividendo ≈ 0); true = previsión (días laborables futuros, con ceros donde no hay evento) |
meta.estimated_coverage | float | null | Fracción del peso del TAIEX cuyos datos de entrada pudieron leerse para la previsión; null cuando no hay filas estimadas |
meta.degraded | bool | true = previsión con cobertura claramente insuficiente — debe tratarse como un límite inferior |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "Invalid start date, expected YYYY-MM-DD"} (o end) | Fecha mal formada |
| 404 | {"error": "No TAIEX index data available"} | Almacén vacío y sin datos en el origen |
| 503 | mensaje de error | Cobertura de la previsión inferior al 90%, almacén no disponible todavía o rate limit del origen de datos |
end, incluso cuando start es posterior a mañana — filtre en el cliente.