3D Secure
What Is 3D Secure?
3D Secure is an additional security layer for card payments. When a customer's bank requires it, they must verify their identity (e.g. via their banking app or SMS code) before the payment is processed.
Inflow handles 3DS automatically — no additional configuration is needed.
How It Works in the SDK
When 3DS is required:
- The customer enters their card details in the Inflow card form.
- The SDK detects that 3DS is required.
- A modal opens automatically with the bank's authentication page.
- The customer completes the verification.
- The modal closes automatically.
- Your
onCompletecallback fires with the payment result.
onComplete: (result) => {
if (result.status === PaymentResultStatus.SUCCESS) {
// Payment successful (3DS passed if required)
}
if (result.error) {
console.error('Payment failed:', result.error.message);
// result.error.code may be 'THREE_DS_FAILED'
// result.error.retryable indicates if the customer can try again
}
}No setup required. The SDK manages the entire 3DS flow including the authentication modal. You do not need to call any confirmation endpoint — the SDK handles payment capture automatically after 3DS.
3DS in Server-to-Server Integration
If you're using the server-to-server API (without the SDK), you handle 3DS manually:
- Create the payment with
threeDsSuccessUrlandthreeDsFailureUrl. - If the response includes
threeDsSessionUrl, redirect the customer to it. - After 3DS, the customer is redirected to your success or failure URL.
- Call
POST /api/server/payment/{paymentId}/confirmto finalize.
See Server-to-Server Payments for the full flow.
Tips
- Providing
firstNameandlastNamewhen creating the payment improves 3DS success rates. - 3DS is triggered by the customer's bank, not by Inflow. Some banks require it for all transactions, others only above certain amounts.
- The 3DS modal appearance is controlled by the bank and cannot be customized.
Updated about 20 hours ago