Documentação da API

Referência completa de todos os endpoints da API bolsai. Dados financeiros do Brasil provenientes de fontes oficiais: B3, CVM e BCB.

Testar no playground
Base URL: https://api.usebolsai.com/api/v1
OpenAPI Spec (Postman)

Autenticação

Todas as requisições devem incluir o header X-API-Key com sua chave de acesso. Você pode obter sua chave gratuitamente fazendo login com sua conta Google e gerenciar suas chaves (criar, rotacionar, excluir) direto no dashboard. Cada conta pode ter até 5 chaves ativas no plano Free e 20 no plano Pro.

Plano Grátis

  • 200 requisições por dia
  • Fundamentos e preços atuais
  • Busca de empresas e FIIs

Plano Pro — R$ 49/mês

  • 10.000 requisições por dia
  • Todos os endpoints liberados
  • Preços desde 1986 (~40 anos)

Os limites são resetados à meia-noite UTC. Se o limite for excedido, a API retorna 429 Too Many Requests (no plano grátis, a resposta inclui upgrade_info com o link para o Pro). O header X-RateLimit-Remaining indica quantas requisições restam.

Exemplo de requisição autenticada
curl -H "X-API-Key: sua_chave" \
  https://api.usebolsai.com/api/v1/fundamentals/PETR4

Exportação CSV

A maioria dos endpoints aceita o parâmetro format=csv para exportar os dados em formato CSV. Útil para importar no Excel, Google Sheets ou scripts de análise.

Exemplo de exportação CSV
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/stocks/PETR4/history?format=csv" \
  -o petr4_precos.csv

Gerenciamento de chaves

Os endpoints abaixo são usados pelo dashboard para listar, criar, rotacionar e excluir chaves. Eles autenticam por cookie de sessão (login Google) — não por X-API-Key. Para integrações via terminal, recomendamos usar o dashboard direto.

Ao rotacionar ou excluir uma chave, ela deixa de funcionar imediatamente. O limite de requisições é compartilhado entre todas as chaves de uma mesma conta — criar mais chaves não aumenta sua cota diária.

GET

/keys

Lista as chaves ativas da conta. Os valores das chaves são retornados mascarados — o segredo completo só é exibido uma vez no momento da criação ou rotação.

Resposta (200)
[
  {
    "id": 42,
    "label": "default",
    "key_masked": "sk_697d••••••••f485",
    "is_active": true,
    "created_at": "2026-03-24T20:38:39",
    "last_used_at": "2026-05-12T13:21:04"
  }
]
POST

/keys

Cria uma nova chave com o rótulo (label) informado. Retorna o segredo completo apenas uma vez — guarde-o em local seguro. Retorna 400 se a conta já atingiu o limite (5 no Free, 20 no Pro).

Campo Tipo Obrig. Descrição
label string Sim Rótulo da chave (1-50 caracteres). Ex: "produção", "laptop", "CI".
Resposta (200)
{
  "id": 43,
  "label": "laptop",
  "key": "sk_a4b9c2d1e0f8..."
}
POST

/keys/{id}/rotate

Gera um novo segredo para a chave mantendo o mesmo rótulo e id. O segredo antigo deixa de funcionar imediatamente. O novo segredo é retornado uma única vez na resposta.

Resposta (200)
{
  "id": 43,
  "label": "laptop",
  "key": "sk_novosecreto..."
}
DELETE

/keys/{id}

Exclui (revoga) a chave. A chave deixa de funcionar imediatamente. Retorna 400 se essa for a única chave ativa da conta — toda conta precisa ter pelo menos uma chave ativa.

Resposta (200)
{
  "ok": true
}
GET

/keys/usage

Consulte o uso atual da sua API key: requisições feitas hoje, limite diário e tier do plano.

Parâmetro Tipo Obrig. Descrição
api_key string Sim Sua API key (query parameter)
Exemplo
curl "https://api.usebolsai.com/api/v1/keys/usage?api_key=sua_chave"
Resposta
{
  "tier": "free",
  "used_today": 42,
  "daily_limit": 200,
  "remaining": 158
}

Empresas

Listagem e consulta de companhias registradas na CVM, com filtros por setor, status e busca textual.

GET

/companies

Lista todas as empresas registradas, com suporte a filtros por setor, status e busca por nome.

Parâmetro Tipo Obrig. Descrição
sector string Não Filtrar por setor (ex: "Financeiro")
status string Não Filtrar por status (ex: "ATIVO")
search string Não Buscar por razão social ou nome de pregão (max 100 caracteres)
limit int Não Itens por página (1-500, padrão: 50)
offset int Não Deslocamento para paginação (padrão: 0)
Requisição
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/companies/?search=petro&limit=2"
Resposta
{
  "data": [
    {
      "ticker_primary": "PETR4",
      "corporate_name": "PETROLEO BRASILEIRO S.A. PETROBRAS",
      "trade_name": "PETROBRAS",
      "cvm_code": "9512",
      "cnpj": "33.000.167/0001-01",
      "sector": "Petroleo, Gas e Biocombustiveis",
      "status": "ATIVO"
    },
    {
      "ticker_primary": "RECV3",
      "corporate_name": "PETRO RECÔNCAVO S.A.",
      "trade_name": "PETRORECONCAVO",
      "cvm_code": "25607",
      "cnpj": "03.342.704/0001-30",
      "sector": "Petroleo, Gas e Biocombustiveis",
      "status": "ATIVO"
    }
  ],
  "count": 2,
  "total": 5,
  "offset": 0,
  "limit": 2
}
GET

