Tutorial 18 abr 2026 9 min de leitura

API Selic, CDI, IPCA em Python: Dados Macroeconômicos Brasileiros

por bolsai · 18 de abril de 2026 · 9 min de leitura

Trabalhar com renda fixa, inflação e valuation no Brasil exige acesso estável a Selic, CDI e IPCA. O texto cobre as séries relevantes do Sistema Gerenciador de Séries Temporais do Banco Central, as armadilhas comuns de quem tenta consumi-las direto, os endpoints /macro da API da bolsai e três exemplos em Python que calculam juro real, comparam rentabilidade de CDB e alimentam a taxa livre de risco usada em modelos de desconto de fluxo de caixa.

Por que acessar Selic, CDI e IPCA programaticamente

A API Selic, CDI e IPCA da bolsai fornece séries macroeconômicas brasileiras normalizadas em JSON ou CSV, cobrindo Selic meta (série 432), IPCA mensal (série 433), CDI e Selic efetiva diárias. O plano gratuito libera 200 requisições por dia, permitindo calcular juro real, alimentar modelos de valuation com taxa livre de risco e comparar rentabilidade de CDBs sem depender de scraping do site do Banco Central.

Selic, CDI e IPCA formam o tripé de referência de qualquer análise financeira no Brasil. A Selic, definida pelo Comitê de Política Monetária (COPOM) em reuniões a cada 45 dias, baliza o custo do dinheiro na economia e funciona como taxa livre de risco em modelos de valuation. O CDI, média das taxas de empréstimo interbancário registradas pela B3, costuma oscilar 0,10 ponto percentual abaixo da Selic meta e é o benchmark padrão da renda fixa privada. O IPCA, medido mensalmente pelo IBGE, sintetiza a inflação oficial e é o denominador natural para converter retorno nominal em retorno real.

Em abril de 2026, a Selic meta está em 12,25% ao ano, o IPCA acumulado em 12 meses ronda 4,2% e o CDI anualizado fica próximo de 12,15%. Esses três números alimentam desde o cálculo de prêmio de um fundo DI até a taxa de desconto de um DCF em uma análise fundamentalista de múltiplos. Quem depende desses indicadores em produção precisa de uma fonte automatizável, versionada e com latência previsível.

As dores do acesso direto ao BCB SGS

O Sistema Gerenciador de Séries Temporais (SGS) do Banco Central do Brasil é a fonte primária oficial das séries macroeconômicas. O serviço existe desde a década de 1990 e acumulou peculiaridades que transformam a integração direta em um projeto de manutenção permanente.

Uma wrapper REST resolve esses pontos ao fatiar janelas longas internamente, normalizar formatos de data e valor, persistir os dados em banco próprio e garantir disponibilidade quando o SGS oscila. O desenho da API da bolsai segue esse princípio: uma única requisição HTTPS retorna a série pronta para alimentar um DataFrame do pandas.

Endpoints /macro/ da bolsai: Selic, CDI, IPCA

A API da bolsai expõe as séries macroeconômicas sob o prefixo /macro. O contrato é uniforme: cada rota aceita start, end, limit e format, e devolve um objeto contendo o nome e o código SGS correspondente, acompanhados da série ordenada por data. A tabela resume as séries publicadas.

Endpoint bolsai Série SGS Descrição Frequência
/macro/selic_target 432 Selic meta definida pelo COPOM Evento (a cada reunião)
/macro/selic 11 Selic efetiva diária (taxa over) Diária
/macro/cdi 12 CDI diário (DI-Over) Diária
/macro/ipca 433 IPCA mensal (IBGE) Mensal
/macro/usd_brl 1 Dólar comercial (PTAX de venda) Diária
/macro/eur_brl 21620 Euro (PTAX de venda) Diária

Outras séries úteis para análise complementar, hoje acessíveis via SGS e em avaliação para inclusão nativa na API, incluem a série 4389 (CDI anualizado base 252), a série 4390 (Selic efetiva mensal), a série 4391 (CDI mensal) e a série 13522 (IPCA acumulado em 12 meses). A documentação viva em /docs acompanha a adição de cada série conforme o backlog evolui.

