Send VOP requests

Learn how to send VOP requests using Mambu Payments (formerly Numeral)

Send a Verification of Payee (VOP) request to check whether a payee's name matches their account details before initiating a payment.

How it works

  1. You send a VOP request to Mambu Payments with the payee's name (or organisation identifier) and IBAN.
  2. Mambu Payments looks up the responding PSP in the EPC Directory Service.
  3. Mambu Payments forwards the request to the responding PSP.
  4. The responding PSP compares the payee details and returns a matching result.
  5. Mambu Payments returns the result in the API response and sends an event to your webhook.
sequenceDiagram
    participant You as Requesting PSP
    participant MP as Mambu Payments
    participant PSP as Responding PSP

    You->>MP: POST /payee_verification_requests
    activate MP
    Note over MP: Look up responding PSP
    MP->>PSP: Forward request
    activate PSP
    PSP->>MP: Return matching result
    deactivate PSP
    MP->>MP: Update request status
    MP->>MP: Create event
    MP->>You: Return response
    MP-->>You: Send event to webhook
    deactivate MP

Send a request

Submit a POST request to /payee_verification_requests with the payee's identification and account number.

Verify by name and IBAN (natural or legal persons):

POST /payee_verification_requests

{
  "scheme": "vop",
  "payee_identification_type": "name",
  "payee_identification": "Jean Dupont",
  "payee_account_number": "FR5012739000308682265435N36"
}

Verify by organisation identifier and IBAN (legal persons only):

POST /payee_verification_requests

{
  "scheme": "vop",
  "payee_identification_type": "eu_vat",
  "payee_identification": "FR56355877394",
  "payee_account_number": "FR5012739000308682265435N36"
}

Handle the response

The response includes a matching_result field with one of four values. Handle each result in your integration.

match

The payee's name matches the account records. Proceed with the payment.

{
  "object": "payee_verification_request",
  "id": "c52abc4b-9e88-4c19-8972-cfe428341ef2",
  "status": "completed",
  "direction": "outgoing",
  "scheme": "vop",
  "request": {
    "payee_type": null,
    "payee_identification_type": "name",
    "payee_identification": "Jean Dupont",
    "payee_account": "FR5012739000308682265435N36",
    "additional_information": null,
    "requesting_agent_bank_code": "BANKFRPPXXX",
    "responding_agent_bank_code": "BANKITPPXXX"
  },
  "matching_result": "match",
  "payee_suggested_name": null,
  "matching_details": null,
  "scheme_data": {
    "scheme_request_id": "c3d79e5a-2058-4301-8b36-353cb9eb0ca5",
    "request_timestamp": "2025-01-26T13:51:10Z",
    "response_timestamp": "2025-01-26T13:51:15Z"
  },
  "response_received_at": "2025-01-26T13:51:16Z",
  "created_at": "2025-01-01T12:00:00Z"
}

close_match

The payee's name is similar but not identical. The payee_suggested_name field contains the name on file. Present the suggested name to the payer and let them decide whether to proceed.

{
  "object": "payee_verification_request",
  "id": "c39d1eff-c5ed-4197-8f24-28a68bd0eee6",
  "status": "completed",
  "direction": "outgoing",
  "scheme": "vop",
  "request": {
    "payee_type": null,
    "payee_identification_type": "name",
    "payee_identification": "Jean Dupont",
    "payee_account": "FR5012739000308682265435N36",
    "additional_information": null,
    "requesting_agent_bank_code": "BANKFRPPXXX",
    "responding_agent_bank_code": "BANKITPPXXX"
  },
  "matching_result": "close_match",
  "payee_suggested_name": "Jean Dupond",
  "matching_details": null,
  "scheme_data": {
    "scheme_request_id": "c3d79e5a-2058-4301-8b36-353cb9eb0ca5",
    "request_timestamp": "2025-01-26T13:51:10Z",
    "response_timestamp": "2025-01-26T13:51:15Z"
  },
  "response_received_at": "2025-01-26T13:51:16Z",
  "created_at": "2025-01-01T12:00:00Z"
}

no_match

The payee's name does not match. Warn the payer and consider blocking the payment.

{
  "object": "payee_verification_request",
  "id": "d6560dcb-e0c9-414d-bd65-6cf54a5338f5",
  "status": "completed",
  "direction": "outgoing",
  "scheme": "vop",
  "request": {
    "payee_type": null,
    "payee_identification_type": "name",
    "payee_identification": "Jean Dupont",
    "payee_account": "FR5012739000308682265435N36",
    "additional_information": null,
    "requesting_agent_bank_code": "BANKFRPPXXX",
    "responding_agent_bank_code": "BANKITPPXXX"
  },
  "matching_result": "no_match",
  "payee_suggested_name": null,
  "matching_details": null,
  "scheme_data": {
    "scheme_request_id": "c3d79e5a-2058-4301-8b36-353cb9eb0ca5",
    "request_timestamp": "2025-01-26T13:51:10Z",
    "response_timestamp": "2025-01-26T13:51:15Z"
  },
  "response_received_at": "2025-01-26T13:51:16Z",
  "created_at": "2025-01-01T12:00:00Z"
}

impossible_to_match

The responding PSP could not perform the comparison. This may indicate a temporary issue. Decide whether to proceed, retry, or block the payment based on your risk policy.

{
  "object": "payee_verification_request",
  "id": "8c209eda-a473-46df-b83c-b14238337bad",
  "status": "completed",
  "direction": "outgoing",
  "scheme": "vop",
  "request": {
    "payee_type": null,
    "payee_identification_type": "name",
    "payee_identification": "Jean Dupont",
    "payee_account": "FR5012739000308682265435N36",
    "additional_information": null,
    "requesting_agent_bank_code": "BANKFRPPXXX",
    "responding_agent_bank_code": "BANKITPPXXX"
  },
  "matching_result": "impossible_to_match",
  "payee_suggested_name": null,
  "matching_details": null,
  "scheme_data": {
    "scheme_request_id": "c3d79e5a-2058-4301-8b36-353cb9eb0ca5",
    "request_timestamp": "2025-01-26T13:51:10Z",
    "response_timestamp": "2025-01-26T13:51:15Z"
  },
  "response_received_at": "2025-01-26T13:51:16Z",
  "created_at": "2025-01-01T12:00:00Z"
}

Test in sandbox

Simulate outgoing VOP requests using pre-defined test scenarios. The spreadsheet lists payee account numbers, identification types, and identifications that return specific matching results. Mambu Payments replies automatically with the corresponding pre-defined response.

Related