/companies/sectors

Lista todos os setores disponíveis com a contagem de empresas ativas com ticker em cada um. Útil para descobrir nomes de setores válidos para os filtros de /companies e /screener.

Requisição
curl -H "X-API-Key: sua_chave" \
  https://api.usebolsai.com/api/v1/companies/sectors
Resposta
{
  "sectors": [
    { "name": "Bancos", "count": 19 },
    { "name": "Energia Elétrica", "count": 18 },
    { "name": "Construção Civil, Mat. Constr. e Decoração", "count": 16 },
    // ...
  ],
  "total": 42
}
GET

/companies/{ticker}

Retorna informações detalhadas de uma empresa a partir do ticker. O campo queried_ticker ecoa o ticker consultado e tickers lista todas as classes de ação (ON/PN/Unit) da empresa.

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker da empresa (ex: PETR4, VALE3)
Requisição
curl -H "X-API-Key: sua_chave" \
  https://api.usebolsai.com/api/v1/companies/PETR4
Resposta
{
  "ticker_primary": "PETR4",
  "queried_ticker": "PETR4",
  "tickers": ["PETR3", "PETR4"],
  "corporate_name": "PETROLEO BRASILEIRO S.A. PETROBRAS",
  "trade_name": "PETROBRAS",
  "cvm_code": "9512",
  "cnpj": "33.000.167/0001-01",
  "sector": "Petroleo, Gas e Biocombustiveis",
  "status": "ATIVO",
  "registration_date": "1977-08-15",
  "registration_category": "A",
  "market_type": "BOLSA",
  "country": "Brasil",
  "state": "RJ",
  "city": "Rio de Janeiro",
  "email": "",
  "website": ""
}

Ações

Cotações em tempo real, histórico OHLCV ajustado por splits e bonificações, estatísticas e eventos corporativos.

GET

/stocks

Lista todos os tickers disponíveis, filtrados por código BDI.

Parâmetro Tipo Obrig. Descrição
bdi_code string Não Código BDI: "02" = ações, "07" = ações em recuperação extrajudicial, "08" = ações em recuperação judicial, "12" = FIIs, "14" = ETFs e Fiagros, "34" = BDRs não patrocinados, "35" = BDRs patrocinados (níveis I a III), "36" = BDRs de ETFs (padrão: "02"). BDRs têm apenas cotação (sem fundamentos), a partir de out/2022.
limit int Não Máximo de resultados (1-5000, padrão: 500)
offset int Não Deslocamento para paginação (padrão: 0)
Requisição
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/stocks/?bdi_code=02&limit=10"
Resposta
{
  "count": 312,
  "total": 312,
  "tickers": [
    "ABEV3",
    "ALPA4",
    "AMER3",
    // ... +309 tickers
  ]
}
GET

/stocks/{ticker}/quote

Retorna a cotação mais recente de um ticker, incluindo preço de abertura, máxima, mínima, fechamento e volume.

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker da ação (ex: PETR4, VALE3)
Requisição
curl -H "X-API-Key: sua_chave" \
  https://api.usebolsai.com/api/v1/stocks/PETR4/quote
Resposta
{
  "ticker": "PETR4",
  "trade_date": "2026-03-21",
  "open": 45.12,
  "high": 46.03,
  "low": 44.89,
  "close": 45.67,
  "volume": 42318700,
  "traded_amount": 1932045876.54,
  "num_trades": 187432
}
GET

/stocks/{ticker}/stats

Estatísticas de preço: máxima/mínima de 52 semanas, retorno YTD, variação diária e volume médio.

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker da ação (ex: ITUB4)
Requisição
curl -H "X-API-Key: sua_chave" \
  https://api.usebolsai.com/api/v1/stocks/ITUB4/stats
Resposta
{
  "ticker": "ITUB4",
  "trade_date": "2026-03-21",
  "close": 34.52,
  "daily_change": 0.38,
  "daily_change_pct": 1.11,
  "week_52_low": 27.15,
  "week_52_high": 36.89,
  "avg_volume_52w": 24563100,
  "ytd_return_pct": 12.45
}
GET

/stocks/{ticker}/history

Retorna o histórico de preços de um ticker, ordenado do mais recente para o mais antigo. Inclui preços ajustados por splits, grupamentos e dividendos. Dados desde 1986. Consultar tickers antigos (ex: VIIA3) retorna histórico completo da empresa.

O Ibovespa também está disponível: /stocks/IBOV/history retorna o OHLC diário do índice desde 1993, com os mesmos parâmetros dos demais tickers (volume vem 0).

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker da ação (ex: VALE3)
start date Não Data de início (formato: YYYY-MM-DD)
end date Não Data de fim (formato: YYYY-MM-DD)
limit int Não Número máximo de registros (1-5000, padrão: 252)
Requisição
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/stocks/VALE3/history?start=2026-01-01&limit=5"
Resposta
{
  "ticker": "VALE3",
  "count": 5,
  "prices": [
    {
      "trade_date": "2026-03-21",
      "open": 62.45,
      "high": 63.10,
      "low": 61.80,
      "close": 62.87,
      "adjusted_open": 62.45,
      "adjusted_high": 63.10,
      "adjusted_low": 61.80,
      "adjusted_close": 62.87,
      "volume": 35214600,
      "adjusted_volume": 35214600,
      "traded_amount": 2213784521.30,
      "num_trades": 142567
    }
    // ... mais registros
  ]
}
GET

