A BRAPI tem SDKs oficiais para TypeScript/JavaScript e Python. Elas cobrem todos os endpoints v2 da API, com tipos completos, erros tipados e retry automático.
Novidades de setembro de 2026
- Todos os endpoints v2. As SDKs passaram de 11 para 78 métodos. Agora incluem ações, tickers, FIIs, fundos, opções, futuros, Tesouro Direto, macro e uso da conta.
- Token corrigido. As versões do PyPI de 1.3.0 a 1.8.0 não enviavam o token nas requisições. Atualize para a versão 1.9.0 ou mais recente.
- Versões atuais:
brapi1.7.0 no npm ebrapi1.9.0 no PyPI. - Métodos antigos mantidos.
client.quote.retrievee os outros métodos da primeira versão continuam funcionando. Em código novo, use os métodos declient.v2. - Opção
environment_1removida (TypeScript). Ela apontava para um servidor local de testes. Se você a usava, remova a opção. O cliente usahttps://brapi.devpor padrão.
Instalação
TypeScript/JavaScript
npm install brapi
# ou
pnpm add brapi
# ou
bun add brapiPython (3.9 ou mais recente)
pip install --upgrade brapiAs duas SDKs leem o token da variável de ambiente BRAPI_API_KEY. Você também pode passar o token direto no cliente. Obtenha seu token no dashboard.
Cotação de uma ação
TypeScript
import Brapi from 'brapi';
const client = new Brapi({
apiKey: process.env.BRAPI_API_KEY,
});
const response = await client.v2.stocks.quote({ symbols: 'PETR4' });
const petr4 = response.results[0].data;
console.log(petr4.longName); // Petroleo Brasileiro SA Pfd
console.log(petr4.regularMarketPrice); // 48.72
console.log(petr4.regularMarketChangePercent); // 1.52Python
from brapi import Brapi
client = Brapi(api_key="seu_token")
response = client.v2.stocks.quote(symbols="PETR4")
petr4 = response.results[0].data
print(petr4.long_name) # Petroleo Brasileiro SA Pfd
print(petr4.regular_market_price) # 48.72Os nomes dos campos seguem cada linguagem: regularMarketPrice no TypeScript e regular_market_price no Python.
Histórico de preços
const history = await client.v2.stocks.historical({
symbols: 'PETR4',
range: '1mo',
interval: '1d',
});
for (const day of history.results[0].data.historicalDataPrice) {
console.log(new Date(day.date * 1000), day.close, day.volume);
}history = client.v2.stocks.historical(symbols="PETR4", range="1mo", interval="1d")
for day in history.results[0].data.historical_data_price:
print(day.date, day.close, day.volume)Dividendos e JCP
const dividends = await client.v2.stocks.dividends({ symbols: 'ITUB4' });
for (const item of dividends.results[0].data.cashDividends) {
console.log(item.label, item.rate, item.paymentDate);
}dividends = client.v2.stocks.dividends(symbols="ITUB4")
for item in dividends.results[0].data.cash_dividends:
print(item.label, item.rate, item.payment_date)Métodos disponíveis
Cada grupo de endpoints da API tem um grupo de métodos em client.v2. A lista completa está no arquivo api.md de cada repositório.
| Dados | TypeScript | Python |
|---|---|---|
| Ações: cotação, histórico, dividendos, perfil, estatísticas, balanço, DRE, DFC, DVA | client.v2.stocks | client.v2.stocks |
| Lista de tickers, busca e renomeações | client.v2.tickers | client.v2.tickers |
| FIIs: indicadores, portfólio, imóveis, relatórios, dividendos | client.v2.fii | client.v2.fii |
| Fundos, Fiagro, FIDC e FIP | client.v2.funds | client.v2.funds |
| Opções: vencimentos, strikes, cadeia, posições, gregas | client.v2.options | client.v2.options |
| Futuros e opções sobre futuros | client.v2.futures | client.v2.futures |
| Tesouro Direto | client.v2.treasury | client.v2.treasury |
| Séries macroeconômicas | client.v2.macro | client.v2.macro |
| Inflação e taxa básica de juros | client.v2.inflation, client.v2.primeRate | client.v2.inflation, client.v2.prime_rate |
| Moedas e criptomoedas | client.v2.currency, client.v2.crypto | client.v2.currency, client.v2.crypto |
| Uso da sua conta | client.v2.user.usage() | client.v2.user.usage() |
Cliente assíncrono em Python
import asyncio
from brapi import AsyncBrapi
async def main():
async with AsyncBrapi(api_key="seu_token") as client:
petr4, vale3 = await asyncio.gather(
client.v2.stocks.quote(symbols="PETR4"),
client.v2.stocks.quote(symbols="VALE3"),
)
print(petr4.results[0].data.regular_market_price)
print(vale3.results[0].data.regular_market_price)
asyncio.run(main())Exemplo com Next.js
// app/acao/[ticker]/page.tsx
import Brapi from 'brapi';
const client = new Brapi({
apiKey: process.env.BRAPI_API_KEY,
});
export default async function StockPage({
params,
}: {
params: Promise<{ ticker: string }>;
}) {
const { ticker } = await params;
const response = await client.v2.stocks.quote({ symbols: ticker });
const stock = response.results[0].data;
return (
<div>
<h1>{stock.longName}</h1>
<p>R$ {stock.regularMarketPrice.toFixed(2)}</p>
</div>
);
}Exemplo com FastAPI
from fastapi import FastAPI
from brapi import AsyncBrapi
app = FastAPI()
client = AsyncBrapi() # lê BRAPI_API_KEY
@app.get("/cotacao/{ticker}")
async def get_quote(ticker: str):
response = await client.v2.stocks.quote(symbols=ticker)
stock = response.results[0].data
return {"symbol": ticker, "price": stock.regular_market_price}Comparação: requisição manual e SDK
Sem SDK, você monta a URL, envia o token, confere o status e lê o JSON sem tipos:
const response = await fetch(
'https://brapi.dev/api/v2/stocks/quote?symbols=PETR4',
{ headers: { Authorization: `Bearer ${token}` } },
);
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const json = await response.json();
const price = json.results[0].data.regularMarketPrice; // sem tiposCom a SDK, o token, os erros e os tipos já estão resolvidos:
const response = await client.v2.stocks.quote({ symbols: 'PETR4' });
const price = response.results[0].data.regularMarketPrice; // numberTratamento de erros
As SDKs lançam um erro diferente para cada status HTTP:
| Status | Erro |
|---|---|
| 400 | BadRequestError |
| 401 | AuthenticationError |
| 403 | PermissionDeniedError |
| 404 | NotFoundError |
| 429 | RateLimitError |
| 5xx | InternalServerError |
| Sem conexão | APIConnectionError |
TypeScript
try {
await client.v2.stocks.quote({ symbols: 'PETR4' });
} catch (error) {
if (error instanceof Brapi.AuthenticationError) {
console.log('Token inválido ou ausente');
} else if (error instanceof Brapi.RateLimitError) {
console.log('Limite de requisições atingido');
} else if (error instanceof Brapi.APIError) {
console.log(error.status, error.message);
} else {
throw error;
}
}Python
import brapi
try:
client.v2.stocks.quote(symbols="PETR4")
except brapi.AuthenticationError:
print("Token inválido ou ausente")
except brapi.RateLimitError:
print("Limite de requisições atingido")
except brapi.APIStatusError as error:
print(error.status_code, error.message)Retry automático
As SDKs repetem a requisição, por padrão até 2 vezes, quando há:
- erro de conexão
- timeout (408)
- conflito (409)
- limite de requisições (429)
- erro do servidor (5xx)
Para mudar o número de tentativas:
const client = new Brapi({ maxRetries: 3 });client = Brapi(max_retries=3)Como as SDKs acompanham a API
Geramos as SDKs a partir da especificação OpenAPI da BRAPI. Quando um endpoint novo ou um campo novo entra na API, uma nova versão sai no npm e no PyPI. Mantenha as SDKs atualizadas para receber esses endpoints.
Links
TypeScript/JavaScript
- Documentação: /docs/sdks/typescript
- GitHub: github.com/brapi-dev/brapi-typescript
- npm: npmjs.com/package/brapi
Python
- Documentação: /docs/sdks/python
- GitHub: github.com/brapi-dev/brapi-python
- PyPI: pypi.org/project/brapi
Bugs e sugestões
As SDKs são open source. Abra uma issue no repositório da linguagem que você usa:
Para dúvidas sobre os dados, veja a documentação da API ou fale com o suporte.
