In a payout scenario, as a Requesting PSP, Mangopay will be carrying out VOP checks on recipients and payouts and returning the result in the API response.Documentation Index
Fetch the complete documentation index at: https://docs.mangopay.com/llms.txt
Use this file to discover all available pages before exploring further.
Scope
VOP applies to EUR Recipients and Payouts using SCT or SCT Inst. In terms of Recipient properties, this means:CurrencyisEURPayoutMethodisLocalBankTransferCountryis a SEPA country
Note – VOP on Recipients available for all platformsThe VOP checks on Recipients are available for all platforms for anti-fraud purposes.If your platform offers User-Owned Accounts to your users, their payouts are also impacted by VOP and may be blocked.
VOP result API fields
The following endpoints return the Verification of Payee information in the API response:- POST Create a Payout, if the owner of the payout’s
RecipientIdorBankAccountIdhas at least one User-Owned Virtual Account - POST Create a Recipient (for all platforms)
- GET View a Recipient (for all platforms)
RecipientVerificationOfPayee, containing:
RecipientVerificationId– A unique identifier of the VOP check performed by Mangopay.RecipientVerificationCheck– The outcome of the VOP check performed by Mangopay, using the details in the Recipient object.RecipientVerificationMessage– The explanation of the check outcome.
VOP data in API response
| Check result | Check message | Scenario | Recommendation |
|---|---|---|---|
MATCH | Account name fully matches account identifier. | The account is valid and the account name matches the IBAN. | Proceed with the payout or recipient. |
CLOSE_MATCH | Account name partially matches account identifier. Name returned by check: FirstName LastName. Payment made to this account may not reach its intended counterparty. | The account is valid but the name doesn’t match exactly. | Confirm details with your user before proceeding. Reregister the Recipient if required. |
NO_MATCH | Account name does not match account identifier. Payment made to this account may not reach its intended counterparty. | This account likely belongs to a different owner. | Do not proceed until you confirm the account details with the user. |
MATCH_NOT_POSSIBLE | Temporary result: Verification of payee check in progress | The VOP check is ongoing (see below). | Retrieve final check result and message later using GET View a Recipient or GET View a Payout. |
Final result: Account name could not be verified. Payment made to this account may not reach its intended counterparty. | Responding PSP’s verification service is unreachable. The check could not be completed. | Proceed only after confirming the account details with the user. |
Temporary result for asynchronous processing
Mangopay may temporarily returnMATCH_NOT_POSSIBLE accompanied by the message Verification of payee check in progress and with an empty RecipientVerificationId. For example:
Non-final VOP result
- A definitive
RecipientVerificationCheckvalue (MATCH,CLOSE_MATCH, orNO_MATCH) with its accompanying message - The final
MATCH_NOT_POSSIBLEmessage:Account name could not be verified. Payment made to this account may not reach its intended counterparty.
Implementation recommendations
- Retrieve and display the
RecipientVerificationCheckandRecipientVerificationMessageto your users. These data points are both returned in theRecipientVerificationOfPayeeobject on GET View a Recipient, POST Create a Recipient, and POST Create a Payout. - Check the VOP result of Recipients using GET View a Recipient before initiating payouts, to avoid funds being sent to the wrong account.
Recipients
Mangopay performs a VOP check on the endpoints: VOP is only performed on Recipients where:CurrencyisEURPayoutMethodisLocalBankTransferCountryis a SEPA country
The GET View a Recipient and POST Create a Recipient endpoints return the VOP result in the
RecipientVerificationOfPayee parameter of the API response:
API response - 200 OK
Id as the RecipientId path parameter.
Payouts
Mangopay is introducing VOP checks when your platform requests a payout using POST Create a Payout only if the owner of the payout’sBankAccountId has at least one User-Owned Virtual Account.
Note – VOP only performed on payouts from users with User-Owned AccountsOn POST Create a Payout, the VOP check is only performed if the user has a User-Owned Virtual Account. If not, or if the payout does not use the SCT or SCT Inst rails, then VOP is not performed.The user must have at least one User-Owned Virtual Account from any of their wallets, not necessarily the one from which the payout is requested.
The steps are as follows:
- Your platform calls POST Create a Payout.
- Mangopay performs Verification of Payee (VOP) using the associated Recipient or Bank Account data (reference in the
BankAccountId) by checking the IBAN and account holder name with the Responding PSP (which is the Payee’s bank). - Mangopay returns the VOP result in the API response (which may be a temporary result).
- Mangopay proceeds with the payment, unless it is blocked as described in the scenarios below.
Payout scenarios
Match or close match
When Mangopay performs the VOP check with the Responding PSP, if the result isMATCH or CLOSE_MATCH, then the payout request continues.
The POST Create a Payout endpoint returns an HTTP 200 result containing the
RecipientVerificationOfPayee fields:
API response - 200 OK
No match or match not possible
If the final result of the VOP check isNO_MATCH or MATCH_NOT_POSSIBLE, then the behavior depends on whether or not your platform has signed the VOP contract amendment. The VOP contract amendment is only applicable to platforms that offer User-Owned Accounts to their users, and payout VOP checks are only performed for these platforms.
If amendment signed
If the amendment is signed, the payout continues and the
NO_MATCH or MATCH_NOT_POSSIBLE result is returned in the RecipientVerificationOfPayee object.
This behavior can serve as a warning to your platform or the user. The NO_MATCH result means that payment may not reach its intended payee, and your platform should inform the user accordingly. In these cases, the user should check their account details and re-register the Recipient if necessary.
If amendment not signed
If the amendment is not signed, then the payout fails if the final VOP result is
NO_MATCH or MATCH_NOT_POSSIBLE.
While the POST Create a Payout endpoint may return a 200 OK response, the payout subsequently fails with the ResultCode 121030 – Verification of Payee failed: account name and IBAN do not match. Please provide matching details to proceed with the payout.
Note – Block only applies to UO account holdersThe block is only applied to users who hold a User-Owned Account. For these users, all payouts are blocked regardless of which wallet they are debited from (determined by the owner of the payout’s
BankAccountId).The block also only applies to EUR payments via SCT and SCT Inst.Payouts authored by users without User-Owned Accounts will not be VOP checked and therefore not be blocked because of VOP.On Recipients, VOP checks are applied and available to all platforms, regardless of whether they offer User-Owned Accounts or not.Testing
In Sandbox, Mangopay provides testing data to allow you to simulate different VOP results when you call POST Create a Recipient.Note – You must use test data to simulate VOP checkMangopay does not perform VOP checks in Sandbox, so you must use the test IBANs and account names below to simulate the different responses.In Sandbox, any Recipient (or legacy Bank Account) created with a different IBAN and account holder name combination always returns
MATCH_NOT_POSSIBLE, and the RecipientVerificationId is null, indicating that the check was not attempted.Tip - Try in PostmanMangopay’s Sandbox API collection contains a dedicated Recipients VOP testing folder with the VOP testing data ready for you to see how it works. For more about setting up your Postman environment, see the Postman guide.
FR business recipient
| IBAN | BusinessName | VOP result |
|---|---|---|
FR7630001007941234567890185 | EuroCorp | MATCH |
EuroCarp | CLOSE_MATCH | |
| Any other value | NO_MATCH |
LocalBankTransfer payout method with the Country set to FR and the Currency in EUR.
API request
API response
DE individual recipient
| IBAN | FirstName | LastName | VOP result |
|---|---|---|---|
DE75512108001245126199 | John | Doe | MATCH |
John | Dae | CLOSE_MATCH | |
| Any other value | Any other value | NO_MATCH |
LocalBankTransfer payout method with the Country set to DE and the Currency in EUR.
Follow the examples below.
API request
API response
Technical error cases
The following IBANs allow you to simulate error cases with any account holder name.| IBAN | VOP result | Description |
|---|---|---|
FR1420041010050500013M02606 | MATCH_NOT_POSSIBLE | Simulates a technical error. A RecipientVerificationId value is returned, which generally indicates that Mangopay was able to attempt the check but that a technical error occurred. |
FR7630006000011234567890189 | MATCH_NOT_POSSIBLE | Simulates a PSP not responding, with delayed response. The RecipientVerificationId is null, which generally indicates that Mangopay was not able to attempt the check. |
View a Recipient
If you use the testing data above, the GET View a Recipient returns the VOP check that was performed at creation, with the sameRecipientVerificationId.
Otherwise, in Sandbox, the GET View a Recipient for a legacy Bank Account or Recipient created before VOP always returns:
Recipient or Bank Account not using test data
Payouts
If you use the testing data above, the POST Create a Payout returns the VOP check that was performed at recipient creation, with the sameRecipientVerificationId.
Otherwise, in Sandbox, the POST Create a Payout returns a nulled object:
Payout created with Recipient not using test data