/stocks/{ticker}/corporate-events

Retorna desdobramentos (splits) e grupamentos (reverse splits) confirmados pela B3 para um ticker.

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker da ação (ex: MGLU3)
Requisição
curl -H "X-API-Key: sua_chave" \
  https://api.usebolsai.com/api/v1/stocks/MGLU3/corporate-events
Resposta
{
  "ticker": "FESA4",
  "count": 2,
  "events": [
    {
      "date": "2024-01-23",
      "type": "SPLIT",
      "ratio_from": 1,
      "ratio_to": 4,
      "description": "1:4",
      "factor": 0.25
    }
  ]
}
GET

/stocks/corporate-events

Lista todos os desdobramentos e grupamentos confirmados pela B3 para todos os tickers.

Parâmetro Tipo Obrig. Descrição
year int Não Filtrar por ano (ex: 2025)
limit int Não Máximo de resultados (1-1000, padrão: 100)
Requisição
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/stocks/corporate-events?year=2025"
Resposta
{
  "count": 2,
  "events": [
    {
      "ticker": "FESA4",
      "date": "2024-01-23",
      "type": "SPLIT",
      "ratio_from": 1,
      "ratio_to": 4,
      "description": "1:4",
      "factor": 0.25
    },
    {
      "ticker": "MGLU3",
      "date": "2024-05-24",
      "type": "INPLIT",
      "ratio_from": 10,
      "ratio_to": 1,
      "description": "10:1",
      "factor": 10.0
    }
  ]
}
GET

/stocks/{ticker}/ticker-history

Retorna o histórico de tickers de uma empresa, incluindo renomeações. Consultar VIIA3 ou BHIA3 retorna o mesmo resultado (dados completos da empresa).

{
  "cvm_code": "6505",
  "corporate_name": "GRUPO CASAS BAHIA S.A.",
  "current_ticker": "BHIA3",
  "tickers": [
    {
      "ticker": "BHIA3",
      "first_traded": "2023-09-20",
      "last_traded": "2026-03-25",
      "current": true
    },
    {
      "ticker": "VIIA3",
      "first_traded": "2020-09-14",
      "last_traded": "2023-09-19",
      "current": false
    }
  ]
}

Screener

Filtragem de ações por qualquer combinação de indicadores fundamentalistas, com ordenação e paginação.

GET

/screener

Filtra todas as ~264 ações negociadas por indicadores fundamentalistas. Use sufixos _gt (maior que) e _lt (menor que) nos parâmetros. Conta como 1 requisição. Requer plano Pro. Os indicadores aqui são calculados no nível da empresa (ticker principal / mais líquido), uma linha por empresa; para múltiplos por classe de ação (ON/PN/Unit), use /fundamentals/{ticker}.

Parâmetro Tipo Obrig. Descrição
{metric}_gt float Não Filtro "maior que". Métricas: pl, pvp, ev_ebitda, roe, roa, roic, net_margin, gross_margin, ebitda_margin, dividend_yield, dividend_payout, earnings_yield, debt_equity, net_debt_ebitda, market_cap, lpa, vpa, current_ratio, p_sr, cagr_revenue_5y, cagr_earnings_5y, daily_change, daily_change_pct
{metric}_lt float Não Filtro "menor que". Mesmas métricas acima
sector string Não Filtrar por setor (ex: "Bancos", "Energia Elétrica")
sort string Não Ordenar por métrica (padrão: market_cap)
order string Não Ordem: "asc" ou "desc" (padrão: desc)
limit int Não Resultados por página (1-500, padrão: 50)
offset int Não Paginação (padrão: 0)
Requisição
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/screener/?dividend_yield_gt=6&roe_gt=10&sort=dividend_yield&order=desc&limit=5"
Resposta
{
  "data": [
    {
      "ticker": "PETR4",
      "corporate_name": "PETRÓLEO BRASILEIRO S.A.",
      "sector": "Petróleo e Gás",
      "close_price": 49.03,
      "market_cap": 631934567271.83,
      "dividend_yield": 12.3,
      "pl": 5.74,
      "pvp": 1.52,
      "roe": 26.49,
      "net_margin": 22.23,
      "daily_change": 0.38,
      "daily_change_pct": 1.11,
      // ... 20+ mais indicadores
    }
  ],
  "count": 5,
  "total": 23,
  "offset": 0,
  "limit": 5
}

Fundamentos

27+ indicadores fundamentalistas (P/L, P/VP, ROE, ROIC, EV/EBITDA, DY, LPA, VPA, margens) com snapshot atual e série histórica.

GET

/fundamentals/{ticker}

Retorna indicadores fundamentalistas calculados: P/L, EV/EBITDA, ROE, margem líquida, dívida/patrimônio e mais. Usa os dados DFP/ITR mais recentes disponíveis. Múltiplos de preço (P/L, P/VP, EV/EBITDA, market_cap) são calculados para a classe de ação consultada — ON, PN e Unit têm preços diferentes, então esses valores variam entre elas. Métricas por empresa (LPA, VPA, ROE, margens) são idênticas entre as classes. O campo queried_ticker ecoa o ticker consultado.

