# SDK TypeScript/JavaScript URL: /docs/sdks/typescript.mdx SDK oficial TypeScript/JavaScript da brapi.dev. Biblioteca completa com tipos TypeScript, suporte a Node.js e navegador, tratamento de erros automático e retry inteligente. *** title: 'SDK TypeScript/JavaScript' description: >- SDK oficial TypeScript/JavaScript da brapi.dev. Biblioteca completa com tipos TypeScript, suporte a Node.js e navegador, tratamento de erros automático e retry inteligente. full: false keywords: brapi, sdk, typescript, javascript, npm, api client, node.js openGraph: title: SDK TypeScript/JavaScript - brapi.dev description: >- SDK oficial TypeScript/JavaScript com tipos completos e suporte a async/await type: website locale: pt\_BR lastUpdated: '2025-10-12T20:00:00.000Z' lang: pt-BR ----------- SDK oficial da brapi.dev para TypeScript e JavaScript, oferecendo acesso conveniente à API REST com tipos completos e suporte a async/await. ## Características * ✅ **Tipos TypeScript completos** - IntelliSense e autocomplete * ✅ **Suporte a Node.js e Browser** - Funciona em qualquer ambiente * ✅ **Async/Await nativo** - API moderna e fácil de usar * ✅ **Retry automático** - Tratamento inteligente de falhas * ✅ **Tratamento de erros** - Erros tipados e descritivos * ✅ **Tree-shakeable** - Bundle otimizado * ✅ **Gerado com Stainless** - Sempre atualizado com a API ## Instalação ```bash npm install brapi # ou yarn add brapi # ou pnpm add brapi # ou bun add brapi ``` [](https://npmjs.org/package/brapi) [](https://bundlephobia.com/package/brapi) ## Início Rápido ### JavaScript ```javascript import Brapi from 'brapi'; const client = new Brapi({ apiKey: process.env.BRAPI_API_KEY, }); // Buscar cotação de uma ação const quote = await client.quote.retrieve('PETR4'); console.log(quote.results[0].regularMarketPrice); // Buscar múltiplas ações const quotes = await client.quote.retrieve('PETR4,VALE3,ITUB4'); console.log(quotes.results); ``` ### TypeScript ```typescript import Brapi from 'brapi'; const client = new Brapi({ apiKey: process.env.BRAPI_API_KEY, }); // Tipos automáticos! const quote: Brapi.QuoteRetrieveResponse = await client.quote.retrieve('PETR4'); // IntelliSense completo const price = quote.results[0].regularMarketPrice; const change = quote.results[0].regularMarketChangePercent; ``` ## Configuração ### Variáveis de Ambiente Crie um arquivo `.env`: ```bash BRAPI_API_KEY=seu_token_aqui ``` ### Opções do Cliente ```typescript const client = new Brapi({ apiKey: process.env.BRAPI_API_KEY, // Obrigatório environment: 'production', // 'production' ou 'sandbox' maxRetries: 2, // Número de tentativas (padrão: 2) timeout: 60000, // Timeout em ms (padrão: 60000) }); ``` ## Exemplos de Uso ### Cotações ```typescript // Cotação única const quote = await client.quote.retrieve('PETR4'); // Múltiplas cotações const quotes = await client.quote.retrieve('PETR4,VALE3,ITUB4'); // Com parâmetros adicionais const quoteWithModules = await client.quote.retrieve('PETR4', { modules: 'summaryProfile,balanceSheetHistory', }); // Resultado console.log(quote.results[0]); // { // symbol: 'PETR4', // shortName: 'PETROBRAS PN', // regularMarketPrice: 38.45, // regularMarketChangePercent: 2.15, // currency: 'BRL', // ... // } ``` ### Lista de Ações ```typescript // Listar todas as ações disponíveis const stocks = await client.quote.list(); // Com paginação const stocksPage = await client.quote.list({ page: 1, limit: 50, }); console.log(stocks.stocks); // [ // { stock: 'PETR4', name: 'Petrobras PN', type: 'stock' }, // { stock: 'VALE3', name: 'Vale ON', type: 'stock' }, // ... // ] ``` ### Criptomoedas ```typescript // Cotação de cripto const crypto = await client.crypto.retrieve('BTC'); // Lista de criptos disponíveis const cryptos = await client.crypto.available(); ``` ### Moedas ```typescript // Cotação de moeda const currency = await client.currency.retrieve('USD-BRL'); // Lista de moedas disponíveis const currencies = await client.currency.available(); ``` ### Inflação ```typescript // Dados de inflação const inflation = await client.inflation.retrieve('IPCA'); // Países disponíveis const countries = await client.inflation.available(); ``` ### Taxa de Juros ```typescript // Taxa SELIC const selic = await client.primeRate.retrieve('SELIC'); // Países disponíveis const countries = await client.primeRate.available(); ``` ## Tratamento de Erros A SDK lança erros tipados para facilitar o tratamento: ```typescript try { const quote = await client.quote.retrieve('INVALID'); } catch (error) { if (error instanceof Brapi.APIError) { console.log(error.status); // Código HTTP (ex: 404) console.log(error.name); // Nome do erro (ex: 'NotFoundError') console.log(error.message); // Mensagem descritiva console.log(error.headers); // Headers da resposta } } ``` ### Tipos de Erro | Status Code | Error Type | Descrição | | ----------- | -------------------------- | ---------------------- | | 400 | `BadRequestError` | Requisição inválida | | 401 | `AuthenticationError` | Token inválido | | 403 | `PermissionDeniedError` | Sem permissão | | 404 | `NotFoundError` | Recurso não encontrado | | 422 | `UnprocessableEntityError` | Dados inválidos | | 429 | `RateLimitError` | Limite de requisições | | >=500 | `InternalServerError` | Erro no servidor | | N/A | `APIConnectionError` | Erro de conexão | ## Retry Automático A SDK tenta automaticamente 2 vezes em caso de falha: ```typescript // Configurar retries const client = new Brapi({ apiKey: process.env.BRAPI_API_KEY, maxRetries: 3, // Tenta até 3 vezes }); // Desabilitar retries const client = new Brapi({ apiKey: process.env.BRAPI_API_KEY, maxRetries: 0, // Sem retry }); ``` Erros automaticamente retriados: * Erros de conexão * 408 Request Timeout * 409 Conflict * 429 Rate Limit * Erros 5xx (servidor) ## Uso em Next.js ### Server Component ```typescript // app/stock/[ticker]/page.tsx import Brapi from 'brapi'; const client = new Brapi({ apiKey: process.env.BRAPI_API_KEY, }); export default async function StockPage({ params, }: { params: { ticker: string }; }) { const quote = await client.quote.retrieve(params.ticker); const stock = quote.results[0]; return (
R$ {stock.regularMarketPrice.toFixed(2)}