Bonds GET
Retorna títulos de renda fixa ativos com retorno líquido e ganho real calculados usando projeções anuais de SELIC e IPCA do Boletim Focus. Com uma chave de API válida e uma assinatura ativa na conta vinculada à chave, você recebe todos os títulos; sem chave, recebe até 5 títulos como prévia.
Autenticação
A API usa chaves de acesso no cabeçalho Authorization. Sem uma chave válida, a resposta retorna apenas 5 títulos de prévia com status: "preview".
1. Gere uma chave
Acesse Conta → Chaves de API e clique em Gerar nova chave. Copie o valor imediatamente — ele não será exibido novamente.
2. Passe a chave na requisição
Há dois métodos aceitos:
Opção A — cabeçalho HTTP recomendado
Use o cabeçalho Authorization: Bearer. A chave não fica exposta em logs de servidor, histórico do navegador ou URLs compartilhadas.
curl -H "Authorization: Bearer rf_SUA_CHAVE_AQUI" \ "https://rendafixa.api.br/api/"
const res = await fetch( "https://rendafixa.api.br/api/", { headers: { Authorization: "Bearer rf_SUA_CHAVE_AQUI" } } ); const { bonds } = await res.json(); console.log(bonds[0].real_annualized_return);
import requests r = requests.get( "https://rendafixa.api.br/api/", headers={"Authorization": "Bearer rf_SUA_CHAVE_AQUI"}, ) print(r.json()["bonds"][0]["real_annualized_return"])
<?php $ch = curl_init("https://rendafixa.api.br/api/"); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer rf_SUA_CHAVE_AQUI" ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = json_decode(curl_exec($ch), true);
req, _ := http.NewRequest("GET", "https://rendafixa.api.br/api/", nil) req.Header.Set("Authorization", "Bearer rf_SUA_CHAVE_AQUI") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() json.NewDecoder(res.Body).Decode(&out)
Opção B — parâmetro de URL
Passe a chave como ?key=. Útil para testes rápidos no navegador ou ferramentas que não permitem cabeçalhos customizados. Evite em produção — a chave fica visível em logs e histórico.
curl "https://rendafixa.api.br/api/?key=rf_SUA_CHAVE_AQUI"
const res = await fetch("https://rendafixa.api.br/api/?key=rf_SUA_CHAVE_AQUI"); const { bonds } = await res.json(); console.log(bonds[0].real_annualized_return);
import requests r = requests.get("https://rendafixa.api.br/api/?key=rf_SUA_CHAVE_AQUI") print(r.json()["bonds"][0]["real_annualized_return"])
<?php $data = json_decode(file_get_contents( "https://rendafixa.api.br/api/?key=rf_SUA_CHAVE_AQUI" ), true); print_r($data["bonds"][0]);
res, _ := http.Get("https://rendafixa.api.br/api/?key=rf_SUA_CHAVE_AQUI") defer res.Body.Close() json.NewDecoder(res.Body).Decode(&out)
Quando ambos estão presentes, o cabeçalho tem prioridade. As chaves expiram em 1 ano. Além da chave, o acesso completo exige uma assinatura ativa na conta que gerou a chave. Se a chave for inválida, revogada ou expirada, a resposta retorna response.status: "unauthorized". Se a chave for válida mas não houver assinatura ativa, retorna "no_subscription"; se houver problema de pagamento, retorna "payment_issue". Em todos esses casos, bonds vem vazio.
Endpoint
Uma requisição GET para https://rendafixa.api.br/api/. Sem parâmetros, retorna todos os títulos ativos aos quais sua chave dá acesso.
Parâmetros
| Parâmetro | Onde | Obrigatório | Descrição |
|---|---|---|---|
Authorization |
Header | Não | Chave de API no formato Bearer rf_SUA_CHAVE. Tem prioridade sobre key. |
key |
Query string | Não | Chave de API passada como ?key=rf_SUA_CHAVE. Útil para testes no navegador. |
Fazendo a requisição
curl -H "Authorization: Bearer rf_SUA_CHAVE_AQUI" \ "https://rendafixa.api.br/api/"
const res = await fetch( "https://rendafixa.api.br/api/", { headers: { Authorization: "Bearer rf_SUA_CHAVE_AQUI" } } ); const { bonds } = await res.json(); console.log(bonds[0].real_annualized_return);
import requests r = requests.get( "https://rendafixa.api.br/api/", headers={"Authorization": "Bearer rf_SUA_CHAVE_AQUI"}, ) print(r.json()["bonds"][0]["real_annualized_return"])
<?php $ch = curl_init("https://rendafixa.api.br/api/"); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer rf_SUA_CHAVE_AQUI" ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = json_decode(curl_exec($ch), true);
req, _ := http.NewRequest("GET", "https://rendafixa.api.br/api/", nil) req.Header.Set("Authorization", "Bearer rf_SUA_CHAVE_AQUI") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() json.NewDecoder(res.Body).Decode(&out)
Valores de status
| response.status | response.description |
|---|---|
ok | Chave válida e assinatura ativa. Todos os títulos ativos são retornados. |
preview | Nenhuma chave foi enviada. Retorna até 5 títulos como prévia. |
unauthorized | Chave enviada, mas inválida, revogada ou expirada. Nenhum título é retornado. |
no_subscription | Chave válida, mas a conta não tem assinatura ativa (nunca assinou, cancelou ou não há plano vinculado). O campo description detalha o motivo. Assine em Planos para restaurar o acesso. Nenhum título é retornado. |
payment_issue | Chave válida e assinatura existente, mas pagamento falhou ou o período expirou. Atualize o método de pagamento em Assinaturas para restaurar o acesso. Nenhum título é retornado. |
rate_limited | Requisições muito frequentes. Aguarde pelo menos 5 segundos entre chamadas. |
Filtros
Todos os parâmetros abaixo são opcionais e podem ser combinados. Parâmetros que aceitam múltiplos valores podem ser passados como lista separada por vírgula ou repetindo o parâmetro com [].
| Parâmetro | Tipo | Descrição |
|---|---|---|
product |
string (multi) | Filtra por tipo de produto. Valores aceitos: cdb, lci, lca, cri, cra, deb, tpf, td, lf, misc. Ex: product=cdb,lci ou product[]=cdb&product[]=lci. |
index |
string (multi) | Filtra por indexador. Valores aceitos: cdi*, cdi+, ipca*, ipca+, selic*, selic+, pre. Ex: index=ipca+,cdi+. |
bank |
integer (multi) | Filtra por código numérico do banco (campo bank na resposta). Ex: bank=77,208. |
tax_free |
0 ou 1 | Retorna apenas títulos isentos de IR (tax_free=1) ou apenas tributados (tax_free=0). |
fgc |
0 ou 1 | Retorna apenas títulos cobertos pelo FGC (fgc=1) ou sem cobertura (fgc=0). |
Exemplos
Só CDBs e LCIs:
curl -H "Authorization: Bearer rf_SUA_CHAVE_AQUI" \ "https://rendafixa.api.br/api/?product=cdb,lci"
const res = await fetch( "https://rendafixa.api.br/api/?product=cdb,lci", { headers: { Authorization: "Bearer rf_SUA_CHAVE_AQUI" } } ); const { bonds } = await res.json(); console.log(bonds[0].real_annualized_return);
import requests r = requests.get( "https://rendafixa.api.br/api/?product=cdb,lci", headers={"Authorization": "Bearer rf_SUA_CHAVE_AQUI"}, ) print(r.json()["bonds"][0]["real_annualized_return"])
<?php $ch = curl_init("https://rendafixa.api.br/api/?product=cdb,lci"); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer rf_SUA_CHAVE_AQUI" ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = json_decode(curl_exec($ch), true);
req, _ := http.NewRequest("GET", "https://rendafixa.api.br/api/?product=cdb,lci", nil) req.Header.Set("Authorization", "Bearer rf_SUA_CHAVE_AQUI") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() json.NewDecoder(res.Body).Decode(&out)
Títulos IPCA+ e CDI+:
curl -H "Authorization: Bearer rf_SUA_CHAVE_AQUI" \ "https://rendafixa.api.br/api/?index=ipca%2B,cdi%2B"
const res = await fetch( "https://rendafixa.api.br/api/?index=ipca%2B,cdi%2B", { headers: { Authorization: "Bearer rf_SUA_CHAVE_AQUI" } } ); const { bonds } = await res.json(); console.log(bonds[0].real_annualized_return);
import requests r = requests.get( "https://rendafixa.api.br/api/?index=ipca%2B,cdi%2B", headers={"Authorization": "Bearer rf_SUA_CHAVE_AQUI"}, ) print(r.json()["bonds"][0]["real_annualized_return"])
<?php $ch = curl_init("https://rendafixa.api.br/api/?index=ipca%2B,cdi%2B"); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer rf_SUA_CHAVE_AQUI" ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = json_decode(curl_exec($ch), true);
req, _ := http.NewRequest("GET", "https://rendafixa.api.br/api/?index=ipca%2B,cdi%2B", nil) req.Header.Set("Authorization", "Bearer rf_SUA_CHAVE_AQUI") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() json.NewDecoder(res.Body).Decode(&out)
Isentos de IR com FGC — LCIs e LCAs com proteção:
curl -H "Authorization: Bearer rf_SUA_CHAVE_AQUI" \ "https://rendafixa.api.br/api/?product=lci,lca&fgc=1&tax_free=1"
const res = await fetch( "https://rendafixa.api.br/api/?product=lci,lca&fgc=1&tax_free=1", { headers: { Authorization: "Bearer rf_SUA_CHAVE_AQUI" } } ); const { bonds } = await res.json(); console.log(bonds[0].real_annualized_return);
import requests r = requests.get( "https://rendafixa.api.br/api/?product=lci,lca&fgc=1&tax_free=1", headers={"Authorization": "Bearer rf_SUA_CHAVE_AQUI"}, ) print(r.json()["bonds"][0]["real_annualized_return"])
<?php $ch = curl_init("https://rendafixa.api.br/api/?product=lci,lca&fgc=1&tax_free=1"); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer rf_SUA_CHAVE_AQUI" ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = json_decode(curl_exec($ch), true);
req, _ := http.NewRequest("GET", "https://rendafixa.api.br/api/?product=lci,lca&fgc=1&tax_free=1", nil) req.Header.Set("Authorization", "Bearer rf_SUA_CHAVE_AQUI") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() json.NewDecoder(res.Body).Decode(&out)
Múltiplos bancos com produto específico:
curl -H "Authorization: Bearer rf_SUA_CHAVE_AQUI" \ "https://rendafixa.api.br/api/?product=cdb&bank=77,208,341"
const res = await fetch( "https://rendafixa.api.br/api/?product=cdb&bank=77,208,341", { headers: { Authorization: "Bearer rf_SUA_CHAVE_AQUI" } } ); const { bonds } = await res.json(); console.log(bonds[0].real_annualized_return);
import requests r = requests.get( "https://rendafixa.api.br/api/?product=cdb&bank=77,208,341", headers={"Authorization": "Bearer rf_SUA_CHAVE_AQUI"}, ) print(r.json()["bonds"][0]["real_annualized_return"])
<?php $ch = curl_init("https://rendafixa.api.br/api/?product=cdb&bank=77,208,341"); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer rf_SUA_CHAVE_AQUI" ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = json_decode(curl_exec($ch), true);
req, _ := http.NewRequest("GET", "https://rendafixa.api.br/api/?product=cdb&bank=77,208,341", nil) req.Header.Set("Authorization", "Bearer rf_SUA_CHAVE_AQUI") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() json.NewDecoder(res.Body).Decode(&out)
Filtros podem ser combinados livremente. Valores de product e index fora da lista de valores aceitos são ignorados silenciosamente.
Resposta
Content-Type: application/json
{ "response": { "status": "ok", "description": "Authenticated. All active bonds returned." }, "bonds": [ { "name": "CDB 360 DIAS", "bank": 77, "bank_name": "Banco Inter", "product": "cdb", "index": "cdi*", "rate": 1.05, "fgc_protection": true, "tax_free": false, "exclusive": false, "min_investment": 100, "maturity_date": "2027-05-08", "early_withdrawal": true, "rating": "AA+", "payment_probability": 0.9823, "net_annualized_return": 0.1165, "real_annualized_return": 0.0676 }, // … demais títulos ] }
Campos
| Campo | Tipo | Descrição |
|---|---|---|
name | string | Nome do título. |
bank | integer | Código numérico interno do banco emissor. |
bank_name | string | Nome do banco emissor. |
product | string | Tipo de produto. Ver tabela de produtos. |
index | string | Indexador do rendimento. Ver tabela de indexadores. |
rate | number | Fator ou spread do indexador. Valor decimal, não percentual — ex: 1.05 significa 105% do CDI, 0.1054 significa spread de 10,54% a.a. Ver tabela de indexadores. |
fgc_protection | boolean | Coberto pelo FGC até R$ 250.000 por CPF por instituição. |
tax_free | boolean | Isento de Imposto de Renda para pessoa física (LCI, LCA, CRI, CRA e debêntures incentivadas). |
exclusive | boolean | Restrito a investidores qualificados (patrimônio > R$ 1 milhão). |
min_investment | number | Valor mínimo de aplicação em reais. |
maturity_date | string | Data de vencimento no formato YYYY-MM-DD. |
early_withdrawal | boolean | Permite resgate antes do vencimento. |
rating | string | null | Rating de crédito do emissor (ex: "AAA", "AA+", "BB-"). null quando não disponível. |
payment_probability | number | null | Probabilidade de pagamento no vencimento, interpolada a partir da tabela de ratings para o prazo do título. Decimal — ex: 0.9823 = 98,23%. null quando não há rating ou prazo inválido. |
net_annualized_return | number | Retorno líquido anualizado após IR, calculado até o vencimento. Decimal — ex: 0.1479 = 14,79% a.a. Ver como é calculado. |
real_annualized_return | number | Ganho real anualizado acima do IPCA pela equação de Fisher. Decimal — ex: 0.0676 = 6,76% a.a. Ver como é calculado. |
Valores de product
| Valor | Produto |
|---|---|
cdb | CDB — Certificado de Depósito Bancário |
lci | LCI — Letra de Crédito Imobiliário |
lca | LCA — Letra de Crédito do Agronegócio |
cri | CRI — Certificado de Recebíveis Imobiliários |
cra | CRA — Certificado de Recebíveis do Agronegócio |
deb | Debênture |
tpf | Título Público Federal |
td | Tesouro Direto |
lf | Letra Financeira |
misc | Outros |
Valores de index
O campo rate é um decimal. Exemplos com rate = 1.05 ou rate = 0.02:
| Valor | Fórmula | Exemplo |
|---|---|---|
cdi* | rate × CDI | rate=1.05 → 105% do CDI |
cdi+ | CDI + rate | rate=0.02 → CDI + 2% a.a. |
ipca* | rate × IPCA | rate=1.05 → 105% do IPCA |
ipca+ | IPCA + rate | rate=0.1054 → IPCA + 10,54% a.a. |
selic* | rate × SELIC | rate=1.0 → 100% da SELIC |
selic+ | SELIC + rate | rate=0.02 → SELIC + 2% a.a. |
pre | rate (bruto fixo) | rate=0.179 → 17,9% a.a. prefixado |
Como os retornos são calculados
Os retornos não usam uma taxa única de mercado. O período de holding é segmentado ano a ano, e cada segmento aplica as taxas de SELIC e IPCA previstas para aquele ano, obtidas do Boletim Focus (BCB). Se o título vencer além do horizonte das projeções, a última taxa disponível é replicada.
net_annualized_return — o retorno bruto é calculado por composição ano a ano. Sobre o total do período, aplica-se a alíquota de IR conforme a tabela regressiva (22,5% até 180 dias, 20% até 360, 17,5% até 720, 15% acima). O resultado líquido do período é então anualizado. Títulos isentos (tax_free: true) pulam a dedução de IR.
real_annualized_return — o IPCA também é composto ano a ano sobre o mesmo período. O ganho real é calculado pela equação de Fisher aplicada ao período completo e depois anualizado: (1 + net_period) / (1 + ipca_period) ^ (365/dias) − 1. Retorna null se o vencimento já passou ou o indexador não é reconhecido.
Integrações
A mesma chave e as mesmas regras de acesso valem em todas as formas de usar a API: sem chave, a prévia; com chave e assinatura ativa, todos os títulos.
Assistentes de IA (MCP)
A API também é um servidor MCP remoto em https://rendafixa.api.br/mcp. Adicione essa URL ao Claude, ChatGPT, Cursor ou qualquer cliente MCP e pergunte em linguagem natural — "qual LCI isenta com FGC rende mais em até 2 anos?". Ferramentas: search_bonds (filtra e ordena por retorno líquido, ganho real, vencimento ou aplicação mínima) e list_issuers.
Claude Code (bash) e Cursor (.cursor/mcp.json):
claude mcp add --transport http rendafixa https://rendafixa.api.br/mcp \ --header "Authorization: Bearer rf_SUA_CHAVE_AQUI"
{ "mcpServers": { "rendafixa": { "url": "https://rendafixa.api.br/mcp", "headers": { "Authorization": "Bearer rf_SUA_CHAVE_AQUI" } } } }
Clientes que só aceitam uma URL (conectores personalizados do Claude.ai e do ChatGPT): use https://rendafixa.api.br/mcp?key=rf_SUA_CHAVE_AQUI.
Planilhas (CSV)
Com format=csv, a resposta vem em CSV, pronta para planilhas. Em uma planilha do Google em português, acrescente locale=pt-BR para os números virem com vírgula decimal. Filtros funcionam normalmente.
=IMPORTDATA("https://rendafixa.api.br/api/?format=csv&locale=pt-BR&key=rf_SUA_CHAVE_AQUI")
Dados → Da Web → https://rendafixa.api.br/api/?format=csv&key=rf_SUA_CHAVE_AQUI
OpenAPI e Markdown
A descrição completa em OpenAPI 3.1 importa direto no Postman, Insomnia e geradores de cliente. A documentação também existe em Markdown, para colar em um assistente ou em um README.