Name and age verification before payment
You can choose not to receive payments in your account if they don't meet certain age or name requirements.
You can enable name and age verification for single payments to your merchant account. TrueLayer can screen the name or date of birth of payers before a closed-loop pay-in settles in your merchant account. If the payer's name provided in the user
parameter doesn't match the remitter's account details, or they're under 18, the payment is sent back to the user.
This can be useful for businesses that need to check a user's age or name before accepting payments, such as pharmaceuticals or igaming.
With this enabled, payments settle in a suspense account that TrueLayer owns. They are then checked to ensure the name on the account matches your user, or that they're over 18 years old. If the check is successful, the payment is forwarded to your merchant account.
This is an optional feature. If you're interested in enabling pre-settlement verification, please contact us or speak with your integration partner.
Age verification is part of Signup+
Age-based verification is a part of TrueLayer's Signup+ product. Please contact us if you would like to enable or test this.
How verification works
Before a payment from the user moves into your account, the money settles in a TrueLayer intermediary account. While in the intermediary account, TrueLayer checks the information associated with the user's bank account.
Because the check takes place while the money is in the TrueLayer intermediary account, there is no risk that a fraudulent payment (or a payment from an underage customer) will touch a bank account that you own. This reduces your liability and removes the need to manually screen and refund payments.
You can only use automatic payment verification for name or date of birth for each payment, not both.
How to add verification to a payment
Before you can enable verification, you need to contact TrueLayer so it can be enabled for your merchant account. If TrueLayer hasn't enabled verification, adding it to a payment has no effect.
Verification is added for each payment as part of the beneficiary
object in the payment creation request. Verification is only available for pay-ins to a merchant account, which have a value of merchant_account
for the beneficiary.type
object.
This table shows the objects you should complete when you enable verification and their possible values. You should only complete and provide either one of beneficiary.remitter_name
or beneficiary.remitter_date_of_birth
, as you can only verify based on one criterion for each payment.
Object in payment request | Type | Possible values and result |
---|---|---|
beneficiary.type | String | automated : You must provide this value to enable verification for a payment. |
beneficiary.remitter_name | Boolean | true : The Payments API checks that the user.name object matches the name associated with the remitter's payment account.false : The Payments API doesn't perform a name check. |
beneficiary.remitter_date_of_birth | Boolean | true : The Payments API checks the date of birth associated with the remitter's payment account is over 18 years old.false : The Payments API doesn't check the remitter's date of birth. |
In these two example payments, verification is enabled for remitter_name
and remitter_date_of_birth
. This means that the Payments API checks that:
- The remitter's name matches the one associated with the bank account for the first payment.
- The remitter is over 18 years old for the second payment.
{
"amount_in_minor": 30000,
"currency": "GBP",
"payment_method": {
"provider_selection": {
"type": "preselected",
"scheme_selection": {
"type": "user_selected",
"allow_remitter_fee": false
},
"provider_id": "mock-payments-gb-redirect",
"remitter": {
"account_holder_name": "John Sandbridge",
"account_identifier": {
"type": "sort_code_account_number",
"sort_code": "040668",
"account_number": "00000871"
}
}
},
"type": "bank_transfer",
"beneficiary": {
"type": "merchant_account",
"verification": {
"type": "automated"
"remitter_name": true
},
"merchant_account_id": "200552da-13da-43c5-a9ba-04ee1502ac57"
}
},
"user":
{
"id": "f61c0ec7-0f83-414e-8e5f-aace86e0ed35",
"name": "Jonathan Sandbridge",
"email": "[email protected]",
"phone": "+447809123456",
"date_of_birth": "1992-11-28",
"address":
{
"address_line1": "40 Finsbury Square",
"city": "London",
"state": "London",
"zip": "EC2a 1PX",
"country_code": "GB"
}
}
}
POST /v3/payments HTTP/1.1
Content-Type: application/json
Idempotency-Key: {RANDOM_UUID}
Tl-Signature: {SIGNATURE}
Authorization: Bearer {ACCESS_TOKEN}
Host: api.truelayer-sandbox.com=
{
"amount_in_minor": 30000,
"currency": "GBP",
"payment_method": {
"provider_selection": {
"type": "preselected",
"scheme_selection": {
"type": "user_selected",
"allow_remitter_fee": false
},
"provider_id": "mock-payments-gb-redirect",
"remitter": {
"account_holder_name": "John Sandbridge",
"account_identifier": {
"type": "sort_code_account_number",
"sort_code": "040668",
"account_number": "00000871"
}
}
},
"type": "bank_transfer",
"beneficiary": {
"type": "merchant_account",
"verification": {
"type": "automated"
"remitter_date_of_birth": true
},
"merchant_account_id": "200552da-13da-43c5-a9ba-04ee1502ac57"
}
},
"user":
{
"id": "f61c0ec7-0f83-414e-8e5f-aace86e0ed35",
"name": "Jonathan Sandbridge",
"email": "[email protected]",
"phone": "+447809123456",
"date_of_birth": "1992-11-28",
"address":
{
"address_line1": "40 Finsbury Square",
"city": "London",
"state": "London",
"zip": "EC2a 1PX",
"country_code": "GB"
}
}
}
The results of payment verification
Payment verification occurs after the user authorises a payment, and before it reaches your account. This means minimal processing is required by you.
If a payment:
- passes verification, it arrives in your account with the
settled
status. - fails verification, it fails with a status of
failed
and afailure_reason
ofverification_declined
.
Using age-based verification with a Signup+ payment
You can use age-based verification with Signup+. If you want to do this, ensure that you include the signup_plus
as a related_product
when you create the payment.
Although Signup+ returns a user's date of birth, using age-based verification ensures that payments from users under 18 years old are rejected before they settle in your merchant account.
payment_creditable
notifications
payment_creditable
notificationsWe strongly recommend that you use payment_creditable
webhooks alongside name and age verification for a payment. This feature enables you to change the point at which you consider a payment to be complete. For example, you can enable an age-verified deposit to be considered creditable on the executed
status and decrease customer wait times.
Learn how to configure payment_creditable
webhooks.
Test payment verification in sandbox
In order to test payment verification in sandbox, you must contact us so we can enable the feature.
Age-based verification
If you add age-based verification to a payment, the value of the amount_in_minor
parameter in your payment creation request changes whether the verification succeeds or fails. Use the following values to test different scenarios:
Value of amount_in_minor | Signup+ response | Response type |
---|---|---|
Less than 1800 | Age not legal | Error |
1800 to 10000 | Identity data found | Success |
10000 to 25000 | Joint accounts not supported | Error |
Greater than 25000 | User data not found | Error |
Name-based verification
In sandbox, you can only test remitter name verification, which should match the name of the sandbox user: John Sandbridge
.
Effect on payment statuses
Payments that use verification execute and settle in a TrueLayer account, and are only sent to your merchant account if they pass verification. This means that payments with verification enabled can transition from a status of executed
to failed
.
If a payment with verification transitions from executed
to failed
, the payment has a failure_reason
of verification_declined
.
Change the strictness of name-based verification
When you use name verification for a payment, we preprocess the account holder name provided from the remitter's bank for consistency. We then apply a name matching algorithm based on the Levenshtein distance. This distance refers to how many single characters you would have to add, change, or remove to transition from one string to another.
You can configure how close a match you want between the name provided and the account holder name from the remitter's bank. Contact us if you want to change the strictness of the name matching algorithm.
Updated about 1 month ago