Buscando a Selic histórica em Python

O primeiro exemplo consome a série Selic efetiva diária para os últimos 12 meses. O código abaixo utiliza a biblioteca requests, recorta a janela temporal com os parâmetros start e end e carrega o resultado em um DataFrame do pandas pronto para análise. A fonte é a série 11 do BCB SGS, replicada integralmente pela bolsai.

import requests
import pandas as pd
from datetime import date, timedelta

API_KEY = "sk_sua_chave_aqui"
BASE = "https://api.usebolsai.com/api/v1"
HEADERS = {"X-API-Key": API_KEY}

# Últimos 12 meses da Selic efetiva diária (SGS 11)
end = date.today()
start = end - timedelta(days=365)

r = requests.get(
    f"{BASE}/macro/selic",
    params={"start": start.isoformat(), "end": end.isoformat(), "limit": 300},
    headers=HEADERS,
    timeout=15,
)
payload = r.json()

selic = pd.DataFrame(payload["data"])
selic["date"] = pd.to_datetime(selic["date"])
selic = selic.sort_values("date").set_index("date")

print(f"Série: {payload['series']} (SGS {payload['series_code']})")
print(f"Observações: {payload['count']}")
print(f"Último valor: {selic['value'].iloc[-1]:.4f}% a.d.")
print(f"Média 12m: {selic['value'].mean():.4f}% a.d.")

Saída representativa em abril de 2026:

Série: selic (SGS 11)
Observações: 252
Último valor: 0.0459% a.d.
Média 12m: 0.0471% a.d.

O valor diário pode ser convertido para taxa anualizada equivalente usando base 252 dias úteis: (1 + taxa_diaria) ** 252 − 1. O resultado em abril de 2026 converge para algo próximo de 12,15% ao ano, compatível com a Selic meta vigente de 12,25%. A pequena diferença entre efetiva e meta reflete o arredondamento do sistema de leilões do Banco Central.

O plano gratuito libera 200 requisições por dia para todos os endpoints, inclusive /macro. Suficiente para replicar os exemplos do post e iniciar um projeto de análise macro.

Criar conta gratuita

Comparando CDI e IPCA: calculando o juro real

O juro real é a taxa de juros descontada da inflação. A aproximação linear (CDI menos IPCA) funciona para exposição rápida, mas a fórmula correta obedece à equação de Fisher: r_real = (1 + r_nominal) / (1 + inflacao) − 1. O exemplo a seguir busca CDI e IPCA dos últimos 12 meses via API da bolsai, acumula cada um pelo produto dos fatores mensais e aplica Fisher.

import requests
import pandas as pd
from datetime import date, timedelta

API_KEY = "sk_sua_chave_aqui"
BASE = "https://api.usebolsai.com/api/v1"
HEADERS = {"X-API-Key": API_KEY}

def fetch_series(name, start, end):
    r = requests.get(
        f"{BASE}/macro/{name}",
        params={"start": start, "end": end, "limit": 400},
        headers=HEADERS,
        timeout=15,
    )
    df = pd.DataFrame(r.json()["data"])
    df["date"] = pd.to_datetime(df["date"])
    return df.sort_values("date").set_index("date")["value"]

end = date.today().isoformat()
start = (date.today() - timedelta(days=400)).isoformat()

cdi_diario = fetch_series("cdi", start, end) / 100
ipca_mensal = fetch_series("ipca", start, end) / 100

# Acumula CDI em 12 meses via fator (1 + r)^252 equivalente
cdi_12m = (1 + cdi_diario).tail(252).prod() - 1

# Acumula IPCA em 12 meses multiplicando fatores mensais
ipca_12m = (1 + ipca_mensal).tail(12).prod() - 1

juro_real = (1 + cdi_12m) / (1 + ipca_12m) - 1

print(f"CDI 12m (nominal): {cdi_12m*100:.2f}%")
print(f"IPCA 12m:          {ipca_12m*100:.2f}%")
print(f"Juro real (Fisher): {juro_real*100:.2f}%")

