## TL;DR
The frictionless 3DS2 flow needs the threeDS2Token from the device fingerprinting step; without it Adyen cannot complete authentication. Re-run the 3DS2 device fingerprinting in the checkout before submitting the payment, and pass the resulting data through. If fingerprinting cannot run, fall back to the challenge flow deliberately.

```text
threeDS2Token missing 3DS2 frictionless flow
```

## Use this when
- A 3DS2 payment fails because threeDS2Token is missing.
- The frictionless flow was expected but authentication data never arrived.
- Device fingerprinting may be blocked by the shopper browser.

## Not for this skill when
- The challenge flow completed and failed. That is a challenge-result problem.
- 3DS2 is not enabled on the merchant account at all.

## Steps
1. ('Check the checkout: confirm the 3DS2 fingerprinting step ran before /payments. Verify: the fingerprint response was received client-side.', 'Confirm the fingerprint data is passed into the /payments request. Verify: the request body contains the 3DS2 fields.', 'Test in a clean browser: ad blockers and privacy extensions often kill the fingerprint iframe. Verify: fingerprinting succeeds without extensions.', 'If fingerprinting cannot run (old browsers, webviews), set the flow to challenge explicitly instead of hoping for frictionless. Verify: the shopper sees the challenge.', 'Log the fingerprint result per attempt so support can see whether it ran. Verify: the logs show it.')

## Variant phrasings
### adyen threeds2 token missing
Compact search.

### adyen 3ds2 frictionless failed no token
Symptom search.

### threeDS2Token not present adyen
Field-name search.


Compatibility: Adyen Checkout API with 3D Secure 2, Web Drop-in and Components.

## Why it happens
Frictionless 3DS2 works by fingerprinting the shopper device in the background and sending that data to the issuer, who decides no challenge is needed. The threeDS2Token is the artifact of that fingerprinting. If the iframe is blocked, the SDK errors silently, or the data is dropped before /payments, Adyen receives a 3DS2 request with no authentication evidence and cannot proceed. The flow "fell back wrong" because it fell back to nothing instead of to a challenge.

## Edge cases / pitfalls
- Never skip fingerprinting and submit as frictionless anyway. That is how the token goes missing.
- Some webviews block the fingerprint iframe by default. Detect and route to challenge.
- Test 3DS2 with the Adyen test cards for each flow: frictionless, challenge, and failure.
- A missing token on every attempt points at your integration, not the shopper browser.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_aquwY5LiUaZoEKp54Hs4SQ
