Forter is a company that specializes in providing fraud prevention and detection solutions for online businesses. It offers an integrated platform that uses advanced machine learning and behavioral analytics to help businesses identify and prevent fraud in real time.

Primer supports Forter’s Validation API. The Validation API is used to receive Forter’s real-time fraud decision of whether to approve or decline an order when the customer transacts on your site. The request should be sent either prior to calling your payment gateway for authorization of funds (Pre-Authorization) or immediately after receiving the authorization response from your payment gateway, but prior to capturing the funds (Post-Authorization).

See our Fraud Overview for more general information about how we support fraud prevention.

What is supported?

Actions

  • Pre-authorization
  • Post-authorization

Resulting decisions

  • Pass
  • 3DS (pre-authorization only)
  • Reject
  • Fail

Payment methods

  • Card
  • Apple Pay
  • Google Pay
  • Paypal
  • Klarna
  • Alipay+
  • WeChat
  • Clearpay/Afterpay
  • Blik
  • Twint
  • MobilePay
  • Venmo
  • Pix

Instructions

Pre-requisites

  • To be able to receive 3DS decisions via the Forter Validation API, ask your account manager to enable the 3DS decision for your account
  • In order to collect additional device data, Forter JS needs to be installed by you, the merchant, in your checkout application. During the flow, Forter’s JS will generate a token that you have to pass to Primer in the client session under the field name metadata.fraud_context.device_details.cookie_token

Set-up Instructions

  • Go to your Primer Dashboard.
  • Navigate to the "Integrations" section, select "Add Integration" at the top of the page and search for Forter.
  • Find your credentials in the Forter Dashboard by following the below steps:
    • Log into the Forter dashboard
    • Go to the Settings gear icon
    • Copy Secret Key and Site ID
  • Follow the rest of the steps to set up Primer Workflows for fraud checks.

Required fields

For card payments

For card payments, the following fields have to be passed for Forter to accept the request.

FieldType
customer.billingAddress.firstNamestring
customer.billingAddress.lastNamestring
customer.billingAddress.addressLine1string
customer.billingAddress.countryCodestring
customer.billingAddress.citystring
order.shipping.amountinteger
order.shipping.methodNamestring
order.lineItems[].namestring
order.lineItems[].amountinteger
order.lineItems[].productTypestring
metadata.fraud_context.device_details.user_agentstring
metadata.fraud_context.device_details.browser_ipstring

For Paypal payments

For Paypal, pass the same fields as for card payments.

For Alipay+ payments

For Alipay+, pass the same fields as for card payments.

For Wechat payments

For WeChat, pass the same fields as for card payments.

For Klarna payments

For Klarna, pass the following fields.

FieldType
customer.billingAddress.firstNamestring
customer.billingAddress.lastNamestring
customer.billingAddress.addressLine1string
customer.billingAddress.countryCodestring
customer.billingAddress.citystring
order.shipping.methodNamestring
order.lineItems[].namestring
order.lineItems[].amountinteger
order.lineItems[].productTypestring
metadata.fraud_context.device_details.user_agentstring
metadata.fraud_context.device_details.browser_ipstring

Notes:

  • Primer's integration with Klarna currently does not support passing order.shipping.amount.
  • Passing a customer.billingAddress on your Client Session request that is different from the shopper address that is stored by Klarna, results in a failed payment attempt.

Testing

Pre-authorization fraud check

  • To trigger a Pass outcome, set customer.emailAddress to approve@forter.com
  • To trigger a Reject outcome, set customer.emailAddress to decline@forter.com
  • To trigger a 3DS outcome, set customer.emailAddress to force_3ds_psd2_recommendation@forter.com
  • To trigger a Fail outcome, set customer.emailAddress to notreviewed@forter.com

Post-authorization fraud check

  • To trigger a Pass outcome, set customer.emailAddress to approve@forter.com
  • To trigger a Reject outcome, set customer.emailAddress to decline@forter.com
  • To trigger a Fail outcome, set customer.emailAddress to notreviewed@forter.com

General Notes

Mapping

Base mapping