Saída típica em abril de 2026:

CDI 12m (nominal): 12.15%
IPCA 12m:          4.21%
Juro real (Fisher): 7.62%

O resultado indica que 100% do CDI equivale a aproximadamente 7,6% ao ano acima da inflação no cenário vigente. A aproximação linear (12,15 − 4,21 = 7,94%) superestima o juro real em mais de 0,3 ponto percentual, diferença relevante em carteiras grandes ou em horizontes longos. A equação de Fisher é o padrão adotado pelo IBGE e pela literatura de finanças clássica.

Exemplo prático: rentabilidade ajustada pela inflação

O terceiro exemplo aplica o juro real calculado acima para comparar dois CDBs hipotéticos emitidos em abril de 2026: um CDB de 105% do CDI e um CDB prefixado de 13,5% ao ano, ambos com prazo de um ano e sem incidência de IOF. O cálculo traduz cada rentabilidade nominal em rentabilidade real líquida, considerando alíquota de imposto de renda de 17,5% para resgate em 361 dias.

import requests

API_KEY = "sk_sua_chave_aqui"
BASE = "https://api.usebolsai.com/api/v1"
HEADERS = {"X-API-Key": API_KEY}

# IPCA 12m projetado e CDI 12m observado (reaproveitando o bloco anterior)
CDI_12M = 0.1215
IPCA_12M = 0.0421
IR = 0.175  # 17,5% para prazo entre 181 e 720 dias

def rentabilidade_real(nominal_bruta):
    liquida = nominal_bruta * (1 - IR)
    real = (1 + liquida) / (1 + IPCA_12M) - 1
    return liquida, real

# CDB 105% do CDI
nominal_cdb_cdi = 1.05 * CDI_12M
liquida_cdi, real_cdi = rentabilidade_real(nominal_cdb_cdi)

# CDB prefixado 13,5% a.a.
nominal_cdb_pre = 0.135
liquida_pre, real_pre = rentabilidade_real(nominal_cdb_pre)

print(f"CDB 105% CDI   | Nominal {nominal_cdb_cdi*100:.2f}%  Líq {liquida_cdi*100:.2f}%  Real {real_cdi*100:.2f}%")
print(f"CDB 13,5% pre  | Nominal {nominal_cdb_pre*100:.2f}%  Líq {liquida_pre*100:.2f}%  Real {real_pre*100:.2f}%")

Saída esperada:

CDB 105% CDI   | Nominal 12.76%  Líq 10.53%  Real 6.06%
CDB 13,5% pre  | Nominal 13.50%  Líq 11.14%  Real 6.65%

A simulação mostra que, com IPCA em 4,21% e CDI em 12,15%, o CDB prefixado entrega juro real líquido de 6,65% ao ano contra 6,06% do CDB pós-fixado a 105% do CDI. A conclusão não é universal: se a Selic subir durante o período do investimento, o pós-fixado tende a recuperar ou superar o prefixado. A análise reforça a importância de rodar o cálculo com dados atualizados da API em vez de depender de planilhas estáticas. Para composição de carteira com renda variável de distribuidores de proventos, o post sobre Dividend Yield via API de ações brasileiras complementa a visão.

Integração com análise de ações (taxa livre de risco para valuation)

Em modelos de Discounted Cash Flow (DCF) e Dividend Discount Model (DDM), a taxa livre de risco aparece como componente da taxa de desconto, normalmente somada a um prêmio de risco de mercado e ao beta da ação. No Brasil, a convenção aceita é utilizar a Selic meta ou um proxy de juro pré longo (NTN-B 10 anos, título Tesouro IPCA+). Para cálculos tático-táticos e screeners, a Selic pura já entrega precisão suficiente.

A rotina típica começa com uma consulta simples a /macro/selic_target para obter o último valor em vigor, seguida de uma chamada a /fundamentals/{ticker} para recuperar métricas como LPA, VPA, ROE e crescimento. O valor da Selic alimenta a taxa de desconto; as métricas fundamentalistas alimentam o numerador do modelo. O tutorial sobre bolsai vs brapi na B3 detalha a cobertura comparativa, e a documentação da API descreve todos os endpoints relevantes.