earnings_yield = EBIT / EV × 100, onde EV = valor de mercado + dívida líquida (já desconta o caixa); null para bancos e quando o EV não é positivo. dividend_payout = proventos (dividendos + JCP) por ação com data-ex nos últimos 12 meses ÷ LPA × 100 (no histórico, os 12 meses terminados em reference_date); null em caso de prejuízo ou sem proventos no período.

free_cash_flow (fluxo de caixa livre) = caixa líquido das atividades operacionais (conta 6.01 da DFC) − capex, em R$ mil como os demais valores absolutos (ebitda, net_income), nos últimos 12 meses (no histórico, os 12 meses terminados em reference_date). O capex soma as saídas de caixa com aquisição de imobilizado, intangível, ativos de contrato/concessão e propriedades para investimento, identificadas pela descrição da conta nas atividades de investimento (6.02), já que a CVM não fixa um código para elas. null para bancos e quando falta a DFC de algum dos períodos. cash_flow_after_investing = caixa operacional (6.01) + caixa de investimentos (6.02) inteiro, na mesma unidade e janela de 12 meses: diferente do free_cash_flow, inclui aquisições de empresas, aplicações financeiras e vendas de ativos. null para bancos e quando falta o total 6.02 de algum dos períodos.

total_debt, net_debt, debt_equity, net_debt_equity, net_debt_ebitda, net_debt_ebit, ev_ebitda, ev_ebit e roic são null para bancos: o passivo de um banco é captação (depósitos, operações compromissadas), não dívida financeira, e o plano de contas bancário da CVM não separa empréstimos e financiamentos, então não há dívida líquida, EV nem capital investido. current_ratio, current_assets e current_liabilities também são null para bancos, cujo balanço não separa circulante de não circulante. No screener, filtros por essas métricas excluem os bancos e a ordenação os coloca no fim.

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker da empresa (ex: PETR4)
reference_date date Não Data de referência do balanço (formato: YYYY-MM-DD). Se omitido, usa o mais recente
Requisição
curl -H "X-API-Key: sua_chave" \
  https://api.usebolsai.com/api/v1/fundamentals/PETR4
Resposta
{
  "cvm_code": "9512",
  "ticker": "PETR4",
  "queried_ticker": "PETR4",
  "reference_date": "2025-12-31",
  "close_price": 45.67,
  "shares_outstanding": 12888732761,
  "market_cap": 588628425194.87,
  "pl": 5.32,
  "pvp": 1.42,
  "ev_ebitda": 3.27,
  "ev_ebit": 4.67,
  "earnings_yield": 21.41,
  "p_ebitda": 2.65,
  "p_ebit": 2.98,
  "p_sr": 1.18,
  "lpa": 8.54,
  "vpa": 32.26,
  "roe": 26.6,
  "roa": 9.04,
  "roic": 17.4,
  "net_margin": 22.23,
  "gross_margin": 47.6,
  "ebitda_margin": 39.6,
  "ebit_margin": 33.2,
  "debt_equity": 0.92,
  "net_debt_equity": 0.8,
  "net_debt_ebitda": 1.18,
  "net_debt_ebit": 1.69,
  "current_ratio": 0.71,
  "dividend_payout": 45.2,
  "asset_turnover": 0.41,
  "p_assets": 0.48,
  "ebit_over_assets": 16.1,
  "cagr_revenue_5y": -0.8,
  "cagr_earnings_5y": null,
  "net_income": 110605000,
  "equity": 415786000,
  "net_revenue": 497549000,
  "total_debt": 384025000,
  "ebitda": 281630000,
  "ebit": 197242000,
  "free_cash_flow": 124181000,
  "cash_flow_after_investing": 131674000,
  "net_debt": 333417000,
  "cash": 50608000,
  "total_assets": 1223390000,
  "current_assets": 140026000,
  "current_liabilities": 198341000,
  "corporate_name": "PETRÓLEO BRASILEIRO  S.A.  - PETROBRAS"
}
GET

/fundamentals/{ticker}/history

Retorna o histórico de indicadores fundamentalistas, um por trimestre, do mais recente ao mais antigo.

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker da empresa (ex: WEGE3)
limit int Não Número de trimestres (1-80, padrão: 40)
Requisição
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/fundamentals/WEGE3/history?limit=2"
Resposta
{
  "ticker": "WEGE3",
  "queried_ticker": "WEGE3",
  "corporate_name": "WEG S.A.",
  "count": 2,
  "history": [
    {
      "reference_date": "2025-12-31",
      "close_price": 52.30,
      "pl": 38.12,
      "pvp": 11.45,
      "roe": 30.02,
      "net_margin": 18.65,
      // ... demais indicadores
    },
    {
      "reference_date": "2025-09-30",
      "close_price": 48.75,
      "pl": 35.67,
      "pvp": 10.89,
      "roe": 29.45,
      "net_margin": 17.92,
      // ... demais indicadores
    }
  ]
}

Demonstrações financeiras

