Skip to main content

Overview

3D Secure (3DS) is a card network authentication protocol that adds an additional verification step during online card payments. It protects merchants from fraud-related chargebacks through liability shift — when a 3DS-authenticated transaction results in a dispute, the liability shifts from the merchant to the card issuer. Yuno supports both 3DS 1.0 and 3DS 2.x, with automatic version selection based on issuer capabilities.

3DS Versions

VersionExperienceAuthenticationStatus
3DS 1.0Full-page redirect to issuerPassword-basedLegacy (being deprecated)
3DS 2.0In-app/in-browser challengeOTP, biometric, app-basedCurrent standard
3DS 2.1Enhanced risk-based authFrictionless flow supportedCurrent standard
3DS 2.2Decoupled authenticationOut-of-band auth supportedLatest
3DS 2.x introduces frictionless authentication, where low-risk transactions are approved without any customer interaction. The issuer evaluates risk signals and may approve the transaction silently, providing the best customer experience while maintaining security.

ECI Indicators

The Electronic Commerce Indicator (ECI) returned after 3DS authentication indicates the level of authentication achieved:
ECI (Visa)ECI (MC)MeaningLiability Shift
0502Fully authenticatedYes
0601Authentication attemptedYes (partial)
0700Not authenticatedNo
An ECI of 07 (Visa) or 00 (Mastercard) means authentication failed or was not performed. These transactions do NOT receive liability shift and carry the same chargeback risk as non-3DS transactions.

Integration

With Checkout SDK

When using Yuno’s Checkout SDK, 3DS is handled automatically. The SDK manages the authentication flow, including rendering challenges when required.
const checkout = yuno.checkout({
  countryCode: "BR",
  currency: "BRL",
  amount: "500.00",
  checkoutSession: "session_abc123",
  // 3DS is handled automatically by the SDK
});

With Direct API

For Direct API integrations, include the three_d_secure object in your payment request:
POST /v1/payments
{
  "amount": { "value": 500.00, "currency": "BRL" },
  "country": "BR",
  "payment_method": {
    "type": "CARD",
    "token": "tok_card_abc123"
  },
  "three_d_secure": {
    "enabled": true,
    "version": "2.2"
  }
}
If a challenge is required, the response includes a redirect URL:
{
  "id": "pay_3ds_xyz",
  "status": "PENDING_3DS",
  "three_d_secure": {
    "status": "CHALLENGE_REQUIRED",
    "redirect_url": "https://3ds.y.uno/challenge/pay_3ds_xyz",
    "version": "2.2"
  }
}

3DS Flow Types

FlowDescriptionCustomer Action
FrictionlessIssuer approves silently based on risk analysisNone — seamless experience
ChallengeIssuer requires customer verificationOTP, biometric, or app confirmation
Fallback3DS 2.x unavailable, falls back to 1.0Full-page redirect for password entry

When to Use 3DS

ScenarioRecommendation
High-value transactionsAlways enable 3DS
First-time customersStrongly recommended
Recurring payments (initial)Enable for enrollment, skip for subsequent
Low-risk repeat customersConsider SCA exemptions
Regulatory requirement (PSD2/SCA)Mandatory in applicable regions
In regions subject to Strong Customer Authentication (SCA) regulations, such as the European Economic Area, 3DS is mandatory for most card-not-present transactions. See SCA Exemptions for eligible exemption categories.

Best Practices

  • Enable 3DS 2.x by default: It provides better UX than 1.0 with frictionless flows.
  • Send rich data: Provide browser info, device data, and billing address to increase frictionless approval rates.
  • Handle challenges gracefully: Ensure your UI accommodates the challenge iframe/redirect without breaking the checkout flow.
  • Monitor authentication rates: Track frictionless vs. challenge ratios in the Dashboard to optimize data quality.