A Malvo aplica limites de requisição por IP, por minuto, contados de forma independente por grupo de endpoints. Eles são distintos das cotas mensais do Open Finance Brasil e dos limites da infraestrutura internacional.

Limites por IP por minuto

PATCH /items/{id} tem o menor limite da API: 20 req/min por IP. Ele é apenas para refreshes disparados pelo usuário. Atualizações em massa devem passar pelo auto-sync, nunca por martelar o endpoint — o excesso vira 429 ou ITEM_CREATION_LIMIT_EXCEEDED.

Resposta 429

Quando o limite é excedido, a API responde 429 com três headers e o envelope TOO_MANY_REQUESTS.
Corpo 429

Estratégia de retry

1

Respeite os headers no 429

Aguarde RateLimit-Reset segundos (ou Retry-After) antes de repetir. Clientes HTTP como o got honram o Retry-After automaticamente.
2

Backoff exponencial com jitter

No 429 e no 500, repita com backoff exponencial somando jitter (aleatoriedade) para não sincronizar várias retentativas no mesmo instante.
3

Refaça /auth no 401

Um 401 significa que o apiKey expirou (TTL de ~2h). Refaça POST /auth uma vez com clientId/clientSecret e repita a chamada. Num 403 vindo do /connect_token, atualize o apiKey da mesma forma.
4

Reduza o paralelismo

Espalhe as chamadas para ficar abaixo do limite e agende updates em lote fora do horário de pico.
Node — retry com backoff e jitter
Não confunda 429 (limite por IP da API) com o aviso 423 no statusDetail de um Item brasileiro: o 423 sinaliza uma cota mensal do Open Finance Brasil. No Open Banking internacional, a Malvo respeita o Retry-After e o backoff do ASPSP sem transformar essa regra em uma cota mensal brasileira.

Diferente dos limites mensais do Open Finance Brasil

Os limites acima são da API da Malvo (por IP, por minuto). O Open Finance Brasil impõe limites mensais, contados por (CPF/CNPJ + instituição + produto), totalmente independentes. Quando um desses limites é atingido, a execução do Item termina em PARTIAL_SUCCESS e o produto afetado recebe o aviso de código 423 em statusDetail.<produto>.warnings[] — o produto bloqueado volta sozinho no mês seguinte. Para não esgotar a cota mensal, não crie vários Items para o mesmo CPF/instituição e prefira POST /items/{id}/refresh a criar um Item novo. Dados como saldo, cadastros e histórico completo mantêm uma cadência própria. Já no refresh manual, a janela corrente de transações (aproximadamente os últimos 7 dias) é sempre avaliada e chega ao provedor imediatamente enquanto houver capacidade no balde diário da rota e do recurso — independentemente do auto-sync. Não existe espaçamento entre as chamadas permitidas: se a capacidade for 10×/dia, as primeiras 10 podem ser consecutivas e somente a 11ª fica bloqueada até a virada do dia brasileiro. Auto-sync e refresh manual compartilham esse contador porque ambos consomem a mesma cota do Open Finance. Os detalhes e a tabela de limites mensais ficam em:

Consentimentos

Ciclo de vida do consentimento e as cotas mensais da rede de Open Finance.

Limites do Open Finance

A tabela completa de limites mensais por produto e subrecurso.