DFP (anual) e ITR (trimestral) da CVM: DRE, balanço patrimonial e fluxo de caixa por código de conta padronizado, mais o 4º trimestre calculado (T4).

GET

/financials/{ticker}

Retorna as demonstrações financeiras (DFP anuais ou ITR trimestrais) de uma empresa. Inclui Balanço Patrimonial Ativo (BPA), Passivo (BPP), DRE, Fluxo de Caixa (DFC_MI) e DVA.

Com report_type=T4, retorna o 4º trimestre calculado: DFP anual − acumulado de 9 meses do 3º ITR do mesmo exercício (DRE, DFC_MI e DVA; o balanço é uma posição na data, então BPA/BPP retornam 400 — use a DFP). É uma informação derivada, não um documento entregue à CVM: a resposta traz "derived": true (false em DFP/ITR). reference_date é o fim do exercício (31/12, ou outra data para exercícios não civis). Linhas cuja conta não existe no 3º ITR, ou que nele têm outra descrição (códigos abaixo do 2º nível são livres por empresa), são omitidas, assim como o LPA (3.99), que não pode ser subtraído. Exercícios sem os três ITRs não têm T4. Cada linha também traz derived; com report_type=ITR&include_t4=true, o T4 da DRE entra na própria série trimestral, marcado linha a linha.

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker da empresa (ex: BBDC4)
report_type string Não "DFP" para anual ou "ITR" para trimestral (padrão: "DFP"). O ITR cobre apenas os 1º, 2º e 3º trimestres (31/03, 30/06, 30/09); o resultado de fim de ano (31/12) é divulgado na DFP anual, não em um 4º ITR. Por isso a série ITR "pula" de setembro para março — não há dado faltante: consulte report_type=DFP para o fechamento anual, ou report_type=T4 para o 4º trimestre calculado (DFP − 9 meses).
statement_type string Não Tipo: BPA, BPP, DRE, DFC_MI ou DVA. Outro valor retorna erro 400
reference_date date Não Data de referência específica (formato: YYYY-MM-DD)
limit int Não Número máximo de linhas (1-5000, padrão: 1000)
include_t4 bool Não Com report_type=ITR, inclui na série as linhas de DRE do 4º trimestre calculado (T4), com "derived": true em cada uma (padrão: false). Só a DRE: no ITR, DFC e DVA são acumulados no ano, então um T4 de fluxo de caixa não é comparável — use report_type=T4 para eles.
Requisição
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/financials/BBDC4?report_type=DFP&statement_type=DRE&reference_date=2025-12-31"
Resposta
{
  "ticker": "BBDC4",
  "cvm_code": "9512",
  "report_type": "DFP",
  "derived": false,
  "count": 42,
  "statements": [
    {
      "reference_date": "2025-12-31",
      "statement_type": "DRE",
      "account_code": "3.01",
      "account_name": "Receita de Intermediacao Financeira",
      "value": 198432000000.0,
      "derived": false
    },
    {
      "reference_date": "2025-12-31",
      "statement_type": "DRE",
      "account_code": "3.02",
      "account_name": "Despesas da Intermediacao Financeira",
      "value": -142567000000.0,
      "derived": false
    }
    // ... mais linhas
  ]
}

Dividendos

Histórico completo de proventos com data com, data ex, data de pagamento, tipo (Dividendo ou JCP) e valor por ação.

GET

/dividends/{ticker}

Retorna o histórico de dividendos e JCP de um ticker, incluindo dividend yield dos últimos 12 meses, resumo anual e lista de pagamentos com datas de pagamento. Consultar tickers antigos (ex: VIIA3) retorna dados completos da empresa atual (BHIA3).

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker da ação ou FII (ex: BBAS3, HGLG11)
years int Não Anos de histórico (1-20, padrão: 5)
Requisição
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/dividends/BBAS3?years=3"
Resposta
{
  "ticker": "BBAS3",
  "dividend_yield_ttm": 8.45,
  "ttm_per_share": 2.3412,
  "current_price": 27.71,
  "total_payments": 18,
  "annual_summary": [
    {
      "year": 2026,
      "total_per_share": 0.5843,
      "payments": 2
    },
    {
      "year": 2025,
      "total_per_share": 2.8756,
      "payments": 8
    }
  ],
  "payments": [
    {
      "ex_date": "2026-03-14",
      "payment_date": "2026-04-20",
      "type": "JCP",
      "value_per_share": 0.2934,
      "adjusted": false
    },
    {
      "ex_date": "2026-02-21",
      "payment_date": "2026-03-20",
      "type": "Dividendo",
      "value_per_share": 0.2909,
      "adjusted": false
    }
    // ... mais pagamentos
  ]
}

FIIs (Fundos Imobiliários)

Cotações, rendimentos, P/VP, dividend yield, segmentação (Tijolo/Papel/Híbrido/Fundo de Fundos/Fiagro), vacância, inadimplência, principais imóveis e concentração por setor de inquilinos.

GET

/fiis

Lista todos os FIIs negociados na B3 com os dados mais recentes: nome, segmento, tipo de gestão e número de cotistas. Códigos que deixaram de ser negociados — por renomeação ou encerramento — saem da lista após 90 dias sem pregão.

