See our Fraud Overview for more general information about how we support fraud prevention.
What is supported?
Actions
- Pre-authorization
- Post-authorization
Resulting decisions
Pass3DS(pre-authorization only)RejectFail
Payment methods
- Card
- Apple Pay
- Google Pay
- PayPal
- Klarna
- Alipay+
- 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.| Field | Type |
|---|---|
customer.billingAddress.firstName | string |
customer.billingAddress.lastName | string |
customer.billingAddress.addressLine1 | string |
customer.billingAddress.countryCode | string |
customer.billingAddress.city | string |
order.shipping.amount | integer |
order.shipping.methodName | string |
order.lineItems[].name | string |
order.lineItems[].amount | integer |
order.lineItems[].productType | string |
metadata.fraud_context.device_details.user_agent | string |
metadata.fraud_context.device_details.browser_ip | string |
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.| Field | Type |
|---|---|
customer.billingAddress.firstName | string |
customer.billingAddress.lastName | string |
customer.billingAddress.addressLine1 | string |
customer.billingAddress.countryCode | string |
customer.billingAddress.city | string |
order.shipping.methodName | string |
order.lineItems[].name | string |
order.lineItems[].amount | integer |
order.lineItems[].productType | string |
metadata.fraud_context.device_details.user_agent | string |
metadata.fraud_context.device_details.browser_ip | string |
- Primer’s integration with Klarna currently does not support
passing
order.shipping.amount. - Passing a
customer.billingAddresson 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
Passoutcome, setcustomer.emailAddresstoapprove@forter.com - To trigger a
Rejectoutcome, setcustomer.emailAddresstodecline@forter.com - To trigger a
3DSoutcome, setcustomer.emailAddresstoforce_3ds_psd2_recommendation@forter.com - To trigger a
Failoutcome, setcustomer.emailAddresstonotreviewed@forter.com
Post-authorization fraud check
- To trigger a
Passoutcome, setcustomer.emailAddresstoapprove@forter.com - To trigger a
Rejectoutcome, setcustomer.emailAddresstodecline@forter.com - To trigger a
Failoutcome, setcustomer.emailAddresstonotreviewed@forter.com
General Notes
- Forter’s test document can be found here (need to be logged into your Forter dashboard to access)
Mapping
Base mapping
| Forter | Primer |
|---|---|
orderId | payment.orderId |
orderType | Derived from payment.metadata.fraud_context.device_details.source |
authorizationStep | PRE_AUTHORIZATION or POST_AUTHORIZATION |
timeSentToForter | Current time |
checkoutTime | Current time |
connectionInformation.customerIP | payment.metadata.fraud_context.device_details.browser_ip |
connectionInformation.userAgent | payment.metadata.fraud_context.device_details.user_agent |
connectionInformation.merchantDeviceIdentifier | payment.metadata.fraud_context.device_details.device_id |
connectionInformation.forterTokenCookie | payment.metadata.fraud_context.device_details.cookie_token |
totalAmount.currency | payment.currencyCode |
totalAmount.amountUSD or amountLocalCurrency | payment.amount |
cartItems[].basicItemData.name | payment.order.lineItems[].name |
cartItems[].basicItemData.quantity | payment.order.lineItems[].quantity |
cartItems[].basicItemData.type | payment.order.lineItems[].productType |
cartItems[].basicItemData.price.currency | payment.currencyCode |
cartItems[].basicItemData.price.amountUSD or amountLocalCurrency | payment.order.lineItems[].amount |
cartItems[].basicItemData.productId | payment.order.lineItems[].name |
cartItems[].itemSpecificData.physicalGoods.color | payment.order.lineItems[].productData.color Only if the product type is PHYSICAL |
cartItems[].itemSpecificData.physicalGoods.weight | payment.order.lineItems[].productData.weight Only if the product type is PHYSICAL |
primaryDeliveryDetails.deliveryMethod | payment.order.shipping.methodName |
primaryDeliveryDetails.deliveryPrice.currency | payment.currencyCode |
primaryDeliveryDetails.deliveryPrice.amountUSD or amountLocalCurrency | payment.order.shipping.amount |
primaryDeliveryDetails.deliveryType | PHYSICAL, DIGITAL, or HYBRID depending on the product types |
primaryDeliveryDetails.deliveryType | PHYSICAL, DIGITAL, or HYBRID depending on the product types |
primaryRecipient.personalDetails.firstName | payment.customer.shippingAddress.firstName |
primaryRecipient.personalDetails.lastName | payment.customer.shippingAddress.lastName |
primaryRecipient.personalDetails.email | payment.customer.emailAddress |
primaryRecipient.address.address1 | payment.customer.shippingAddress.addressLine1 |
primaryRecipient.address.address2 | payment.customer.shippingAddress.addressLine2 |
primaryRecipient.address.zip | payment.customer.shippingAddress.postalCode |
primaryRecipient.address.city | payment.customer.shippingAddress.city |
primaryRecipient.address.region | payment.customer.shippingAddress.state |
primaryRecipient.address.country | payment.customer.shippingAddress.countryCode |
accountOwner.email | payment.customer.emailAddress |
accountOwner.accountId | payment.customerId |
accountOwner.firstName | payment.customer.firstName (or taken from the billing/shipping address if unavailable) |
accountOwner.lastName | payment.customer.lastName (or taken from the billing/shipping address if unavailable) |
additionalIdentifiers.merchant | payment.metadata.fraud_context.merchant_details.merchant_provider_id |
additionalIdentifiers.merchant | payment.metadata.fraud_context.merchant_details.merchant_name |
payment[0].amount.currency | payment.currencyCode |
payment[0].amount.amountUSD or amountLocalCurrency | Calculated from the order items |
payment[0].billingDetails.personalDetails.firstName | payment.customer.billingAddress.firstName |
payment[0].billingDetails.personalDetails.lastName | payment.customer.billingAddress.lastName |
payment[0].billingDetails.personalDetails.email | payment.customer.emailAddress |
payment[0].billingDetails.address.address1 | payment.customer.billingAddress.addressLine1 |
payment[0].billingDetails.address.address2 | payment.customer.billingAddress.addressLine2 |
payment[0].billingDetails.address.zip | payment.customer.billingAddress.postalCode |
payment[0].billingDetails.address.city | payment.customer.billingAddress.city |
payment[0].billingDetails.address.region | payment.customer.billingAddress.state |
payment[0].billingDetails.address.country | payment.customer.billingAddress.countryCode |
Card
| Forter | Primer |
|---|---|
payment[0].creditCard.lastFourDigits | Card last four digits |
payment[0].creditCard.expirationMonth | Card expiry month |
payment[0].creditCard.expirationYear | Card expiry year |
payment[0].creditCard.nameOnCard | Cardholder name |
payment[0].creditCard.bin | Card first six digits |
Apple Pay
| Forter | Primer |
|---|---|
payment[0].applePay.lastFourDigits | Card last four digits |
payment[0].applePay.expirationMonth | Card expiry month |
payment[0].applePay.expirationYear | Card expiry year |
payment[0].applePay.nameOnCard | Cardholder name |
payment[0].applePay.bin | Card first six digits |
payment[0].applePay.token | Token |
payment[0].applePay.cardBrand | Card network |
payment[0].applePay.countryOfIssuance | Issuer country code |
Google Pay
| Forter | Primer |
|---|---|
payment[0].googlePay.lastFourDigits | Card last four digits |
payment[0].googlePay.expirationMonth | Card expiry month |
payment[0].googlePay.expirationYear | Card expiry year |
payment[0].googlePay.nameOnCard | Cardholder name |
payment[0].googlePay.bin | Card first six digits |
payment[0].googlePay.token | Token |
payment[0].googlePay.cardBrand | Card network |
payment[0].googlePay.countryOfIssuance | Issuer country code |
PayPal
| Forter | Primer |
|---|---|
payment[0].paypal.payerID | External Payer ID |
payment[0].paypal.payerEmail | PayPal email address |
payment[0].paypal.paymentMethod | Instant Transfer |
payment[0].paypal.paymentId | PayPal Order ID |
payment[0].paypal.authorizationId | PayPal Billing Agreement ID |
payment[0].paypal.paymentStatus | PayPal Payment Status |
Digital Wallets
This applies to Klarna, WeChat, Alipay+, Clearpay/Afterpay, Vipps, iDeal, Blik, Twint, MobilePay, Venmo, and Pix.
| Forter | Primer |
|---|---|
payment[0].digitalWallet.digitalWalletName | Name of the payment method or OTHER |
payment[0].digitalWallet.freeTextDigitalWalletName | Name of the payment method if digitalWalletName is OTHER |
payment[0].digitalWallet.underlyingPaymentMethod.underlyingPaymentMethodType | UNKNOWN |
payment[0].installmentService.serviceName | Only for Clearpay/Afterpay |