No servidor, use o pacote dedicado @malvo/server. A classe MalvoClient gerencia o ciclo de vida da apiKey (auth, cache, renovação proativa, retry seguro de chave inválida, backoff de 429) e expõe um método por endpoint da API de dados (https://api.malvo.io) — você não precisa reescrever helpers de fetch.
clientId, clientSecret e a apiKey derivada deles ficam apenas no servidor. O único segredo que pode chegar ao navegador é o connectToken — limitado a 30 minutos e a um único fluxo de Item.

Instalação

Requer Node 18+ (usa o fetch global). Zero dependências de runtime.

Início rápido

A cadeia de tokens

Gerando um connectToken

Gere um connectToken novo a cada montagem do widget. Passe clientUserId para correlacionar os webhooks ao seu usuário e webhookUrl para receber os eventos do Item. Informe itemId para mintar um token de atualização.

Endpoint Express

Exponha a geração do connectToken como um endpoint autenticado. O frontend o consome e passa o accessToken ao SDK do widget.

Lendo dados

Quando o webhook item/created / item/updated chega, leia os dados no servidor. As transações usam cursor — fetchAllTransactions pagina tudo para você.
Para controle manual de paginação, fetchTransactionsCursor(accountId, { after }) retorna { results, next } (cursor-based, o endpoint preferido). fetchTransactions(accountId, options) é a alternativa paginada por número de página; streamTransactions(accountId) itera todo o cursor sem acumular o conjunto em memória. Veja Paginação e o guia Sincronizar transações.

Tratamento de erros

Todo método lança MalvoApiError em respostas não-2xx. Ramifique pelo codeDescription estável, nunca pela message legível.
Uma apiKey expirada/inválida (401 ou 403 API_KEY_MISSING_OR_INVALID) é renovada e retentada automaticamente uma vez; outros 403 não são repetidos. O 429 aplica backoff até maxRetries vezes respeitando o Retry-After. Veja Rate limits e Erros.

Webhooks

Os webhooks da Malvo não têm assinatura HMAC — proteja o endpoint com os headers customizados que você registra (ex.: um bearer secret) e/ou com allowlist do IP de egresso da Malvo (exibido no Dashboard).
Os webhooks são a fonte da verdade. Dispare a leitura de dados a partir dos webhooks item/created / item/updated, não do onSuccess do frontend. Veja Webhooks.

Próximos passos

Web (script tag)

Consuma o connectToken deste endpoint no navegador.

React / Next.js

O componente <MalvoConnect> para apps React.

Rate limits

Limites, cabeçalhos e estratégia de backoff.

Webhooks

A fonte da verdade para o ciclo de vida dos Items.