Parâmetro Tipo Obrig. Descrição
limit int Não Máximo de resultados (1-5000, padrão: 500)
offset int Não Deslocamento para paginação (padrão: 0)
Requisição
curl -H "X-API-Key: sua_chave" \
  https://api.usebolsai.com/api/v1/fiis/
Resposta
{
  "count": 185,
  "total": 423,
  "fiis": [
    {
      "ticker": "HGLG11",
      "name": "CSHG LOGISTICA FDO INV IMOB - FII",
      "segment": "Logistica",
      "management_type": "Gestao Ativa",
      "total_shareholders": 487523
    },
    {
      "ticker": "KNRI11",
      "name": "KINEA RENDA IMOBILIARIA FDO INV IMOB - FII",
      "segment": "Hibrido",
      "management_type": "Gestao Ativa",
      "total_shareholders": 312456
    }
    // ... mais FIIs
  ]
}
GET

/fiis/{ticker}

Retorna fundamentos + perfil operacional de um FII: P/VP, dividend yield 12m, NAV, cotistas, administrator, mandate, asset composition, fund_type (Tijolo/Papel/Híbrido/Fundo de Fundos/Fiagro), vacância, inadimplência, lista das principais propriedades. Dados de imóveis (vacância/inadimplência) vêm do informe trimestral CVM.

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker do FII (ex: HGLG11 ou HGLG)
Requisição
curl -H "X-API-Key: sua_chave" \
  https://api.usebolsai.com/api/v1/fiis/HGLG11
Resposta
{
  "ticker": "HGLG11",
  "name": "CSHG LOGISTICA FDO INV IMOB - FII",
  "reference_date": "2026-02-28",
  "close_price": 162.45,
  "book_value_per_share": 148.32,
  "pvp": 1.10,
  "dividend_yield_ttm": 8.74,
  "net_asset_value": 4523000000.0,
  "shares_outstanding": 30498200,
  "total_shareholders": 487523,
  "segment": "Logistica",
  "management_type": "Gestao Ativa",
  "administrator": "CREDIT SUISSE HEDGING-GRIFFO CV S.A.",
  "administrator_cnpj": "61809182000130",
  "mandate": "Renda",
  "inception_date": "2010-06-01",
  "duration_type": "Indeterminado",
  "target_investors": "INVESTIDORES EM GERAL",
  "website": "www.cshg.com.br",
  "email": "investidores@cshg.com.br",
  "fund_type": "Tijolo",
  "asset_composition": {
    "real_estate_leased_pct": 84.31,
    "real_estate_under_construction_pct": 0.0,
    "real_estate_for_sale_pct": 0.0,
    "land_pct": 0.0,
    "other_real_estate_pct": 0.0,
    "cri_pct": 0.0,
    "lci_pct": 0.0,
    "cepac_pct": 0.0,
    "debentures_pct": 0.0,
    "fii_holdings_pct": 15.69,
    "fip_fdic_pct": 0.0,
    "stocks_pct": 0.0,
    "cash_pct": 0.49,
    "other_pct": 0.0
  },
  "fees_paid_last_month": {
    "admin": 105112.97,
    "performance": 0.0
  },
  "property_count": 28,
  "total_area_sqm": 1595382.91,
  "vacancy_pct": 2.91,
  "delinquency_pct": 0.0,
  "leased_pct": 97.09,
  "top_properties": [
    {
      "name": "Galpão Cajamar",
      "address": "Rod. Anhanguera - Cajamar/SP",
      "asset_class": "Imóveis para renda acabados",
      "area_sqm": 125000.0,
      "revenue_pct": 45.0,
      "vacancy_pct": 2.0,
      "leased_pct": 98.0
    }
  ],
  "property_reference_date": "2024-12-31"
}
GET

/fiis/{ticker}/history

Retorna o histórico mensal de um FII: evolução do P/VP, DY mensal, NAV e cotistas.

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker do FII (ex: HGLG11 ou HGLG)
limit int Não Número de meses (1-120, padrão: 24)
Requisição
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/fiis/HGLG11/history?limit=3"
Resposta
{
  "ticker": "HGLG11",
  "name": "CSHG LOGISTICA FDO INV IMOB - FII",
  "count": 3,
  "history": [
    {
      "reference_date": "2026-02-28",
      "close_price": 162.45,
      "book_value_per_share": 148.32,
      "pvp": 1.10,
      "dy_month_pct": 0.7234,
      "value_per_share": 1.0732,
      "net_asset_value": 4523000000.0,
      "shares_outstanding": 30498200,
      "total_shareholders": 487523
    },
    {
      "reference_date": "2026-01-31",
      "close_price": 160.80,
      "book_value_per_share": 147.90,
      "pvp": 1.09,
      "dy_month_pct": 0.6892,
      "value_per_share": 1.0191,
      "net_asset_value": 4510000000.0,
      "shares_outstanding": 30498200,
      "total_shareholders": 482190
    }
    // ... mais meses
  ]
}
GET

/fiis/{ticker}/distributions

