Antifraude

1. O que é o Antifraude?

O Antifraude é uma camada de segurança utilizada para analisar o risco das transações com cartão antes da continuidade do processamento.

A análise considera informações relacionadas ao comprador, dispositivo, pagamento e contexto da compra, permitindo identificar comportamentos ou características associados a um possível risco de fraude.

Os sistemas de antifraude integrados são o da Konduto e o da ClearSale.

2. Qual problema o Antifraude resolve?

Reduz o risco de fraudes ao adicionar uma etapa de análise antes da continuidade do pagamento. Para o seu negócio e seus estabelecimentos, isso contribui para:

  • reduzir a exposição a transações potencialmente fraudulentas;
  • adicionar inteligência à análise de risco das compras;
  • apoiar a prevenção de perdas relacionadas a fraude;
  • utilizar informações da jornada de compra para avaliar o contexto da transação.

3. Como funciona?

Durante a criação da cobrança ou assinatura, você envia as informações disponíveis para a análise antifraude no objeto Antifraud da requisição.

🚧

O campo Antifraud.ip (IP do cliente) é o único campo obrigatório. Os demais são opcionais, mas recomendamos preencher o maior conjunto possível de informações: quanto maior o contexto, melhor é a análise de risco.

🚫

Se a transação for negada pelo Antifraude, ela não segue para autorização na adquirente e fica com o status "negada por recomendação do antifraude". Apenas as transações aprovadas na análise de risco continuam o processamento.

Recorrência

Você pode enviar o objeto Antifraud em todas as transações recorrentes. Internamente, a Celcoin identifica se a transação é a primeira da recorrência ou uma das seguintes e define se ela seguirá para a análise antifraude.


4. Endpoints que recebem o objeto Antifraud

Você continua utilizando os mesmos endpoints, sem mudança de autenticação. A única diferença é incluir o objeto Antifraud dentro de PaymentMethodCreditCard no corpo da requisição.

FluxoMétodoReferência
Cobrança avulsaPOSTCriar cobrança
Assinatura com ou sem planoPOSTCriar assinatura

Os campos do Antifraud são os mesmos nos dois fluxos.


5. Como operar o Antifraude

Para clientes que utilizam chekout próprio, antes de enviar os dados na requisição, prepare o seu front-end.

5.1 Instalar o script de identificação

Implemente em todas as páginas do seu e-commerce o script do antifraude contratado. Ele identifica o ambiente em que a transação é originada e coleta informações para a análise de risco. Cole o código imediatamente abaixo da tag <body>.

Konduto

A chave pública (PUBLIC_KEY) é enviada por e-mail pela Konduto.

var __kdt = __kdt || [];
__kdt.push({"public_key": "<PUBLIC_KEY_KONDUTO>"}); // A chave pública identifica a sua loja

(function() {
  var kdt = document.createElement('script');
  kdt.id = 'kdtjs'; kdt.type = 'text/javascript';
  kdt.async = true; kdt.src = 'https://i.k-analytix.com/k.js';
  var s = document.getElementsByTagName('body')[0];
  s.parentNode.insertBefore(kdt, s);
})();

5.2 Obter o sessionId no checkout

Na página de checkout, recupere o sessionId com o código abaixo. O valor de visitorID é o que deve ser enviado no campo Antifraud.sessionId.

window.onload = function() {
  var period = 300;
  var limit = 20 * 1e3;
  var nTry = 0;
  var intervalID = setInterval(function() {
    var clear = limit / period <= ++nTry;
    if ((typeof(Konduto) !== "undefined") &&
        (typeof(Konduto.getVisitorID) !== "undefined")) {
      visitorID = window.Konduto.getVisitorID(); // valor do sessionId a ser enviado via API

      // Exemplo: cria um input hidden no formulário com o sessionId (opcional)
      var element = document.createElement("input");
      element.type = "hidden";
      element.name = "sessionId";
      element.value = visitorID;
      document.getElementById("idDoSeuFormulario").appendChild(element);

      clear = true;
    }
    if (clear) {
      clearInterval(intervalID);
    }
  }, period);
};

5.3 Meta tags (opcional, recomendado)

Para aumentar a eficiência do antifraude, adicione as meta tags abaixo:

<!-- Todas as páginas do checkout -->
<meta name="kdt:page" content="checkout">

