Using ThreeDSMax to Force or Waive 3DS Challenges with T3DSCI
ThreeDSMax lets merchants force or waive 3DS challenges via T3DSCI. Learn how to set the flag, verify the response, and balance security with user experience.
27 Jul 2025, 07:20 UTC

Problem: Balancing Security and User Experience in 3DS Authentication
When a merchant sends a 3DS authentication request, issuers decide whether to show a challenge (e.g., a one‑time password or biometric prompt) based on their risk model. Merchants often want finer control: force a challenge for high‑value orders, or skip it for low‑risk, fast‑checkout flows. The ThreeDSMax library exposes the ThreeDSRequestorChallengeIndicator (T3DSCI) field to achieve this.
Feature Overview: What T3DSCI Does
T3DSCI is a single‑digit flag defined in the 3DS 2.1.0 specification:
- 0 – The requestor is willing to waive a challenge if the issuer’s risk assessment deems it unnecessary.
- 1 – The requestor explicitly requests a challenge; the issuer must present a challenge if possible.
ThreeDSMax maps this flag to a field in the ThreeDSRequestBuilder and automatically includes it in the JSON payload sent to the Access Control Server (ACS). The issuer’s response is recorded in the AuthenticationResponse object, allowing merchants to audit whether the challenge was shown.
Implementation Example: Java Code
Below is a minimal snippet that demonstrates setting T3DSCI and checking the outcome. Replace the placeholder values with your own configuration.
// Build the authentication request
ThreeDSRequestBuilder requestBuilder = new ThreeDSRequestBuilder();
requestBuilder.setMerchantId("YOUR_MERCHANT_ID");
requestBuilder.setTransactionId("TX123456789");
requestBuilder.setAmount(10000L); // amount in smallest currency unit
requestBuilder.setCurrency("USD");
// Set T3DSCI – 1 forces a challenge, 0 allows issuer to waive
requestBuilder.setThreeDSRequestorChallengeIndicator(1); // Force challenge
// Create the request and send it
ThreeDSRequest request = requestBuilder.build();
ThreeDSResponse response = threeDSClient.authenticate(request);
// Inspect the issuer’s decision
String authIndicator = response.getAuthenticationResponse().getAuthenticationIndicator();
System.out.println("Authentication Indicator: " + authIndicator);
if ("CHALLENGE".equalsIgnoreCase(authIndicator)) {
// ACS returned a challenge – handle UI flow
System.out.println("ACS Challenge: " + response.getAuthenticationResponse().getChallengePayload());
} else {
// No challenge – transaction may be completed automatically
System.out.println("No challenge presented – transaction status: " + authIndicator);
}
Key points to verify:
- The request JSON must contain
threeDSRequestorChallengeIndicator: 1. Check ThreeDSMax logs or the debug output. - In a sandbox environment, the ACS should return a
challengePayloadwhen T3DSCI is set to 1. - The
authenticationIndicatorin the response should match the expected value (e.g.,CHALLENGE).
Trade‑offs and Limitations
- Increased Decline Risk: Issuers may interpret a forced challenge as a high‑risk signal and decline the transaction. Test thoroughly in a sandbox before enabling in production.
- Issuer Override: Some issuers ignore T3DSCI or override it based on their own risk models. Monitor the actual challenge frequency after deployment.
- User Friction: For low‑value or low‑risk purchases, forcing a challenge can degrade the checkout experience. Consider using T3DSCI=0 for such cases.
Actionable Next Steps
- Set up a sandbox account with your acquirer and run a series of test transactions with T3DSCI=1 and T3DSCI=0.
- Log the raw JSON request and ACS response to confirm the flag is transmitted and honored.
- Implement a simple rule engine that toggles T3DSCI based on transaction amount or fraud score.
- Deploy to staging, monitor challenge rates, and adjust thresholds to balance security and conversion.
By leveraging ThreeDSMax’s T3DSCI support, merchants can fine‑tune the 3DS experience, ensuring that high‑risk transactions receive the necessary friction while keeping the checkout flow smooth for everyday purchases.
Diagram
| Component | Role |
|---|---|
| Request Builder | Sets T3DSCI and other fields |
| ACS (Issuer) | Evaluates risk and presents challenge if required |
| AuthenticationResponse | Captures challenge outcome and indicator |
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.