API de Mercado de Taiwan

5 endpoints

Última atualização 2026-10
URL base
https://api.blave.org
Autenticação
Cabeçalhos api-key + secret-key em toda requisição
Acesso
API plan or Blave Agent plan
Limite de requisições
500 requisições / 5 min por chave e por IP

Convenções

Séries diárias do mercado inteiro (sem stock_id). start / end são YYYY-MM-DD opcionais; omita para obter o histórico completo. Não some os endpoints por ação como substituto — a cobertura e as unidades são diferentes.

OHLC diário do TAIEX

GET/studio/market/twmarket/index/<index_id>
Dados desde
1999-01-05
Atualização
Diária

Parâmetros

NomeDescriçãoValores permitidosPadrão
index_id
string · pathObrigatório
Apenas o TAIEX é suportadoTAIEX (sem diferenciar maiúsculas de minúsculas)
start
string · query
Primeira dataYYYY-MM-DD1999-01-05
end
string · query
Última dataYYYY-MM-DDhoje

Exemplo

Python
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}, ...]}

Resposta

{"index_id": "TAIEX", "data": [{"date", "open", "high", "low", "close"}]}; preços em pontos do índice. Sem volume — use /twmarket/turnover.

Erros

StatusCorpoQuando
400{"error": "Unsupported index"}Não é TAIEX
404mensagem de erroSem dados
503{"error": "Market data is not ready on this server. Please retry later."} / limite de requisições do upstreamArmazenamento não está pronto / upstream fora do ar

Observações

  • A série é o índice conforme publicado oficialmente pela TWSE.
  • Cache do servidor: 5 minutos.

Volume negociado do mercado

GET/studio/market/twmarket/turnover
Dados desde
1990-01-04
Atualização
Diária

Parâmetros

NomeDescriçãoValores permitidosPadrão
start
string · query
Primeira dataYYYY-MM-DD1990-01-04
end
string · query
Última dataYYYY-MM-DDhoje

Exemplo

Python
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}, ...]

Resposta

{"data": [...]}.

CampoUnidadeDescrição
date—Dia de negociação
volumeações成交股數
valueTWD成交金額
tradesquantidade成交筆數

Erros

404 sem dados; 503 armazenamento não está pronto ou limite de requisições do upstream.

Observações

  • Os números são as estatísticas de volume negociado do mercado publicadas oficialmente pela TWSE.
  • Cache do servidor: 5 minutos.

Compra/venda líquida institucional do mercado

GET/studio/market/twmarket/institutional
Dados desde
2004-04-07
Atualização
Diária

Parâmetros

NomeDescriçãoValores permitidosPadrão
start
string · query
Primeira dataYYYY-MM-DD2004-04-07
end
string · query
Última dataYYYY-MM-DDhoje

Exemplo

Python
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}, ...]

Resposta

{"data": [{"date", "foreign", "investment_trust", "dealer", "total"}]}; todos os valores são líquidos (compra − venda), em TWD.

Erros

404 sem dados; 503 limite de requisições do upstream.

Observações

  • Camada do mercado inteiro. foreign é 外資及陸資, sem as operações por conta própria dos dealers estrangeiros (外資自營商); dealer é 自營商 (自行買賣 + 避險), em que a TWSE já contabiliza 外資自營商. O endpoint por ação (GET /studio/market/twstock/institutional/<stock_id>) é outra camada: retorna as colunas brutas por categoria e não agrupa nada. Não misture os dois.
  • foreign + investment_trust + dealer é igual a total, o 三大法人合計 publicado pela bolsa, em todos os dias. 外資自營商 não é uma coluna separada: está em warrants/ETNs, que a Blave não fornece, e foi 0 em todos os dias depois de 2024-08-16.
  • Cache do servidor: 5 minutos.

Saldo de margem do mercado

GET/studio/market/twmarket/margin
Dados desde
2001-01-03
Atualização
Diária

Parâmetros

NomeDescriçãoValores permitidosPadrão
start
string · query
Primeira dataYYYY-MM-DD2001-01-03
end
string · query
Última dataYYYY-MM-DDhoje

Exemplo

Python
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}, ...]

Resposta

{"data": [...]}.

CampoUnidadeDescrição
date—Dia de negociação
margin_balance / margin_balance_prevlotes (張)融資餘額 de hoje / do dia anterior
margin_balance_valueTWD融資餘額金額
short_balance / short_balance_prevlotes (張)融券餘額 de hoje / do dia anterior

Erros

404 sem dados; 503 limite de requisições do upstream.

Observações

  • Cache do servidor: 5 minutos.

Pontos de dividendos diários do TAIEX

GET/studio/market/twmarket/dividend_points
Dados desde
2003-01-02 (realizados); previsões até hoje + 120 dias
Atualização
Diária, por volta das 17:00 de Taipei (realizados)

Parâmetros

NomeDescriçãoValores permitidosPadrão
start
string · query
Primeira dataYYYY-MM-DD estrito2003-01-02
end
string · query
Última data; limitada silenciosamente a hoje + 120 diasYYYY-MM-DD estritohoje + 120 dias

Exemplo

Python
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())

Resposta

{"data": [{"date", "points", "estimated"}], "meta": {"estimated_coverage", "degraded"}}.

CampoTipoDescrição
data[].datestringDia
data[].pointsfloatPontos do índice retirados por eventos ex-dividendo naquele dia
data[].estimatedboolfalse = realizado (a partir do spread entre o índice de retorno total e o índice de preço; dias sem ex ≈ 0); true = previsão (dias úteis futuros, preenchidos com zero onde não há evento)
meta.estimated_coveragefloat | nullFração do peso do TAIEX cujos dados de entrada estavam legíveis para a previsão; null quando não há linhas estimadas
meta.degradedbooltrue = previsão com cobertura materialmente insuficiente — trate como um limite inferior

Erros

StatusCorpoQuando
400{"error": "Invalid start date, expected YYYY-MM-DD"} (ou end)Data malformada
404{"error": "No TAIEX index data available"}Armazenamento frio e sem dados do upstream
503mensagem de erroCobertura da previsão abaixo de 90%, armazenamento não está pronto ou limite de requisições do upstream

Observações

  • Antes de ~17:00 de Taipei, a linha realizada mais recente é a do dia de negociação anterior.
  • Previsões para mais de ~2 semanas à frente se apoiam no modelo do ano passado.
  • As linhas de previsão são sempre retornadas de amanhã até end, mesmo quando start é posterior a amanhã — filtre no lado do cliente.
  • Cache do servidor: 5 minutos (dados de entrada da previsão: 1 hora).
  • A parte realizada é o índice de retorno total contra o índice de preço; as previsões usam os dividendos anunciados mais um modelo do ano passado.