The Account Verification API introduces a new endpoint and updates existing payout and refund endpoints. It allows Third Party Providers (TPPs) to perform account verification and provide evidence of VoP validation for euro-zone based accounts.
Endpoint:
POST /account-verificationsPurpose:
Verify that a beneficiary account's name and account details (IBAN) match.
Reduce failed payouts/refunds and compliance risks by confirming account ownership.
Request Body Example (EUR Account):
{
"account": {
"name": "John Doe",
"iban": "GB33BUKB20201555555555",
"currency": "EUR"
},
"virtualAccountId": "pa:8DbPteGnytmMbKXdnWTReeRB6cYWKXZ84JgLTBC7fKL4:5zKcENpV"
}Possible Status Values:
MATCH: Full match confirmed.
CLOSE_MATCH: Partial match (e.g., slight name mismatch).
NO_MATCH: Account details and name do not match.
VERIFICATION_NOT_POSSIBLE: Unable to complete the check due to non response from underlying bank.
Response Examples:
Full Match:
{
"id": "avr-01K7H6CPPPAZ6JR456E9YRSJ2D",
"result": {
"status": "MATCH",
"reason": ["EXACT_MATCH"],
"details": "The account details match."
}
}Close Match:
{
"id": "VOP0000001",
"result": {
"status": "CLOSE_MATCH",
"reason": [
"NAME_MISMATCH"
],
"details": "The name provided is a close match.",
"matched": {
"name": "H. C. Andersen"
}
}
}No Match:
{
"id": "VOP0000001",
"result": {
"status": "NO_MATCH",
"reason": [
"ACCOUNT_MISMATCH",
"NAME_MISMATCH"
],
"details": "The account and name do not match."
}
}Verification not possible:
{
"id": "VOP0000001",
"result": {
"status": "VERIFICATION_NOT_POSSIBLE",
"reason": [
"UNKNOWN"
],
"details": "The check cannot be completed."
}
}You should securely store the accountVerificationId returned from the verification check, as it serves as the reference linking a verified account to subsequent payment operations.
While the ID remains valid indefinitely, it is required to generate a new
accountVerificationIdfor each new payout or refund to ensure the most accurate and up-to-date verification and align with VoP regulation.
Use the updated payout and refund endpoints, including the
accountVerificationIdfor EUR/IBAN-based accounts.The system validates the
accountVerificationIdand match status.Transactions with invalid IDs are rejected.
While the field is optional, it is strongly recommended for all Modulr-related refunds and payouts. This position may change in the future to be more restrictive.
The payout endpoint will now include the accountVerificationId parameter within the "creditor" object.
Sample Request
{
"initiation": {
"description": "e49j-2145-sp17-k3h0",
"refId": "9htio4a1sp2akdr1aa",
"onBehalfOfId": "c5a863bc-86f2-4418-a26f-25b24c7983c7",
"amount": {
"value": "10.23",
"currency": "EUR"
},
"debtor": {
"accountId": "a12345"
},
"creditor": {
"name": "Customer Inc.",
"ultimateCreditorName": "Customer Inc.",
"bankName": "string",
"iban": "GB29NWBK60161331926819",
"bic": "BOFIIE2D",
"accountNumber": "12345678",
"sortCode": 123456,
"accountVerificationId": "avr-01K7H6CPPPAZ6JR456E9YRSJ2D"
}
}
}The payout endpoint will now include the accountVerificationId parameter within the "initiation" object.
Sample Request
{
"initiation": {
"description": "e49j-2145-sp17-k3h0",
"refId": "9htio4a1sp2akdr1aa",
"amount": {
"value": "10.23",
"currency": "EUR"
},
"originalPaymentId": "c5a863bc-86f2-4418-a26f-25b24c7983c7",
"registrationId": "c5a863bc-86f2-4418-a26f-25b24c7983c7",
"localInstrument": "SEPA_INSTANT",
"onBehalfOfId": "c5a863bc-86f2-4418-a26f-25b24c7983c7",
"accountVerificationId": "avr-01K7H6CPPPAZ6JR456E9YRSJ2D",
"corporateApiDebtor": {
"accountId": "c5a863bc-86f2-4418-a26f-25b24c7983c7"
}
}
}| Step | Action | Outcome |
|---|---|---|
| Initiate Account Verification Check | Call POST /verification with account details | Receive accountVerificationId and match status |
| Store Verification ID | Securely store the accountVerificationId | Ensure ID is available for payout/refund requests |
| Execute Payout / Refund | Include accountVerificationId in requests | Validate ID and process transaction if valid |
| Handle Exceptions | Address failed or ambiguous verification results | Retry, escalate, or seek user confirmation |
Always include the currency field to ensure correct matching rules.
Handle partial matches (CLOSE_MATCH) with additional manual checks before payout.
Log error trace IDs from error responses for debugging and support from Token.
The sandbox environment allows you to test all four verification scenarios by providing specific inputs:
| Result | Name | IBAN |
|---|---|---|
| MATCH | Isabelle Marie Dubois | FR9317569000707197247234A34 |
| CLOSE_MATCH | Isabelle Marie | FR9317569000707197247234A34 |
| NO_MATCH | Jhon Nowak | FR9317569000707197247234A34 |
| VERIFICATION_NOT_POSSIBLE | TinTin | NL19INGB2128949858 |
If you have any feedback about the developer documentation, please contact devdocs@token.io