<!-- Detalhe de produto -->
<meta name="kdt:page" content="product">
<meta name="kdt:product" content="sku=123, name=Camiseta Verde">

<!-- Página de 'Esqueci minha senha' -->
<meta name="kdt:page" content="password-reset">

6. Enviar os dados na transação

Com os scripts implementados e o sessionId obtido, envie o objeto Antifraud na requisição de cobrança ou assinatura.

Fluxo de operação

Instalar script de identificação no front-end
        ↓
Configurar a chave pública
        ↓
Implementar o script de sessionId no checkout
        ↓
Obter o sessionId
        ↓
Enviar sessionId + IP + demais dados na cobrança/assinatura
        ↓
Análise Antifraude

7. Campos do objeto Antifraud

Objeto: PaymentMethodCreditCard.Antifraud

Identificação da transação

CampoDescriçãoTipoObrigatório
ipIPv4/IPv6 do clientestringSim
sessionIdIdentificador da sessão, obtido pelo script do checkoutstringNão

Cliente (Customer)

CampoDescriçãoTipoObrigatório
idIdentificador único do cliente. Deve ser mantido em compras futurasstringNão
dateOfBirthData de nascimento (YYYY-MM-DD)stringNão
documentTypeTipo de documento: CPF, CNPJ, RG, PASSPORT, OTHER, CPF_CNPJstringNão
phone1 / phone2Telefones do clientestringNão
newIndica conta recém-criada para esta comprabooleanNão
vipIndica cliente VIP ou comprador frequentebooleanNão
typeTipo do clientestringNão
riskLevelNível de riscostringNão
riskScoreScore de riscostringNão
motherNameNome da mãestringNão

Dispositivo (Device)

CampoDescriçãoTipoObrigatório
fingerprintIdentificação do navegador (mín. 3, máx. 255)stringNão
providerProvedorstringNão
modelModelostringNão
platformPlataforma/dispositivo utilizadostringNão
manufacturerFabricantestringNão
osSistema operacionalstringNão
browserNavegadorstringNão
languageIdioma (ex.: pt-BR)stringNão

Endereço de cobrança (Billing)

CampoDescriçãoTipoObrigatório
nameNome do compradorstringNão
address1Endereço principalstringNão
address2Complemento/endereço secundáriostringNão
cityCidadestringNão
stateEstadostringNão
zipCEPstringNão
countryPaís (ISO 3166-2)stringNão

Pagamento (Payment)

CampoDescriçãoTipoObrigatório
binIdentificação do cartão: primeiros 6 a 10 númerosstringNão
last4Últimos 4 dígitos do cartãostringNão
expirationDateValidade do cartão (MMAAAA)stringNão
descriptionAlguma informação referente ao descontostringNão
taxIdCPF do titularstringNão
cvvResultCódigo do resultado da verificação do CVVstringNão
avsResultCódigo do resultado da verificação de endereço (AVS)stringNão
sha1Código de pagamento de integridade (HMAC-SHA-256 dos campos da notificação)stringNão
nameNome do compradorstringNão
holderNome do titular do cartãostringNão
amountValor total do pedidonumberNão

Compra (Cart)

CampoDescriçãoTipoObrigatório
skuSKU do produtostringNão
productCodeCódigo do produtostringNão
nameNome do produtostringNão
descriptionDescrição do produtostringNão
unitCostValor unitárionumberNão
quantityQuantidadenumberNão
discountDescontonumberNão
createdAtData de criaçãostringNão
deliveryTypeTipo de entregastringNão
deliverySlaInMinutesSLA de entrega em minutosnumberNão
sellerIdIdentificador do vendedorstringNão
📌

Somente o campo ip é obrigatório. Todos os demais são opcionais, mas quanto mais dados você enviar, melhor será a análise de risco.


8. Exemplos de payload

Apenas o corpo da requisição é exibido. Endpoint e autenticação permanecem inalterados. Os valores abaixo são fictícios: substitua pelos dados reais da transação.

8.1 Cobrança avulsa

POST Criar cobrança

