- Pré Autorização
- Solicitação de Análise Antifraude
- Recebimento da Análise
- Captura e envio do webhook


O comportamento automatizado do ciclo de vida da transação pode ser escolhido
utilizando as configurações de
captureOnApproved e refundOnReproved feitas
diretamente no setup de provedor de antifraude para uso na Malga.customer em fraudAnalysis simula o assíncrono: com final 0, a análise começa pendente e é aprovada cerca de 2 minutos depois; com final 9, começa pendente e é reprovada no mesmo prazo. Os demais finais estão em Testando antifraude em sandbox.
Cobrança com capture: true
Em cartão de crédito, inclusive Click to Pay, com antifraude configurado e sem fluxo de pagamentos, a Malga aceita capture: true e captura sozinha quando o antifraude aprova. Isso vale para o veredito síncrono e para o assíncrono, e acontece mesmo com captureOnApproved: false. Não vale para 3DS com setupId nem para MPI externo.
- Durante a análise: a cobrança aparece como
pre_authorizedcomcapture: false. - Depois da captura: a cobrança passa a
authorizedcomcapture: true. Os webhooks seguem o status. - Prazo de 72 horas: uma aprovação que chega depois do prazo não captura. Uma pré-autorização sem veredito em 72 horas é cancelada automaticamente.
- Reprovação e erro: seguem as opções
captureOnReproved,refundOnReproved,captureOnErrorerefundOnErrordo provedor. - Sessão ou link de pagamento 1:1: um novo pagamento enquanto a cobrança está em análise recebe
409com a mensagem “There is already a charge for this session under anti-fraud analysis”. Repetir a requisição com a mesmaX-Idempotency-Keydevolve a cobrança original.
400 com a mensagem “The capture cannot be true in this operation”. Fale com o suporte para habilitar. No sandbox, a simulação do veredito segue a mesma regra, mas o cancelamento automático em 72 horas não existe.
Não é possível configurar a opção
runBeforeCharge=true utilizando produtos
de antifraude que possuam fluxos de avaliação assíncronos ou híbridos. Caso
tenha dúvidas sobre o suporte desta variável com o seu produto antifraude
entre em contato com o nosso suporte.Exemplos de uso do antifraude
Para utilizar análises antifraude em suas transações basta estar credenciado em um provedor antifraude e configurá-lo em seu fluxo de pagamentos. Assim, será possível processar uma transação enviando as informações adicionais de antifraude.Exemplo de cobrança com Antifraude aprovado
Os exemplos abaixo usam a URL de produção (
https://api.malga.io). Para
testar no sandbox, use https://sandbox-api.malga.io com suas credenciais de
sandbox. As cobranças de sandbox aparecem no ambiente de testes do Dashboard.
Veja Ambientes.curl --location --request POST 'https://api.malga.io/v1/charges' \
--header 'x-client-id: <YOUR_CLIENT_ID>' \
--header 'x-api-key: <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data-raw '{
"merchantId": "c04b6955-09d5-42ab-bc4a-287504ed0098",
"amount": 100,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": true,
"paymentMethod": {
"paymentType": "credit",
"installments": 1
},
"paymentSource": {
"sourceType": "card",
"card": {
"cardHolderName": "JOSE DAS NEVES",
"cardNumber": "4929564637987814",
"cardCvv": "120",
"cardExpirationDate": "12/2026"
}
},
"fraudAnalysis": {
"sla": 10,
"customer": {
"name": "Joao Torres",
"phone": "11 99329899",
"email": "joao@gmail.com",
"identity": "45762964850",
"identityType": "CPF",
"registrationDate": "2022-07-26T16:11:35.756Z",
"billingAddress": {
"street": "Rua Um",
"number": "200",
"zipCode": "02010010",
"country": "BR",
"state": "SP",
"district": "Jardim Paraiso",
"city": "Sao Paulo",
"complement": "ap 10"
},
"browser": {
"browserFingerprint": "57d07c77f87f4cb38063dc4cb9fcb750",
"cookiesAccepted": false,
"email": "comprador@test.com.br",
"hostName": "google.com",
"ipAddress": "127.0.0.1",
"type": "Chrome"
}
},
"cart": {
"items": [
{
"name": "ItemTeste1",
"quantity": 1,
"sku": "20170511",
"unitPrice": 100,
"risk": "High",
"locality": "Local do evento",
"date": "2017-03-21T22:36:53",
"type": 1,
"genre": "Concerto de música",
"tickets": {
"quantityTicketSale": 800,
"quantityEventHouse": 2,
"convenienceFeeValue": 0,
"quantityFull": 100,
"quantityHalf": 50,
"batch": 1234123
},
"location": {
"country": "BR",
"street": "Rua Um",
"number": "2",
"complement": "ap 1",
"zipCode": "02417140",
"city": "Sao Paulo",
"state": "SP",
"district": "Bairro"
}
}
]
}
}
}'
< HTTP/2 201
< content-type: application/json; charset=utf-8
{
"id": "2a37eb2c-be9b-4f92-8e13-e609130e6cca",
"clientId": "<YOUR_CLIENT_ID>",
"merchantId": "c04b6955-09d5-42ab-bc4a-287504ed0098",
"description": null,
"orderId": null,
"createdAt": "2022-08-25T20:56:37.265Z",
"amount": 100,
"originalAmount": 100,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": true,
"status": "authorized",
"paymentMethod": {
"installments": 1,
"paymentType": "credit"
},
"paymentSource": {
"sourceType": "card",
"cardId": "d10c6dbd-aff6-4875-a2a4-bf3f64f5f424"
},
"fraudAnalysisMetadata": {
"sla": 10,
"customer": {
"name": "Joao Torres",
"identity": "45762964850",
"identityType": "CPF",
"birthdate": null,
"phone": "11 99329899",
"billingAddress": {
"street": "Rua Um",
"number": "200",
"complement": "ap 10",
"zipCode": "02010010",
"city": "Sao Paulo",
"state": "SP",
"district": "Jardim Paraiso"
}
},
"cart": {
"items": [
{
"name": "ItemTeste1",
"quantity": 1,
"sku": "20170511",
"unitPrice": 100,
"risk": "High",
"locality": "Local do evento",
"date": "2017-03-21T22:36:53",
"type": 1,
"genre": "Concerto de música",
"tickets": {
"quantityTicketSale": 800,
"quantityEventHouse": 2,
"convenienceFeeValue": 0,
"quantityFull": 100,
"quantityHalf": 50,
"batch": 1234123
},
"location": {
"country": "BR",
"street": "Rua Um",
"number": "2",
"complement": "ap 1",
"zipCode": "02417140",
"city": "Sao Paulo",
"state": "SP",
"district": "Bairro"
}
}
]
}
},
"transactionRequests": [
{
"id": "384a258d-248d-43f9-ab79-fa79a2f06237",
"createdAt": "2022-08-25T20:56:37.796Z",
"updatedAt": "2022-08-25T20:56:37.796Z",
"idempotencyKey": null,
"providerId": "ad2eb0c4-ea7b-4774-9ac9-3295b083b1cb",
"providerType": "SANDBOX",
"transactionId": "1737284",
"amount": 100,
"authorizationCode": "6076640",
"authorizationNsu": "3028818",
"requestStatus": "success",
"requestType": "capture",
"responseTs": "8ms",
"providerAuthorization": {
"networkAuthorizationCode": "7354551",
"networkResponseCode": "5759371"
}
},
{
"id": "f5bf6c36-0c8a-4078-84fd-b9f374bb0e1b",
"createdAt": "2022-08-25T20:56:37.645Z",
"updatedAt": "2022-08-25T20:56:37.645Z",
"idempotencyKey": null,
"providerId": "ad2eb0c4-ea7b-4774-9ac9-3295b083b1cb",
"providerType": "ANTIFRAUD_SANDBOX",
"transactionId": "9475312",
"amount": 100,
"authorizationCode": null,
"authorizationNsu": null,
"requestStatus": "success",
"requestType": "anti_fraud",
"responseTs": "19ms",
"fraudAnalysis": {
"score": 85,
"status": "approved"
}
},
{
"id": "f5bf6c36-0c8a-4078-84fd-b9f374bb0e1b",
"createdAt": "2022-08-25T20:56:37.645Z",
"updatedAt": "2022-08-25T20:56:37.645Z",
"idempotencyKey": null,
"providerId": "ad2eb0c4-ea7b-4774-9ac9-3295b083b1cb",
"providerType": "ANTIFRAUD_SANDBOX",
"transactionId": "9475312",
"amount": 100,
"authorizationCode": null,
"authorizationNsu": null,
"requestStatus": "success",
"requestType": "anti_fraud",
"responseTs": "19ms",
"fraudAnalysis": {
"score": null,
"status": "pending"
}
},
{
"id": "dfce8327-3ecf-4725-b389-af253823acfd",
"createdAt": "2022-08-25T20:56:37.432Z",
"updatedAt": "2022-08-25T20:56:37.866Z",
"idempotencyKey": "e4b44aa1-8386-4541-a5f3-2b6801676e32",
"providerId": "ad2eb0c4-ea7b-4774-9ac9-3295b083b1cb",
"providerType": "SANDBOX",
"transactionId": "6498444",
"amount": 100,
"authorizationCode": "3698706",
"authorizationNsu": "4897050",
"requestStatus": "success",
"requestType": "pre_authorization",
"responseTs": "36ms",
"providerAuthorization": {
"networkAuthorizationCode": "7376566",
"networkResponseCode": "2946159"
}
}
]
}
Exemplo de cobrança com Antifraude reprovado
Após a pré autorização, se a análise de risco for reprovada, a transação é rejeitada e a pré autorização é cancelada automaticamente.curl --location --request POST 'https://api.malga.io/v1/charges' \
--header 'x-client-id: <YOUR_CLIENT_ID>' \
--header 'x-api-key: <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data-raw '{
"merchantId": "c04b6955-09d5-42ab-bc4a-287504ed0098",
"amount": 100,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": true,
"paymentMethod": {
"paymentType": "credit",
"installments": 1
},
"paymentSource": {
"sourceType": "card",
"card": {
"cardHolderName": "JOSE DAS NEVES",
"cardNumber": "4929564637987814",
"cardCvv": "120",
"cardExpirationDate": "12/2026"
}
},
"fraudAnalysis": {
"sla": 10,
"customer": {
"name": "Joao Torres",
"phone": "11 99329899",
"email": "joao@gmail.com",
"identity": "45762964859",
"identityType": "CPF",
"registrationDate": "2022-07-26T16:11:35.756Z",
"billingAddress": {
"street": "Rua Um",
"number": "200",
"zipCode": "02010010",
"country": "BR",
"state": "SP",
"district": "Jardim Paraiso",
"city": "Sao Paulo",
"complement": "ap 10"
},
"browser": {
"browserFingerprint": "57d07c77f87f4cb38063dc4cb9fcb750",
"cookiesAccepted": false,
"email": "comprador@test.com.br",
"hostName": "google.com",
"ipAddress": "127.0.0.1",
"type": "Chrome"
}
},
"cart": {
"items": [
{
"name": "ItemTeste1",
"quantity": 1,
"sku": "20170511",
"unitPrice": 100,
"risk": "High",
"locality": "Local do evento",
"date": "2017-03-21T22:36:53",
"type": 1,
"genre": "Concerto de música",
"tickets": {
"quantityTicketSale": 800,
"quantityEventHouse": 2,
"convenienceFeeValue": 0,
"quantityFull": 100,
"quantityHalf": 50,
"batch": 1234123
},
"location": {
"country": "BR",
"street": "Rua Um",
"number": "2",
"complement": "ap 1",
"zipCode": "02417140",
"city": "Sao Paulo",
"state": "SP",
"district": "Bairro"
}
}
]
}
}
}'
< HTTP/2 201
< content-type: application/json; charset=utf-8
{
"id": "2a37eb2c-be9b-4f92-8e13-e609130e6cca",
"clientId": "<YOUR_CLIENT_ID>",
"merchantId": "c04b6955-09d5-42ab-bc4a-287504ed0098",
"description": null,
"orderId": null,
"createdAt": "2022-08-25T20:56:37.265Z",
"amount": 100,
"originalAmount": 100,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": true,
"status": "authorized",
"paymentMethod": {
"installments": 1,
"paymentType": "credit"
},
"paymentSource": {
"sourceType": "card",
"cardId": "d10c6dbd-aff6-4875-a2a4-bf3f64f5f424"
},
"fraudAnalysisMetadata": {
"sla": 10,
"customer": {
"name": "Joao Torres",
"identity": "45762964859",
"identityType": "CPF",
"birthdate": null,
"phone": "11 99329899",
"billingAddress": {
"street": "Rua Um",
"number": "200",
"complement": "ap 10",
"zipCode": "02010010",
"city": "Sao Paulo",
"state": "SP",
"district": "Jardim Paraiso"
}
},
"cart": {
"items": [
{
"name": "ItemTeste1",
"quantity": 1,
"sku": "20170511",
"unitPrice": 100,
"risk": "High",
"locality": "Local do evento",
"date": "2017-03-21T22:36:53",
"type": 1,
"genre": "Concerto de música",
"tickets": {
"quantityTicketSale": 800,
"quantityEventHouse": 2,
"convenienceFeeValue": 0,
"quantityFull": 100,
"quantityHalf": 50,
"batch": 1234123
},
"location": {
"country": "BR",
"street": "Rua Um",
"number": "2",
"complement": "ap 1",
"zipCode": "02417140",
"city": "Sao Paulo",
"state": "SP",
"district": "Bairro"
}
}
]
}
},
"transactionRequests": [
{
"id": "7b3da617-94d1-4dfd-a9e2-0e23c66dfaac",
"createdAt": "2023-11-08T20:02:20.249Z",
"updatedAt": "2023-11-08T20:02:20.249Z",
"idempotencyKey": null,
"providerId": "dd9b8ebf-3715-4809-8490-ca29556dd7cf",
"providerType": "SANDBOX",
"transactionId": null,
"amount": null,
"authorizationCode": null,
"authorizationNsu": null,
"requestStatus": "success",
"requestType": "void",
"responseTs": null
},
{
"id": "382e655d-3747-464e-8d92-9f6cba35689d",
"createdAt": "2023-11-08T20:02:19.984Z",
"updatedAt": "2023-11-08T20:02:20.249Z",
"idempotencyKey": null,
"providerId": "c6d9a756-f0db-402f-a100-2df25153294a",
"providerType": "ANTIFRAUD_SANDBOX",
"transactionId": null,
"amount": null,
"authorizationCode": null,
"authorizationNsu": null,
"requestStatus": "success",
"requestType": "anti_fraud",
"responseTs": null,
"fraudAnalysis": {
"score": null,
"status": "reproved"
}
},
{
"id": "5299e269-c128-49de-8d44-6a2d9840bbe2",
"createdAt": "2023-11-08T20:01:35.769Z",
"updatedAt": "2023-11-08T20:01:35.769Z",
"idempotencyKey": "c4a95944-eb3f-42a5-8010-ce0ad9c51500",
"providerId": "c6d9a756-f0db-402f-a100-2df25153294a",
"providerType": "ANTIFRAUD_SANDBOX",
"transactionId": "3262306",
"amount": 500,
"authorizationCode": null,
"authorizationNsu": null,
"requestStatus": "success",
"requestType": "anti_fraud",
"responseTs": "90ms",
"fraudAnalysis": {
"score": null,
"status": "pending"
}
},
{
"id": "4debbc88-d863-4bfc-bcbf-a315dd3426c0",
"createdAt": "2023-11-08T20:01:34.157Z",
"updatedAt": "2023-11-08T20:01:34.454Z",
"idempotencyKey": "c4a95944-eb3f-42a5-8010-ce0ad9c51500",
"providerId": "dd9b8ebf-3715-4809-8490-ca29556dd7cf",
"providerType": "SANDBOX",
"transactionId": "805d0a8e-0fa0-4d74-8021-37542731f280",
"amount": 500,
"authorizationCode": "2234373",
"authorizationNsu": "6727421",
"requestStatus": "success",
"requestType": "pre_authorization",
"responseTs": "113ms",
"providerAuthorization": {
"networkAuthorizationCode": "9761119",
"networkResponseCode": "5098365"
}
}
]
}
Sempre que a transação for reprovada no antifraude, faremos o cancelamento da
pré autorização automaticamente. Caso a tentativa de cancelamento falhe, a
transação manterá o status
pre_authorized e poderá ser cancelada ou
capturada manualmente, de acordo com a sua preferência.Exemplo de cobrança com erro ao acessar Antifraude
Em cobranças comcapture: false, caso um erro ocorra no provedor antifraude e nenhuma das opções de erro esteja habilitada, a transação é retornada ainda pré-autorizada. Em cobranças com capture: true e antifraude, a pré-autorização também existe até o veredito, e o desfecho segue captureOnError ou refundOnError.
Exemplo de erro
curl --location --request POST 'https://api.malga.io/v1/charges' \
--header 'x-client-id: <YOUR_CLIENT_ID>' \
--header 'x-api-key: <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data-raw '{
"merchantId": "c04b6955-09d5-42ab-bc4a-287504ed0098",
"amount": 100,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": true,
"paymentMethod": {
"paymentType": "credit",
"installments": 1
},
"paymentSource": {
"sourceType": "card",
"card": {
"cardHolderName": "JOSE DAS NEVES",
"cardNumber": "4929564637987814",
"cardCvv": "120",
"cardExpirationDate": "12/2026"
}
},
"fraudAnalysis": {
"sla": 10,
"customer": {
"name": "Joao Torres",
"phone": "11 99329899",
"email": "joao@gmail.com",
"identity": "45762964851",
"identityType": "CPF",
"registrationDate": "2022-07-26T16:11:35.756Z",
"billingAddress": {
"street": "Rua Um",
"number": "200",
"zipCode": "02010010",
"country": "BR",
"state": "SP",
"district": "Jardim Paraiso",
"city": "Sao Paulo",
"complement": "ap 10"
},
"browser": {
"browserFingerprint": "57d07c77f87f4cb38063dc4cb9fcb750",
"cookiesAccepted": false,
"email": "comprador@test.com.br",
"hostName": "google.com",
"ipAddress": "127.0.0.1",
"type": "Chrome"
}
},
"cart": {
"items": [
{
"name": "ItemTeste1",
"quantity": 1,
"sku": "20170511",
"unitPrice": 100,
"risk": "High",
"locality": "Local do evento",
"date": "2017-03-21T22:36:53",
"type": 1,
"genre": "Concerto de música",
"tickets": {
"quantityTicketSale": 800,
"quantityEventHouse": 2,
"convenienceFeeValue": 0,
"quantityFull": 100,
"quantityHalf": 50,
"batch": 1234123
},
"location": {
"country": "BR",
"street": "Rua Um",
"number": "2",
"complement": "ap 1",
"zipCode": "02417140",
"city": "Sao Paulo",
"state": "SP",
"district": "Bairro"
}
}
]
}
}
}'
< HTTP/2 201
< content-type: application/json; charset=utf-8
{
"id": "2a37eb2c-be9b-4f92-8e13-e609130e6cca",
"clientId": "<YOUR_CLIENT_ID>",
"merchantId": "c04b6955-09d5-42ab-bc4a-287504ed0098",
"description": null,
"orderId": null,
"createdAt": "2022-08-25T20:56:37.265Z",
"amount": 100,
"originalAmount": 100,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": true,
"status": "authorized",
"paymentMethod": {
"installments": 1,
"paymentType": "credit"
},
"paymentSource": {
"sourceType": "card",
"cardId": "d10c6dbd-aff6-4875-a2a4-bf3f64f5f424"
},
"fraudAnalysisMetadata": {
"sla": 10,
"customer": {
"name": "Joao Torres",
"identity": "45762964851",
"identityType": "CPF",
"birthdate": null,
"phone": "11 99329899",
"billingAddress": {
"street": "Rua Um",
"number": "200",
"complement": "ap 10",
"zipCode": "02010010",
"city": "Sao Paulo",
"state": "SP",
"district": "Jardim Paraiso"
}
},
"cart": {
"items": [
{
"name": "ItemTeste1",
"quantity": 1,
"sku": "20170511",
"unitPrice": 100,
"risk": "High",
"locality": "Local do evento",
"date": "2017-03-21T22:36:53",
"type": 1,
"genre": "Concerto de música",
"tickets": {
"quantityTicketSale": 800,
"quantityEventHouse": 2,
"convenienceFeeValue": 0,
"quantityFull": 100,
"quantityHalf": 50,
"batch": 1234123
},
"location": {
"country": "BR",
"street": "Rua Um",
"number": "2",
"complement": "ap 1",
"zipCode": "02417140",
"city": "Sao Paulo",
"state": "SP",
"district": "Bairro"
}
}
]
}
},
"transactionRequests": [
{
"id": "49d91fec-d681-4ccb-8264-0bd7bc752c92",
"createdAt": "2023-11-08T20:03:41.481Z",
"updatedAt": "2023-11-08T20:03:41.565Z",
"idempotencyKey": null,
"providerId": "c6d9a756-f0db-402f-a100-2df25153294a",
"providerType": "ANTIFRAUD_SANDBOX",
"transactionId": null,
"amount": null,
"authorizationCode": null,
"authorizationNsu": null,
"requestStatus": "failed",
"requestType": "anti_fraud",
"responseTs": null,
"fraudAnalysis": {
"score": null,
"status": "failed"
}
},
{
"id": "5be5bf7c-9f1d-4f3d-ac8b-009dbaac149f",
"createdAt": "2023-11-08T20:03:30.962Z",
"updatedAt": "2023-11-08T20:03:30.962Z",
"idempotencyKey": "3aaf78bf-f82a-4a8f-bffb-4d814e5d83f6",
"providerId": "c6d9a756-f0db-402f-a100-2df25153294a",
"providerType": "ANTIFRAUD_SANDBOX",
"transactionId": "4027144",
"amount": 500,
"authorizationCode": null,
"authorizationNsu": null,
"requestStatus": "success",
"requestType": "anti_fraud",
"responseTs": "106ms",
"fraudAnalysis": {
"score": null,
"status": "pending"
}
},
{
"id": "adf7bee1-d44a-4c2b-b2cc-6129dffb7882",
"createdAt": "2023-11-08T20:03:28.948Z",
"updatedAt": "2023-11-08T20:03:29.756Z",
"idempotencyKey": "3aaf78bf-f82a-4a8f-bffb-4d814e5d83f6",
"providerId": "dd9b8ebf-3715-4809-8490-ca29556dd7cf",
"providerType": "SANDBOX",
"transactionId": "b45c8d76-449c-445c-9eca-1bb7bd37cec9",
"amount": 500,
"authorizationCode": "8128049",
"authorizationNsu": "7221186",
"requestStatus": "success",
"requestType": "pre_authorization",
"responseTs": "301ms",
"providerAuthorization": {
"networkAuthorizationCode": "8852082",
"networkResponseCode": "3142846"
}
}
]
}
Caso ocorra alguma instabilidade com o provedor antifraude, existem duas opções para lidar com este cenário que devem ser configuradas em seu fluxo de pagamentos:
captureOnError: Faz a captura mesmo que ocorra instabilidade no provedor de antifraude.refundOnError: Faz o estorno da transação em caso de instabilidade no provedor de antifraude. Não pode ser ligada ao mesmo tempo quecaptureOnError.
capture: false, quando captureOnError e refundOnError estão desligadas, a transação é retornada como pre_authorized. Em cobranças com capture: true e antifraude, a transação segue pré-autorizada até o veredito e, sem veredito em 72 horas, é cancelada automaticamente.Para testar os diversos comportamentos das propriedades descritas acima, veja
sobre Alterar o status do antifraude no ambiente de
sandbox