Name validation allows you to verify if the cardholder name provided by a shopper matches the cardholder name on file at the issuing bank. The service is offered by Visa and Mastercard, and requires you to pay a fee for each transaction where name validation is performed.
You can request this validation with a zero-value auth transaction to:
- Reduce fraud and chargeback losses.
- Comply with Know Your Customer (KYC) requirements.
- Improve the reliability of payouts by making sure funds are sent to the right person.
Requirements
Before you begin, take into account the following requirements, limitations, and preparations.
| Requirement | Description |
|---|---|
| Integration type | An online payments integration using the Advanced flow with Checkout API v69 or later. |
| API credential roles | You need an API credential with an API key and the Checkout webservice role. |
| Limitations | This feature is dependent on issuer readiness, and is only supported for:
|
How it works
Learn more
Our name validation feature uses the validation services offered by card schemes.
To validate a cardholder's name:
- You make a /payments request for a zero-value auth transaction. In the request, you include the cardholder's name and the
paymentValidationsobject to request a name validation. - Adyen forwards the validation request to Visa or Mastercard.
- The cardholder's issuing bank checks if the name the shopper provided matches the name they have on file.
- Adyen receives the result and forwards it to you in the
paymentValidationsobject within the synchronous API response. - You monitor the
resultobject to get the outcome of the name validation. - You build your own logic based on the validation outcome. For example, depending on the match results, you can proceed to authorize the payment or request additional verification.
We are working on expanding the paymentValidations field with support for additional validation types, such as the Address Verification System. We recommend you prepare your implementation to handle new verification objects that will be introduced in paymentValidations.
Request a name validation
To request a name validation, use your online payments integration to make a /payments request, and include:
| Field | Description |
|---|---|
amount.value |
The transaction amount. Set to 0 when performing a name validation. |
paymentMethod |
The payment details. For cards, set type to scheme, and send the encrpyted card fields. If you are fully PCI compliant, send the unencrypted card fields. |
| shopperName | The name of the cardholder, consisting of firstName and lastName. If you do not include this field when requesting a name validation, we will fallback to the paymentMethod.holderName. |
paymentValidations.name.status |
Set to requested to request a name validation. |
Apple Pay and Google Pay do not return the shopper name. For these payment methods, you must build your own logic to pass the details your shopper enters at checkout from your front-end to the /payments request.
The following example shows how to request a name validation for John Smith.
Fallback logic
If you do not include the shopperName when requesting a name validation, we use the paymentMethod.holderName field to populate the shopper name fields. We take the characters until the first space or period(.) to populate the first name.
To ensure accuracy and get the best validation results, we strongly recommend to include the shopperName field instead of relying on the paymentMethod.holderName fallback.
Validation results
When you make a /payments request to validate a cardholder's name, Adyen forwards the information you provide to the schemes to perform the name validation. The API response includes:
Status
The paymentValidations.name.status field in the response informs you if name validation was performed. For Visa, you also receive the raw status value that Adyen receives in the paymentValidations.name.rawResponse.status field. Mastercard does not return a rawResponse.status.
Adyen status values |
Description | Visa rawResponse.status values |
|---|---|---|
| performed | Name validation was performed. | 00 |
| notPerformed | Name validation was not performed. | 01 |
| notSupported | Name validation is not supported by the issuer for this card, you will not be charged for name validation. | 02 |
Outcome
The paymentValidations.name object in the response includes the following objects that inform you of the name validation results.
result: the scheme-agnostic match values returned by Adyen.rawResponse: the raw response(s) we receive from the scheme.
For example, theresult.fullNamecontains the Adyen value, andrawResponse.fullNamecontains the value we received from Visa or Mastercard.
For Visa, the response includes match values for the full name, along with first name, middle name, and last name. For Mastercard, the response only includes the full name match value.
The match value for the full name is determined by combining the match results for the first, middle, and last name. The logic to determine the outcome of this combination is built and maintained by schemes, and is not transparent to Adyen.
Adyen result values |
Visa rawResponse values |
Mastercard rawResponse values |
Description |
|---|---|---|---|
| match | 01 | A | The name matches the name on file at the issuing bank. |
| partialMatch | 50 | B | The name partially matches the name on file. For example, the first name matches but the last name does not, or there is a typo. |
| noMatch | 99 | C | The name does not match the name on file. |
The following response examples show the name validation responses for Visa and Mastercard.
Testing
To test different name validation responses and match results:
-
In your test /payments request, request a name validation.
-
Use our Visa and Mastercard test cards.
-
Set the
shopperNamefield to the following test shopper names to test different match statuses. If you do not provide the name in this field, we fall back to the holder name you provide in thepaymentMethodobject.Match status First name Middle name Last name Match John Maria Smith Partial match Jon Mariah Smyth No match Alice Peter Brown Keep in mind that the logic to determine the full name match is based on the combination of the first, middle, and last name values are maintained by the schemes and not transparent to Adyen. The following section shows some example test scenarios and the results they are expected to trigger per scheme.
-
Test that your implementation correctly handles the match statuses you receive in the name validation outcome.
The following table contains example scenarios and the results they are expected to trigger per scheme.
Test the unhappy flow
To trigger the scenario where name validation is not supported, or not performed:
- In your test /payments request, request a name validation.
- Use our Visa and Mastercard test cards.
- To test the scenario where the name validation is not performed, use any combination of the test shopper name values and set the
referenceto NotPerformed. - To test the scenario where name validation is not supported, use any combination of the test shopper name values and set the
referenceto NotSupported.
Alternatively, you can also use a shopper name that's not part of the test shopper names. - Test that your integration can correctly handle scenarios where name validation is not successful.
For example, if you set the reference to NotSupported, with any combination of the test shopper names, the response will contain:
paymentValidations.name.status: notSupported- Only for Visa,
paymentValidations.name.rawResponse.status: 02