curl --request POST \
     --url 'https://sandbox.openfinance.celcoin.dev/baas/v1/cash/charges?account=1234' \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
  "Customer": {
    "name": "Maria Exemplo",
    "document": "12345678909",
    "emails": ["[email protected]"]
  },
  "payday": "2026-10-01",
  "mainPaymentMethodId": "creditcard",
  "value": 12999,
  "PaymentMethodCreditCard": {
    "Antifraud": {
      "ip": "203.0.113.10",
      "sessionId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "Customer": {
        "id": "cliente-0001",
        "dateOfBirth": "1990-01-31",
        "documentType": "CPF",
        "phone1": "11999990000",
        "phone2": "1133330000",
        "new": false,
        "vip": false,
        "type": "PF",
        "riskLevel": "low",
        "riskScore": "10",
        "motherName": "Ana Exemplo"
      },
      "Device": {
        "fingerprint": "f3a9c1d27b5e4a60",
        "provider": "Vivo",
        "model": "Galaxy S23",
        "platform": "Mobile",
        "manufacturer": "Samsung",
        "os": "Android 14",
        "browser": "Chrome",
        "language": "pt-BR"
      },
      "Billing": {
        "name": "Maria Exemplo",
        "address1": "Rua Exemplo, 100",
        "address2": "Apto 12",
        "city": "São Paulo",
        "state": "SP",
        "zip": "01000000",
        "country": "BR"
      },
      "Payment": {
        "bin": "411111",
        "last4": "1111",
        "expirationDate": "122030",
        "holder": "MARIA EXEMPLO",
        "amount": 12999
      },
      "Cart": {
        "sku": "SKU-0001",
        "productCode": "PROD-0001",
        "name": "Produto Exemplo",
        "description": "Descrição do produto exemplo",
        "unitCost": 12999,
        "quantity": 1,
        "createdAt": "2026-10-01",
        "deliveryType": "digital",
        "deliverySlaInMinutes": 0,
        "sellerId": "seller-0001"
      }
    }
  }
}
📘

Os demais campos de PaymentMethodCreditCard (dados do cartão) continuam sendo enviados exatamente como você já faz hoje. O exemplo acima destaca apenas o Antifraud.

8.2 Assinatura (com ou sem plano)

POST Criar assinatura

Mantenha o corpo da assinatura como já utiliza e inclua o Antifraud dentro de PaymentMethodCreditCard, com os mesmos campos da cobrança avulsa:

curl --request POST \
     --url 'https://sandbox.openfinance.celcoin.dev/baas/v1/cash/subscriptions?account=1234' \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
  "firstPayDayDate": "2026-10-01",
  "mainPaymentMethodId": "creditcard",
  "Customer": {
    "name": "Maria Exemplo",
    "document": "12345678909",
    "emails": [
      "[email protected]"
    ]
  },
  "PaymentMethodCreditCard": {
    "Antifraud": {
      "ip": "203.0.113.10",
      "sessionId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "Customer": {
        "id": "cliente-0001",
        "dateOfBirth": "1990-01-31",
        "documentType": "CPF",
        "phone1": "11999990000",
        "phone2": "1133330000",
        "new": false,
        "vip": false,
        "type": "PF",
        "riskLevel": "low",
        "riskScore": "10",
        "motherName": "Ana Exemplo"
      },
      "Device": {
        "fingerprint": "f3a9c1d27b5e4a60",
        "provider": "Vivo",
        "model": "Galaxy S23",
        "platform": "Mobile",
        "manufacturer": "Samsung",
        "os": "Android 14",
        "browser": "Chrome",
        "language": "pt-BR"
      },
      "Billing": {
        "name": "Maria Exemplo",
        "address1": "Rua Exemplo, 100",
        "address2": "Apto 12",
        "city": "São Paulo",
        "state": "SP",
        "zip": "01000000",
        "country": "BR"
      },
      "Payment": {
        "bin": "411111",
        "last4": "1111",
        "expirationDate": "122030",
        "holder": "MARIA EXEMPLO",
        "amount": 12999
      },
      "Cart": {
        "sku": "SKU-0001",
        "productCode": "PROD-0001",
        "name": "Produto Exemplo",
        "description": "Descrição do produto exemplo",
        "unitCost": 12999,
        "quantity": 1,
        "createdAt": "2026-10-01",
        "deliveryType": "digital",
        "deliverySlaInMinutes": 0,
        "sellerId": "seller-0001"
      }
    }
  }
}
'

Caso a transação seja negada pelo Antifraude, a transação não segue para autorização na adquirente e é retornada no endpoint com o status "negada por recomendação do antifraude".



Did this page help you?