Overview
Cardholder Name Verification (ANI) is a Nuvei service that checks whether the name provided by a customer matches the cardholder name on file with the card issuer. This additional security step is performed during card onboarding and pre-transaction checks (when amount = 0), to help merchants reduce fraud and scams in card-not-present (CNP) transactions and push/pull payments. A use case could be that an eCommerce merchant performs cardholder name verification ad-hoc to enhance security.
Enabling Cardholder Name Verification (ANI)
To enable cardholder name verification, a merchant must contact Nuvei’s Integration Team.
Implementation
Cardholder name verification (ANI) is supported via Nuvei’s REST API 2.0 methods:
/payments – For zero-authorization transactions (amount = 0, transactionType = Auth).
Request Structure
To perform name verification, include the following in your /payments request:
- nameVerification object:
enable: true
- buyerDetails object:
firstName(string,30)middleName(string,40)lastName(string,40)
Example /payments Zero-Auth Request (Non-3DS)
{
"processingEntityId": "<your processingEntityId>",
"amount": 10.5,
"currency": "USD",
"transactionType": "Sale",
"paymentOption": {
"store": "buyerToken",
"card": {
"cardNumber": "5101081046006034",
"cardHolderName": "John Smith",
"expirationMonth": "10",
"expirationYear": "2026",
"cvv": "345"
}
},
"custom": {
"description": "Some description"
},
"deviceDetails": {
"ipAddress": "<customer's IP address>",
"browser": {
"acceptHeader": "Y",
"userAgent": "…",
"javaEnabled": "true",
"language": "en-US",
"colorDepth": "24",
"screenHeight": "1080",
"screenWidth": "1920",
"timeZone": "0",
"javaScriptEnabled": "true"
}
},
"nameVerification": {
"enable": true
},
"buyerDetails": {
"buyerId": "<unique customer identifier>",
"firstName": "John",
"middleName": "Big",
"lastName": "Smith",
"companyName": "Nuvei Corp",
"dateOfBirth": "1978-06-27",
"email": "[email protected]",
"phone": "6175551414",
"billingAddress": {
"address": "22 Main Street",
"zip": "02460",
"city": "Boston",
"countryCode": "US",
"phone": "6175551414",
"addressMatch": "true"
},
"shippingAddress": {
"sameAsBilling": "true",
"address": "22 Main Street",
"zip": "02460",
"city": "Boston",
"countryCode": "US",
"phone": "6175551414"
}
}
}
Response Structure
The response could include the following:
nameVerification.result: Indicates the overall result of the name verification.notPerformed: Verification not performednotSupported: Verification not supportedmatch: Name matchesnoMatch: Name does not matchpartialMatch: Partial matchunverified: Unable to verify
nameVerification.firstName/middleName/lastName: Indicates the result for each name component (match, noMatch, partialMatch, unverified).
Example /payments Zero-Auth Response (Non-3DS)
{
"paymentId": "375011",
"transactionId": "2110000000010964089",
"externalTransactionId": "211010964089",
"amount": 10.5,
"currency": "USD",
"transactionType": "Sale",
"result": {
"status": "approved"
},
"authCode": "300250",
"partialApproval": {
"requestedAmount": 10.5,
"requestedCurrency": "USD"
},
"nameVerification": {
"result": "match",
"firstName": "match",
"middleName": "match",
"lastName": "match"
},
"paymentOption": {
"card": {
"cardHolderName": "John Smith",
"maskedCardNumber": "5****6034",
"bin": "523233",
"last4Digits": "6034",
"expirationMonth": "10",
"expirationYear": "2026",
"acquirerId": "99",
"cardType": "Credit",
"cardBrand": "MASTERCARD",
"paymentTokenId": "b058c947-011d-4695-969a-3d6dae9a1d91"
}
}
}
Response Examples for Key Result Use Cases
The following use case examples show how the API response may appear for important verification outcomes. Merchants can use the use case examples to understand and handle different scenarios in an integration.
Use Case: Verification not performed
This result means the cardholder name verification was not executed for the transaction (the issuer or scheme does not support the verification or the request is not eligible).
Example Response
{
"nameVerification": {
"result": "notPerformed"
}
}
Use Case: Partial match with component results
The result means the overall name verification is a partial match and that the response provides details for each name component.
Example Response
{
"nameVerification": {
"result": "partialMatch",
"firstName": "match",
"middleName": "noMatch",
"lastName": "match"
}
}
Summary Table of Results Handling
| Result Value | Description |
|---|---|
| notPerformed | Verification not executed |
| notSupported | Verification not supported |
| match | All name components matched |
| noMatch | Name did not match |
| partialMatch | Some components matched, some did not |
| unverified | Unable to verify |
Webhooks
Webhooks include name verification fields in the payloads, allowing a merchant to automate workflows based on verification results.
Errors
If you send non-Latin characters, the REST API returns the following error:
{
"result": {
"status": "error",
"errors": {
"code": "5000.10097",
"reason": "Non-Latin characters are not supported for Cardholder Name Verification"
}
}
}
If lastName is missing, the REST API returns the following error:
{
"result": {
"status": "error",
"errors": {
"code": "14.10096",
"reason": "Card Holder Last Name is mandatory for Name Verification!"
}
}
}