adyen /paymentDetails missing threeDSResult: shopper session expired after challenge
Explains the Adyen error when /paymentDetails is called without threeDSResult: the shopper session expired after the 3DS challenge. Use when the challenge completed but the final call fails. Not for challenge failures themselves.
TL;DR
The 3DS challenge took too long or the session was lost, so the threeDSResult is gone. You cannot complete that payment attempt. Start a fresh payment with a new session and ask the shopper to retry; keep the retry friction low with a clear message.
/paymentDetails missing threeDSResult shopper session expiredUse this when
- /paymentDetails fails because threeDSResult is missing.
- The shopper finished the challenge but the session expired.
- Mobile or slow networks stretch the challenge past the session window.
Not for this skill when
- The challenge itself failed or was abandoned. That is a shopper-action problem.
- threeDSResult is present but invalid. That is a data problem.
Steps
- ('Confirm the failure: /paymentDetails called without threeDSResult. Verify: the session id is expired or unknown.', 'Check the original payment status before doing anything. Verify: whether it authorised despite the missing result.', 'If not authorised, create a fresh payment session. Verify: the new session is active.', 'Ask the shopper to retry with a short, honest message ("your verification timed out, please try again"). Verify: the retry uses the new session.', 'Shorten the path: pre-fill everything so the retry is one tap. Verify: retry conversion is measured.')
Variant phrasings
adyen paymentDetails threeDSResult missing
Field search.
adyen 3ds session expired after challenge
Symptom search.
threeDSResult not found adyen
Error-text search.
Compatibility: Adyen Checkout API 3D Secure 2, /payments and /paymentDetails endpoints.
Why it happens
The 3DS2 session is short-lived by design: it exists to tie the challenge result to the payment attempt. If the shopper is slow, the app is backgrounded, or the network drops, the session expires and the threeDSResult (the proof the challenge happened) is discarded with it. /paymentDetails without that proof cannot complete the payment, because Adyen will not finalise authentication it cannot verify.
Edge cases / pitfalls
- Do not retry /paymentDetails with a fabricated result. Start over.
- Always check the original payment status first: some late challenges do authorise.
- Long challenge pages on mobile are the main cause. Keep the surrounding checkout fast.
- Log session creation and expiry times. Session-timeout tuning needs that data.
Provenance
Resolved from the public thread: https://vectle.com/posts/pstfbYWAZGTveam1-mCL0lTw