https://api.malvo.io — e o Dashboard fica em
https://malvo.io/dashboard.
Não há iniciação de pagamentos (ITP): a plataforma é exclusivamente agregação e
enriquecimento de dados, o que reduz a superfície de risco da integração.
Credenciais e escopos
A Malvo separa deliberadamente o que é server-side (acesso total) do que pode chegar ao browser (escopo restrito). Usar a credencial certa em cada lugar é o ponto central da segurança.
O
connectToken é de escopo restrito por design: qualquer tentativa de ler dados detalhados de
produto (contas, transações, cartões etc.) com um connect token retorna 403 Forbidden. Mesmo
que ele vaze, só dirige o widget e lê o item que criou.
Rotação do clientSecret
1
Gere um novo secret no Dashboard
No Dashboard, abra a Application e gere um novo
clientSecret.2
Atualize o secret manager
Substitua o valor antigo no seu cofre / secret manager e faça o deploy do backend.
3
Revogue o secret antigo
Após confirmar que o
POST /auth funciona com o novo valor, revogue o anterior no Dashboard.O
apiKey é stateless e expira sozinho em 2 horas — emitir um novo não invalida os anteriores.
Cacheie-o no servidor e renove proativamente (por volta de 1h50m) ou no primeiro 401. Veja
Autenticação.Transporte
Webhooks
A Malvo não assina os payloads com HMAC. A autenticidade de uma entrega é garantida por dois mecanismos combinados:- Headers customizados por webhook — um mapa
headers(nome → valor) enviado verbatim em toda entrega, onde você coloca o seu segredo compartilhado. É write-only: aceito noPOST /webhooks/PATCH /webhooks/{id}, mas nunca retornado emGETnem exibido no Dashboard. A rotação é feita reescrevendo o mapa viaPATCH. - IP allowlisting — todas as entregas saem de um único IP de egress estático. Adicione-o à allowlist do seu firewall/WAF.
eventId): a
Malvo reutiliza o mesmo eventId em todas as reentregas e em todos os endpoints assinados, então
persista-o e trate duplicatas como no-op antes de aplicar qualquer efeito. Detalhes completos do
modelo e do handler de exemplo em Segurança de Webhooks.
LGPD & Open Finance
No Open Finance Brasil, o consentimento é a base legal para a leitura de dados. A LGPD garante ao titular o direito de revogar esse consentimento a qualquer momento. O usuário também pode revogar o registro de consentimento pelo lado do banco, no app dele, independentemente da sua integração. Quando isso ocorre, os endpoints de dados passam a retornar vazio e o Item vai paraOUTDATED. Veja o ciclo de vida e a renovação em
Consents.
Boas práticas
- Least-privilege de papéis. Conceda a cada membro do time apenas o acesso necessário no Dashboard; mantenha o conjunto de administradores/owners enxuto. Veja Membros & papéis.
- Logs e auditoria. Registre as ações sensíveis da sua integração (criação/exclusão de items, rotações de secret) e mantenha trilhas de auditoria.
- Rastreabilidade. Toda resposta da API traz um identificador de requisição no header
x-request-ide no camporequestIddo corpo. Logue-o — ele é o que permite ao suporte investigar uma chamada específica. - Reporte com
itemId. Em qualquer problema de conexão, oitemIdé obrigatório para análise; inclua-o sempre junto dorequestId.
Checklist de segurança
1
clientSecret só no servidor
clientId / clientSecret nunca chegam ao browser; o POST /auth roda apenas no backend.2
Segredos no cofre
clientSecret e apiKey ficam em secret manager/cofre — fora de bundles, logs e do controle de versão.3
connectToken no client
Só o
connectToken de 30 min é entregue ao browser; ele não lê dados de produto (403).4
TLS 1.2+
Todas as chamadas usam HTTPS com TLS 1.2+ e
Content-Type: application/json.5
Webhooks autenticados
Header de auth customizado configurado e o IP de egress (do Dashboard) na allowlist do WAF.
6
Idempotência de webhooks
O
eventId é persistido e duplicatas são tratadas como no-op.7
"Desconectar banco" sempre disponível
A ação que chama
DELETE /items/{id} está exposta ao usuário a qualquer momento (LGPD / Open Finance).8
Least-privilege de papéis
Acessos do time no Dashboard seguem o menor privilégio necessário.
9
Rastreio por requestId
x-request-id / requestId são logados em todas as chamadas, junto do itemId quando houver.Próximos passos
Autenticação
A cadeia clientId → apiKey → connectToken em detalhe.
Consents
Ciclo de vida do consentimento, revogação e renovação no mesmo Item.
Segurança de Webhooks
Headers write-only, IP allowlist e validação de origem.
Membros & papéis
Least-privilege de acesso ao Dashboard.