Um modelo de Gordon simplificado para DDM, por exemplo, toma a forma P = D1 / (r − g), em que r é a taxa de desconto (Selic + prêmio de equity) e g é a taxa de crescimento esperada dos dividendos. Com a Selic em 12,25%, um prêmio de equity de 6 pontos e crescimento de 4% ao ano, o denominador fica em 14,25%, resultando em múltiplos consistentes com o observado em empresas brasileiras maduras de dividendos. Atualizar esse cálculo passa a ser uma chamada HTTPS, não uma leitura manual no site do BCB.

Boletim Focus (roadmap)

O Boletim Focus é a pesquisa semanal do Banco Central que consolida expectativas de mercado para Selic, IPCA, PIB, câmbio e demais variáveis macroeconômicas, baseadas em respostas de cerca de 140 instituições financeiras e consultorias. A publicação ocorre às segundas-feiras e influencia decisões do COPOM, de gestores de fundos e de tesourarias corporativas.

O acesso direto é feito via API Olinda do próprio BCB em olinda.bcb.gov.br, que usa OData e retorna projeções em janelas de curto, médio e longo prazo. A inclusão nativa das séries do Focus na API da bolsai está no roadmap sob o escopo de expansão do catálogo /macro/focus/*, com previsão de exposição da mediana, mínimo, máximo e desvio-padrão das expectativas agregadas. O status atualizado é mantido na referência da documentação.

Perguntas frequentes

Qual a Selic atual?

A Selic meta definida pelo COPOM na reunião de 18 e 19 de março de 2026 encerrou em 12,25% ao ano. O valor corresponde à série 432 do Sistema Gerenciador de Séries Temporais do Banco Central. Pela API da bolsai, o endpoint GET /macro/selic_target retorna o último valor em vigor e o histórico completo de cada alteração decidida pelo COPOM desde 1999.

Como calcular o juro real no Python?

O juro real aproximado é obtido subtraindo a inflação acumulada em 12 meses da taxa nominal de juros acumulada no mesmo intervalo. A fórmula precisa utiliza a equação de Fisher: r_real = (1 + r_nominal) / (1 + inflacao) − 1. O post traz um exemplo em Python que busca CDI e IPCA via API da bolsai, acumula os valores em 12 meses e aplica a equação de Fisher para retornar o juro real em termos anuais.

A API da bolsai cobra separado por endpoint?

Não. O plano gratuito libera 200 requisições por dia cobrindo todos os endpoints, incluindo /macro, /fundamentals, /stocks, /dividends, /fiis e /screener. O plano Pro a R$49 por mês amplia para 10 mil requisições diárias mantendo o mesmo catálogo. Não existe cobrança adicional por série macroeconômica ou por ticker consultado. Os tiers aparecem na página de preços.

Onde encontro a série histórica completa da Selic?

A fonte primária é o Sistema Gerenciador de Séries Temporais (SGS) do Banco Central, que publica a série 432 (Selic meta) e a série 11 (Selic efetiva diária). Pela API da bolsai, GET /macro/selic_target e GET /macro/selic retornam o histórico completo em JSON ou CSV, com os parâmetros start, end e limit para recorte temporal. O horizonte disponível cobre desde 1999 (Selic meta) e 1986 (Selic efetiva diária).

Próximos passos

Consumir Selic, CDI e IPCA diretamente do BCB SGS funciona para scripts de uso pontual, mas não se sustenta em produção por conta de formatos inconsistentes, limites de janela e janelas de indisponibilidade. A API Selic CDI IPCA da bolsai resolve o acoplamento com uma interface REST única, mesmo padrão de parâmetros, saída em JSON e CSV e suporte a CORS para uso em notebooks e frontends. Para dar o próximo passo, vale consultar a documentação completa e conferir os limites de cada tier.

Leia também

Este conteúdo é educativo e não constitui recomendação de investimento.