> For the complete documentation index, see [llms.txt](https://docs.payments.thalescloud.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.payments.thalescloud.io/nfc-wallet-sdk-android/implement-nfc-wallet/make-payment/implement-contactless-payments/7.-configure-cdcvm-experiences/visa-cdcvm/visa-cvm-priority.md).

# Visa CVM priority

Prioritize Online PIN or CDCVM for Visa contactless payments.

## Overview

Visa CVM selection is a negotiation between the **digital wallet application** and the POS terminal.

It determines the Cardholder Verification Method (CVM) used to authenticate the **end user**.

Set the CVM priority during SDK initialization in [Initialize the NFC Wallet SDK](/nfc-wallet-sdk-android/get-started/configuration/4.-initialize-the-nfc-wallet-sdk.md#configure-payment-behavior) using `CustomConfiguration`.

Use `CustomConfiguration.Builder.selectCvmOnlinePINPriority(...)` to prioritize:

* Online PIN

If you do not set a priority, NFC Wallet SDK uses **CDCVM priority**.

Based on the selected priority, NFC Wallet SDK chooses the best CVM supported by both:

* the card profile (CAP)
* the terminal capabilities (TTQ)

### Inputs used for CVM selection

#### CAP (card capabilities)

The supported CVMs per AID for a Visa contactless profile are defined by Card Additional Processes (CAP).

| Bit mapping  | Description                                                 |
| ------------ | ----------------------------------------------------------- |
| Byte 3 bit 8 | 1b: Online PIN is supported for domestic transactions.      |
| Byte 3 bit 7 | 1b: Online PIN is supported for international transactions. |
| Byte 3 bit 5 | 1b: Signature is supported.                                 |
| Byte 3 bit 4 | 1b: CDCVM is supported.                                     |

#### TTQ (terminal capabilities)

The POS terminal uses Terminal Transaction Qualifier (TTQ) to indicate supported capabilities.

| Bit mapping  | Description                                   |
| ------------ | --------------------------------------------- |
| Byte 1 bit 3 | 1b: Online PIN is supported.                  |
| Byte 1 bit 2 | 1b: Signature is supported.                   |
| Byte 3 bit 7 | 1b: CDCVM is supported.                       |
| Byte 2 bit 7 | 1b: CVM is required (high-value transaction). |

#### “Commonly supported” CVM

A CVM is *commonly supported* when it is supported by both the card profile (CAP) and the terminal (TTQ).

{% hint style="info" %}
Visa documentation often refers to CDCVM as **Device CVM**.
{% endhint %}

### Online PIN priority <a href="#online_pin-priority" id="online_pin-priority"></a>

1. Check whether CVM is required (`TTQ Byte 2 bit 7 == 1b`).
   * If false, proceed as a low-value transaction.
   * If true, continue with step 2.
2. Check if `ONLINE_PIN` is commonly supported.
   * If true, continue payment processing using Online PIN.
   * If false, continue with step 3.
3. Check if `Device CVM` is commonly supported.
   * If true, continue payment processing using CDCVM.
   * If false, continue with step 4.
4. Check if `SIGNATURE` is commonly supported.
   * If true, continue payment processing using signature.
   * If false, no commonly supported CVM exists. The terminal may require POS verification or reject the transaction.

### CDCVM priority <a href="#cdcvm-priority" id="cdcvm-priority"></a>

1. Check if `Device CVM` is commonly supported.
   * If true, continue with step 2.
   * If false, continue with step 3.
2. Check if CAP supports CDCVM and if CVM is required (`TTQ Byte 2 bit 7 == 1b`).
   * If true, proceed to authenticate the high-value transaction.
   * If CAP supports CDCVM but CVM is not required (`TTQ Byte 2 bit 7 == 0b`), proceed with the low-value transaction.
   * If CAP does not support CDCVM, continue payment processing using `CARD_LIKE`.
3. Check whether CVM is required (`TTQ Byte 2 bit 7 == 1b`).
   * If false, proceed as a low-value transaction.
   * If true, continue with step 4.
4. Check if `ONLINE_PIN` is commonly supported.
   * If true, continue payment processing using Online PIN.
   * If false, continue with step 5.
5. Check whether `SIGNATURE` is commonly supported.
   * If true, continue payment processing using signature.
   * If false, no commonly supported CVM exists. The terminal may require POS verification or reject the transaction.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.payments.thalescloud.io/nfc-wallet-sdk-android/implement-nfc-wallet/make-payment/implement-contactless-payments/7.-configure-cdcvm-experiences/visa-cdcvm/visa-cvm-priority.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
