# Using Radar Plus to prevent charges without liability shift

Charges that succeed on the fallback attempt but haven't completed 3DS aren't covered by liability shift. One exception is that a fallback charge with an `attempt_acknowledged` status on [`payment_method_details.card.three_d_secure.result`](https://stripe.com/docs/api/setup_attempts/object#setup_attempt_object-payment_method_details-card-three_d_secure-result) will fall under liability shift.
If you want to prevent payments that aren't covered by liability shift from succeeding, this can be done if you're using Radar Plus. See below for suggested approaches:
* **Request 3DS with all charges through the API and check for a 3D Secure source.** 3DS can be requested on a charge by setting `request_three_d_secure: any` when creating payments through the API. Then, use the Radar rule `Block if not :is_3d_secure: and not :is_off_session:` to allow recurring subscription charges to succeed, and check that any on-session charges are authenticated.
  If the merchant accepts Apple/Google Pay, they’ll need to slightly modify the rule to: `Block if not :is_3d_secure: and not :is_off_session: and :digital_wallet: != 'apple_pay' and not (:digital_wallet: = 'android_pay' and :has_cryptogram:)`. We never allow 3DS on Apple Pay cards (Apple pay only supports liability shift in Europe) and we don't allow 3DSfor Google Pay cards if we're also sent the cryptogram during tokenization.
* **Request 3DS with Radar and check for a 3D Secure source.** Instead of requesting 3DS when creating payments through the API, you can request 3DS via Radar. You can pick a [custom metadata attribute](https://stripe.com/docs/radar/rules/reference#metadata-attributes) (for example, `foo: bar`) to set on all charges that requires 3DS . Once that is done, the following Radar rule will check for that metadata and request 3DS: `Request 3D Secure if ::foo:: = 'bar'` Next, add a Radar rule that checks whether 3DS was run for payments that match the same request 3DS condition used earlier: `Block if ::foo:: = 'bar' and not :is_3d_secure:`
  If you process Apple Pay or Google Pay payments, the Radar rule needs to look something like: `Block if ::foo:: = 'bar' and not :is_3d_secure: and :digital_wallet: != 'apple_pay' and not (:digital_wallet: = 'android_pay' and :has_cryptogram:)`