Retorna o histórico de distribuições de um FII: R$/cota mensal, totais anuais e dividend yield dos últimos 12 meses. Os rendimentos vêm dos proventos anunciados na B3 (atualizados assim que declarados), não do informe mensal da CVM, que tem defasagem de 1 a 2 meses.

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker do FII (ex: XPLG11 ou XPLG)
years int Não Anos de histórico (1-20, padrão: 5)
Requisição
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/fiis/XPLG11/distributions?years=2"
Resposta
{
  "ticker": "XPLG11",
  "name": "XP LOG FDO INV IMOB - FII",
  "dividend_yield_ttm": 9.12,
  "ttm_per_share": 9.2456,
  "close_price": 101.38,
  "total_payments": 24,
  "annual_summary": [
    {
      "year": 2026,
      "total_per_share": 2.3145,
      "payments": 3
    },
    {
      "year": 2025,
      "total_per_share": 9.5623,
      "payments": 12
    }
  ],
  "payments": [
    {
      "reference_date": "2026-03-01",
      "value_per_share": 0.7832,
      "dy_month_pct": 0.7612,
      "book_value_per_share": 102.89
    },
    {
      "reference_date": "2026-02-01",
      "value_per_share": 0.7654,
      "dy_month_pct": 0.7445,
      "book_value_per_share": 102.82
    }
    // ... mais pagamentos
  ]
}
GET

/fiis/screener

Filtra todos os FIIs negociados na B3 por P/VP, dividend yield, NAV, número de cotistas e mais. Use sufixos _gt (maior que) e _lt (menor que) nos parâmetros. Conta como 1 requisição. Requer plano Pro.

Parâmetro Tipo Obrig. Descrição
{metric}_gt float Não Filtro "maior que". Métricas: pvp, dividend_yield_ttm, dy_month_pct, close_price, total_shareholders, shares_outstanding, net_asset_value, book_value_per_share, vacancy_pct, delinquency_pct, leased_pct, property_count, total_area_sqm
{metric}_lt float Não Filtro "menor que". Mesmas métricas acima
segment string Não Filtrar por segmento (ex: "Logística", "Lajes Corporativas")
management_type string Não Filtrar por tipo de gestão (ex: "Ativa", "Passiva")
mandate string Não Filtrar por mandato ("Renda", "Ganho de Capital", "Híbrido"). Valores em PT-BR pois vêm direto da CVM.
fund_type string Não Filtrar por classificação: "Tijolo", "Papel", "Fundo de Fundos", "Híbrido" (derivadas do balanço) ou "Fiagro" (fundos do agronegócio)
administrator string Não Filtrar por administrador (case-insensitive)
sort string Não Ordenar por métrica (padrão: dividend_yield_ttm)
order string Não Ordem: "asc" ou "desc" (padrão: desc)
limit int Não Resultados por página (1-500, padrão: 50)
offset int Não Paginação (padrão: 0)
Requisição
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/fiis/screener?pvp_lt=1&dividend_yield_ttm_gt=8&sort=dividend_yield_ttm&order=desc&limit=10"
Resposta
{
  "data": [
    {
      "ticker": "HGLG11",
      "name": "CSHG LOGÍSTICA FII",
      "segment": "Logística",
      "management_type": "Ativa",
      "reference_date": "2026-03-31",
      "close_price": 158.40,
      "book_value_per_share": 165.50,
      "net_asset_value": 3500000000.00,
      "shares_outstanding": 21148036,
      "total_shareholders": 350000,
      "pvp": 0.96,
      "dividend_yield_ttm": 8.42,
      "dy_month_pct": 0.65,
      "mandate": "Renda",
      "administrator_name": "CREDIT SUISSE HEDGING-GRIFFO CV S.A.",
      "fund_type": "Tijolo",
      "vacancy_pct": 2.91,
      "delinquency_pct": 0.0,
      "leased_pct": 97.09,
      "property_count": 28,
      "total_area_sqm": 1595382.91
    }
  ],
  "count": 10,
  "total": 28,
  "offset": 0,
  "limit": 10
}
GET

/fiis/{ticker}/tenants

Retorna a concentração de receita por setor de inquilino (Comércio, Serviço, Indústria, etc.) para o trimestre mais recente. Os inquilinos individuais não são publicados pela CVM; a agregação é feita por setor de atuação.

Parâmetro Tipo Obrig. Descrição
ticker string Sim Ticker do FII (ex: HGLG11)
format string Não "json" (padrão) ou "csv"
Requisição
curl -H "X-API-Key: sua_chave" \
  https://api.usebolsai.com/api/v1/fiis/HGLG11/tenants
Resposta
{
  "ticker": "HGLG11",
  "reference_date": "2024-12-31",
  "count": 3,
  "top_sector_pct": 71.0,
  "sectors": [
    {"sector": "Logística", "revenue_pct": 71.0},
    {"sector": "Comércio", "revenue_pct": 20.0},
    {"sector": "Indústria", "revenue_pct": 9.0}
  ]
}

Macroeconômicos

Séries históricas do Banco Central do Brasil: SELIC, IPCA, CDI, IGP-M e demais indicadores macroeconômicos via API REST.

GET

/macro

Lista todas as séries macroeconômicas disponíveis: Selic, Meta Selic, IPCA, CDI, IGP-M, USD/BRL e EUR/BRL (PTAX). O campo kind indica se a série é um nível (level — uma taxa ou um preço) ou já é uma variação percentual mensal (pct_change — IPCA e IGP-M), o que determina quais campos o endpoint /macro/{series_name}/stats preenche. O Ibovespa diário está disponível via /stocks/IBOV/history e /stocks/IBOV/stats.