ForterPrimer
orderIdpayment.orderId
orderTypeDerived from payment.metadata.fraud_context.device_details.source
authorizationStepPRE_AUTHORIZATION or POST_AUTHORIZATION
timeSentToForterCurrent time
checkoutTimeCurrent time
connectionInformation.customerIPpayment.metadata.fraud_context.device_details.browser_ip
connectionInformation.userAgentpayment.metadata.fraud_context.device_details.user_agent
connectionInformation.merchantDeviceIdentifierpayment.metadata.fraud_context.device_details.device_id
connectionInformation.forterTokenCookiepayment.metadata.fraud_context.device_details.cookie_token
totalAmount.currencypayment.currencyCode
totalAmount.amountUSD or amountLocalCurrencyCalculated from the order items
cartItems[].basicItemData.namepayment.order.lineItems[].name
cartItems[].basicItemData.quantitypayment.order.lineItems[].quantity
cartItems[].basicItemData.typepayment.order.lineItems[].productType
cartItems[].basicItemData.price.currencypayment.currencyCode
cartItems[].basicItemData.price.amountUSD or amountLocalCurrencypayment.order.lineItems[].amount
cartItems[].basicItemData.productIdpayment.order.lineItems[].name
cartItems[].itemSpecificData.physicalGoods.colorpayment.order.lineItems[].productData.color
Only if the product type is PHYSICAL
cartItems[].itemSpecificData.physicalGoods.weightpayment.order.lineItems[].productData.weight
Only if the product type is PHYSICAL
primaryDeliveryDetails.deliveryMethodpayment.order.shipping.methodName
primaryDeliveryDetails.deliveryPrice.currencypayment.currencyCode
primaryDeliveryDetails.deliveryPrice.amountUSD or amountLocalCurrencypayment.order.shipping.amount
primaryDeliveryDetails.deliveryTypePHYSICAL, DIGITAL, or HYBRID depending on the product types
primaryDeliveryDetails.deliveryTypePHYSICAL, DIGITAL, or HYBRID depending on the product types
primaryRecipient.personalDetails.firstNamepayment.customer.shippingAddress.firstName
primaryRecipient.personalDetails.lastNamepayment.customer.shippingAddress.lastName
primaryRecipient.personalDetails.emailpayment.customer.emailAddress
primaryRecipient.address.address1payment.customer.shippingAddress.addressLine1
primaryRecipient.address.address2payment.customer.shippingAddress.addressLine2
primaryRecipient.address.zippayment.customer.shippingAddress.postalCode
primaryRecipient.address.citypayment.customer.shippingAddress.city
primaryRecipient.address.regionpayment.customer.shippingAddress.state
primaryRecipient.address.countrypayment.customer.shippingAddress.countryCode
accountOwner.emailpayment.customer.emailAddress
accountOwner.accountIdpayment.customerId
accountOwner.firstNamepayment.customer.firstName (or taken from the billing/shipping address if unavailable)
accountOwner.lastNamepayment.customer.lastName (or taken from the billing/shipping address if unavailable)
additionalIdentifiers.merchantpayment.metadata.fraud_context.merchant_details.merchant_provider_id
additionalIdentifiers.merchantpayment.metadata.fraud_context.merchant_details.merchant_name
payment[0].amount.currencypayment.currencyCode
payment[0].amount.amountUSD or amountLocalCurrencyCalculated from the order items
payment[0].billingDetails.personalDetails.firstNamepayment.customer.billingAddress.firstName
payment[0].billingDetails.personalDetails.lastNamepayment.customer.billingAddress.lastName
payment[0].billingDetails.personalDetails.emailpayment.customer.emailAddress
payment[0].billingDetails.address.address1payment.customer.billingAddress.addressLine1
payment[0].billingDetails.address.address2payment.customer.billingAddress.addressLine2
payment[0].billingDetails.address.zippayment.customer.billingAddress.postalCode
payment[0].billingDetails.address.citypayment.customer.billingAddress.city
payment[0].billingDetails.address.regionpayment.customer.billingAddress.state
payment[0].billingDetails.address.countrypayment.customer.billingAddress.countryCode

Card

ForterPrimer
payment[0].creditCard.lastFourDigitsCard last four digits
payment[0].creditCard.expirationMonthCard expiry month
payment[0].creditCard.expirationYearCard expiry year
payment[0].creditCard.nameOnCardCardholder name
payment[0].creditCard.binCard first six digits

Apple Pay

ForterPrimer
payment[0].applePay.lastFourDigitsCard last four digits
payment[0].applePay.expirationMonthCard expiry month
payment[0].applePay.expirationYearCard expiry year
payment[0].applePay.nameOnCardCardholder name
payment[0].applePay.binCard first six digits
payment[0].applePay.tokenToken
payment[0].applePay.cardBrandCard network
payment[0].applePay.countryOfIssuanceIssuer country code

Google Pay

ForterPrimer
payment[0].googlePay.lastFourDigitsCard last four digits
payment[0].googlePay.expirationMonthCard expiry month
payment[0].googlePay.expirationYearCard expiry year
payment[0].googlePay.nameOnCardCardholder name
payment[0].googlePay.binCard first six digits
payment[0].googlePay.tokenToken
payment[0].googlePay.cardBrandCard network
payment[0].googlePay.countryOfIssuanceIssuer country code

PayPal

ForterPrimer
payment[0].paypal.payerIDExternal Payer ID
payment[0].paypal.payerEmailPayPal email address
payment[0].paypal.paymentMethodInstant Transfer
payment[0].paypal.paymentIdPaypal Order ID
payment[0].paypal.authorizationIdPaypal Billing Agreement ID
payment[0].paypal.paymentStatusPaypal Payment Status

Digital Wallets

This applies to Klarna, WeChat, Alipay+, Clearpay/Afterpay, Vipps, iDeal, Blik, Twint, MobilePay, Venmo, and Pix.

ForterPrimer
payment[0].digitalWallet.digitalWalletNameName of the payment method or OTHER
payment[0].digitalWallet.freeTextDigitalWalletNameName of the payment method if digitalWalletName is OTHER
payment[0].digitalWallet.underlyingPaymentMethod.underlyingPaymentMethodTypeUNKNOWN
payment[0].installmentService.serviceNameOnly for Clearpay/Afterpay