What you have to do
Nothing extra.elements.submit(...) completes card authentication for you when a payment requires it. You do not
collect anything additional in your checkout form, and you do not orchestrate the authentication
yourself.
buyer and products you pass to
POST /v2/transactions. Keep those complete and accurate and
authentication has what it needs.
What you get back
submit(...) resolves once the payment has reached an outcome, whether or not authentication was
involved. Read status on the result:
succeeded— the payment was approved.processing— the payment is still resolving. Wait for a webhook.failed,refused,canceled,timed_out— the attempt did not go through. Show the buyer the returned message and let them try again.
If the buyer is interrupted
A buyer can reload the page or navigate away mid-payment. Resume the same transaction instead of starting a new checkout attempt:Card authentication after a reload
A payment waiting on card authentication (pre-charge 3DS) was tied to the element session that captured the card, and a reload starts a new session.resume() self-heals this for you: mount a
CardElement and call resume(). The SDK asks the buyer to re-enter the card in the mounted element,
re-tokenizes it, proves it is the same card, supersedes the stale challenge, and completes
authentication — resolving to a terminal result. No new checkout attempt or new transaction id, and
no extra branching in your code.
The re-entered card must be the same card as the original attempt — a different card is rejected.
manualReentry: true to get
status: "requires_reentry" back instead of auto-healing, then call resume() again after
re-collecting the card. See the SDK reference.