Requisição
curl -H "X-API-Key: sua_chave" \
  https://api.usebolsai.com/api/v1/macro/
Resposta
{
  "series": {
    "selic": { "code": "1178", "name": "Taxa Selic", "kind": "level" },
    "selic_target": { "code": "432", "name": "Meta Selic", "kind": "level" },
    "ipca": { "code": "433", "name": "IPCA", "kind": "pct_change" },
    "cdi": { "code": "4389", "name": "CDI", "kind": "level" },
    "usd_brl": { "code": "1", "name": "USD/BRL (PTAX)", "kind": "level" },
    "eur_brl": { "code": "21620", "name": "EUR/BRL (PTAX)", "kind": "level" },
    "igpm": { "code": "189", "name": "IGP-M", "kind": "pct_change" }
  }
}
GET

/macro/{series_name}

Retorna os dados históricos de uma série macroeconômica. Séries disponíveis: selic, selic_target, ipca, cdi, usd_brl, eur_brl, igpm. A série selic é a taxa Selic efetiva anualizada (base 252, % ao ano); cdi também vem anualizada (base 252, % ao ano); selic_target é a meta definida pelo Copom. ipca e igpm são mensais, em variação percentual do mês (podem ser negativas).

Parâmetro Tipo Obrig. Descrição
series_name string Sim Nome da série: selic, selic_target, ipca, cdi, usd_brl, eur_brl, igpm
start date Não Data de início (formato: YYYY-MM-DD)
end date Não Data de fim (formato: YYYY-MM-DD)
limit int Não Número máximo de registros (1-5000, padrão: 252)
Requisição
curl -H "X-API-Key: sua_chave" \
  "https://api.usebolsai.com/api/v1/macro/selic?start=2026-01-01&limit=5"
Resposta
{
  "series": "selic",
  "series_code": "1178",
  "count": 5,
  "data": [
    { "date": "2026-03-21", "value": 14.15 },
    { "date": "2026-03-20", "value": 14.15 },
    { "date": "2026-03-19", "value": 14.15 },
    { "date": "2026-03-18", "value": 14.15 },
    { "date": "2026-03-17", "value": 14.15 }
  ]
}
GET

/macro/{series_name}/stats

Estatísticas de uma série macroeconômica: variação, máxima/mínima dos últimos 12 meses e acumulados. Útil para exibir juros, inflação ou câmbio com o mesmo formato do endpoint /stocks/{ticker}/stats. Para o Ibovespa, use /stocks/IBOV/stats.

O campo series_kind define quais métricas fazem sentido e, portanto, quais vêm preenchidas. A resposta tem sempre os mesmos campos — os que não se aplicam vêm null.

series_kind: "level" (Selic, Meta Selic, CDI, USD/BRL, EUR/BRL) — a série é uma taxa ou um preço, e o endpoint retorna daily_change_pct e ytd_return_pct.

series_kind: "pct_change" (IPCA, IGP-M) — a série já é uma variação percentual mensal. A variação percentual de uma variação percentual não tem significado e, quando o mês anterior é negativo (o IGP-M deflaciona com frequência), a divisão inverte o sinal. Por isso daily_change_pct e ytd_return_pct vêm null, e no lugar deles a série traz accumulated_12m_pct e accumulated_ytd_pct, compostos por prod(1 + v/100) - 1 — o número normalmente chamado de inflação acumulada.

daily_change é a diferença absoluta em relação à leitura anterior e vem preenchido nos dois casos — para pct_change ele está em pontos percentuais (IPCA de 0,52 para 0,16 é -0.36 p.p.). Nas séries mensais, daily_change compara meses, não dias, e week_52_low/week_52_high são a menor e a maior leitura mensal dos últimos 12 meses. Os nomes desses campos são mantidos por compatibilidade com /stocks/{ticker}/stats.

Requisição
curl -H "X-API-Key: sua_chave" \
  https://api.usebolsai.com/api/v1/macro/usd_brl/stats
Resposta — série de nível (level)
{
  "series": "usd_brl",
  "series_kind": "level",
  "reference_date": "2026-06-23",
  "close": 5.42,
  "daily_change": 0.03,
  "daily_change_pct": 0.56,
  "week_52_low": 4.98,
  "week_52_high": 6.21,
  "ytd_return_pct": -3.14,
  "accumulated_12m_pct": null,
  "accumulated_ytd_pct": null
}
Resposta — série de variação (pct_change)
{
  "series": "igpm",
  "series_kind": "pct_change",
  "reference_date": "2026-06-01",
  "close": -1.16,
  "daily_change": -0.66,
  "daily_change_pct": null,
  "week_52_low": -1.16,
  "week_52_high": 1.52,
  "ytd_return_pct": null,
  "accumulated_12m_pct": 3.24,
  "accumulated_ytd_pct": -1.42
}

Health

Endpoint público para verificação de disponibilidade do serviço.

GET

/health

Verifica o status de saúde da API e suas dependências (PostgreSQL e Redis). Não requer autenticação.

Requisição
curl https://api.usebolsai.com/health
Resposta 200
{
  "status": "ok",
  "environment": "production",
  "checks": {
    "postgres": "ok",
    "redis": "ok"
  }
}

Retorna 200 quando todos os serviços estão saudáveis, ou 503 se algum está indisponível (status: "degraded").