docs

Prevenção de fraude

Smart routing por BIN, circuit breaker e 3DS — o que a Zhex já faz por você, e o que cabe ao seu lado.

A Zhex aplica roteamento por risco automaticamente em cada PaymentIntent antes de a transação chegar no adquirente: BIN, geo, padrão de tentativas, histórico de circuit breaker. O resultado é uma decisão de qual adquirente atende e em que condições.

O que não existe hoje é um motor de regras customizáveis (estilo Stripe Radar) exposto via API ou dashboard. Smart routing acontece sob o capô; configuração explícita de regras if X then Y no seu lado é roadmap.

O que a Zhex já faz

Smart routing por BIN

O primeiro 6 dígitos do cartão (BIN) tem histórico:

  • BIN com aprovação alta no adquirente A → roteia para A.
  • BIN historicamente recusado em adquirente cross-border → vai para o BR doméstico.
  • BIN pré-pago restrito → roteia para adquirente que aceita pré-pago (alguns recusam).

Você não configura nada — o roteamento é automático e auditável no dashboard (Transações → detalhe → Roteamento).

Circuit breaker

Cada adquirente tem CIRCUIT por provider × payment method × region. Quando taxa de erro spikes (5xx, timeouts), o circuit abre e o tráfego é desviado para o secundário em segundos. Você não vê — só sente que aprovação se mantém estável mesmo quando um adquirente cai.

3DS automático

Para cartão BR > R$ 200 ou perfil de risco elevado, a Zhex aciona 3DS automaticamente. O resultado:

Resultado 3DSLiability shiftQuem responde por chargeback fraudulent
AutenticadoSimEmissor (você ganha)
Tentativa registrada (attempted)SimEmissor
Falha do clienteNãoVocê
IndisponívelNãoVocê

A decisão é interna; o PaymentIntent que cair em 3DS challenge entra em requires_action (gerenciado pelo checkout hosted) até o cliente concluir a autenticação no app do banco.

O que cabe ao seu lado

Sem motor de regras customizado exposto, sua defesa concentra-se em decisões pré-cobrança:

1. Limites por customer/IP no seu sistema

Antes de chamar POST /v1/payment_intents, conte tentativas recentes:

const recentAttempts = await db.paymentAttempts.count({
  where: {
    customerId,
    createdAt: { gte: new Date(Date.now() - 60 * 60_000) },
  },
});

if (recentAttempts > 5) {
  return res.status(429).json({ error: 'too_many_attempts' });
}

const intent = await zhex.paymentIntents.create({ /* … */ });
await db.paymentAttempts.create({ data: { customerId, ip: req.ip } });

2. Email reputation

Bloqueie domínios descartáveis e emails muito recém-criados na sua camada de signup. Listas públicas (mailcheck, disposable-email-domains) cobrem 95% dos casos.

3. CPF/CNPJ duplicado em cartões diferentes

Mesmo customer.document aparecendo com 3+ cartões diferentes em janela curta é forte indicador de fraude. Trate como suspeito antes de criar o intent.

4. Sempre confirme via webhook

Não confie no body do POST — pode ser interceptado/modificado por proxy. payment_intent.succeeded é a única fonte da verdade, e ele vem assinado HMAC.

Métricas a monitorar

Em Dashboard → Transações, acompanhe:

MétricaSaudávelAlerta
Aprovação geral> 92%< 85%
Aprovação por BIN> 80%< 60% (BIN específico ruim, possível fraude direcionada)
Chargeback ratio< 0,5%> 0,75%
Refund ratio< 3%> 8% (UX ou política frágil)
Velocity por IP< 3/h> 10/h (bot)

Boas práticas

  • 3DS em ticket alto sempre. R$ 200+ no BR ou US$ 50+ internacional. Custo zero em frictionless e liability shift garantido.
  • Refund proativo > chargeback. Se cliente reclamou e tem razão, refunde antes que vire disputa.
  • Whitelist customers conhecidos. Customer recorrente sem chargeback histórico = não dispare fricção extra.
  • Statement claro. "ZHEX*MEUSITE_PREMIUM" reduz "não reconheço a cobrança" — fonte número 1 de chargeback.
  • Cancelamento auto-servido em assinatura. Sem isso, cliente cancela via cartão = chargeback.

Radar / regras customizáveis — roadmap

Um motor de regras estilo if :card_country != :ip_country and :amount > 50000 → require_3ds exposto no dashboard com regras editáveis, A/B test em test mode e velocity tracking explícito está no roadmap. Hoje, a defesa adicional acontece no seu lado (limites por customer, email reputation, lógica de signup).

Esta página foi útil?

Atualizado em

Nesta página