The Verification of Payee API
One real-time REST call to confirm a payee name against an IBAN - match outcome, responding bank BIC and processing time in the response. Built on RoxPay's payments platform and the SEPA VoP scheme.
{ "Name": "ACME Trading Ltd", "Iban": "DE89 3704 0044 0532 0130 00" }
{ "VopResult": "MATCH", "MatchType": "MTCH", "RespondingBic": "CRACIT33XXX" }
Payee verification in a single request
The Verification of Payee API exposes the SEPA VoP scheme as a clean REST endpoint: send a name and an IBAN, get back a standardised match result in real time - no scheme plumbing to build yourself.
In practice, you call it at the moment a payee is created or a payment is about to leave: a checkout, a supplier record, a payout instruction. The response arrives synchronously, so you can show the payer the verified name - or stop the payment - before it is sent.
It is the same verification RoxPay runs inside its SwiftLine / RoxBusiness banking platform, available to banks, PSPs and businesses through an authenticated API and a dashboard. Each response includes the match type, the responding institution's BIC and the PSP processing time.
Because it is delivered over RoxPay's European open-banking infrastructure, you connect once and reach payee verification across SEPA - instead of integrating with each responding bank.
If you are looking for a Confirmation of Payee API, this is the same check under the European name: Confirmation of Payee (CoP) is the UK scheme, Verification of Payee (VoP) is the EPC scheme used across the EU and SEPA. The request and the four outcomes are the same idea, so teams that already handle CoP recognise the contract immediately.
In short: it is one authenticated REST endpoint. You POST a payee name and an IBAN, you get back a match outcome, the SEPA scheme code, the responding bank's BIC and the processing time. There is no session to keep, no callback URL to host and no per-bank integration to build.
How to integrate the Verification of Payee API into your payment workflow
A standard REST integration that drops into your existing payment flow - from credentials to a live check in five steps.
Get your credentials
Activate the service and authenticate with a bearer token - no per-bank onboarding to manage.
Send name + IBAN
POST the payee name and IBAN to the verify endpoint, optionally with your own reference id for reconciliation.
Read the result
Receive the outcome (match / close match / no match / not applicable), the responding BIC and the processing time.
Branch on the outcome
Proceed on MATCH, show the suggested name and ask for confirmation on CLOSE_MATCH, block auto-approval on NO_MATCH, let the payer decide on NOT_APPLICABLE.
Act in your UI
Show a clear signal to the payer, or gate a payment run, a mandate or an onboarding step on the result.
Where the call sits in a real payment workflow
The endpoint is stateless, so the same call fits every step where a payee's details are captured or reused - including verifying payees at onboarding and again at payout time.
Payee onboarding
Verify a seller, supplier or employee IBAN the moment it is added, and store the verified name next to the record.
Checkout & one-off payments
Call the API while the payer is still on screen, so a mismatch is caught before authorisation.
Payment run & bulk payouts
Loop the file and verify every beneficiary before releasing the batch, then hold back only the exceptions.
Re-check before payout
Verify again immediately before money moves - bank details that changed after onboarding are where redirection fraud hides.
How to use the API for real-time account verification
A synchronous request/response contract, so the answer is available while the payer is still deciding.
Synchronous by design
The verify call returns in the same request - typically well under a second - so no polling, webhooks or queue is needed.
Timing in the response
Each response carries the PSP processing time, so you can monitor latency and alert on it like any other API.
Built for instant payments
The check fits inside the SEPA instant payment window, so verification never becomes the reason a payment is late.
Idempotent retries
Pass a stable external id with each call so a retry does not create a duplicate verification and every result is traceable.
One call, one answer
Real-time account verification is simply POST name + IBAN and read the result: no session, no callback URL and no state to keep between calls.
Bulk beneficiary checks without hitting rate limits
For payout files with thousands of beneficiaries, verification is a per-record call you pace yourself - so a large file is a throughput question, not a blocker.
One call per record
Loop your beneficiary file and call the verify endpoint for each payee - the contract is the same whether you send one record or ten thousand.
Throughput sized with you
The API is built for high throughput and you pace the loop to your own release window, rather than being capped by per-bank onboarding.
Collect, then release
Gather the outcomes for the whole file, auto-release the matches and route close matches and no matches to a human review queue.
Reuse the verified name
Store the verified account-holder name on the payee record so later runs can compare against it and flag silent changes.
Marketplaces, payroll and accounts payable
The same endpoint covers onboarding and payout time - the two moments where payee details are most exposed.
Marketplaces & platforms
Verify a seller's IBAN when they onboard, then verify again before each payout. Re-checking at payout catches bank details changed after onboarding, which is where payout redirection fraud usually happens. The same endpoint serves both moments, so you do not need a separate onboarding check and payout check.
Payroll
Verify employee IBANs when they are added and again before payday, so a salary is never sent to an account that no longer belongs to the employee.
Accounts payable
Mass-validate supplier IBANs against names before releasing a payment run, and hold back only the records that come back as close match or no match.
Treasury & ERP
Call the API from your ERP or treasury system so verification is part of the payment file preparation, not a separate manual step.
What the API returns: match, close match, no match
Every response maps to a SEPA VoP scheme code, so your logic stays simple. Branch on the code, not on the wording.
MATCH · MTCH
Name matches the account holder. The response also carries the responding bank BIC. Proceed with confidence.
CLOSE_MATCH · CMTC
Close match - almost right, for example a trading name against a legal name. Show the verified name as a suggestion and ask the payer to confirm.
NO_MATCH · NMTC
Name does not match. Surface a clear warning before the payment is confirmed and block auto-approval.
NOT_APPLICABLE · NOAP
Verification not available for this IBAN right now. Inform the payer and let them decide.
Building VoP yourself vs. the API
What you avoid by calling one endpoint instead of joining the scheme alone.
Build it in-house
- Scheme connectivity Integrate per responding PSP
- Time to go live Months
- Response detail You normalise it
- Bulk beneficiary checks You build and pace the loop
- Both VoP directions Requesting and responding built separately
- Reuse across products Re-plumb each flow
- Maintenance Yours to own
Verification of Payee API
- Scheme connectivity One connection, SEPA-wide reach
- Time to go live Weeks
- Response detail Standardised result + BIC + timing
- Bulk beneficiary checks Per-record calls sized to your release window
- Both VoP directions Requesting and responding through one integration
- Reuse across products One API for UI, batch & mandates
- Maintenance Handled by the platform
One API, three audiences
The same endpoint serves very different jobs to be done.
Banks & PSPs
Offer Verification of Payee to account holders and meet the Instant Payments Regulation without building scheme connectivity.
Developers
A predictable REST contract, real-time responses, your own reference ids and clear scheme codes to branch on.
Businesses & ERPs
Verify supplier and payroll IBANs in bulk before a payment run, cutting invoice-redirection risk.
The API, answered
What developers and product teams ask first.
Yes. A verify call returns synchronously, typically in well under a second, and includes the responding bank's BIC and the PSP processing time so you can monitor performance.
Calls are authenticated with a bearer token over HTTPS. You can also use the RoxBusiness dashboard for ad-hoc checks without writing code.
A normalised result (MATCH, CLOSE_MATCH, NO_MATCH, NOT_APPLICABLE), the SEPA scheme match-type code, a verification id, the responding BIC, the processing time and your optional external id.
Yes - call the endpoint per record to verify a whole file of suppliers or payees before a payment run. It is built for high throughput.
Yes. The endpoint is stateless, so you can call it whenever a payee is created - a seller or supplier onboarding step - and again immediately before each payout. Re-checking at payout catches bank details that changed after onboarding, which is where invoice and payout redirection fraud usually happens.
Verification is a per-record REST call, so a payout file of thousands of beneficiaries is handled as a batch: loop the file, call the endpoint per record and collect the outcomes before releasing the run. Because the API is built for high throughput, you can pace the loop to your own release window rather than being capped by per-bank onboarding. Talk to us about your volumes and we will size the throughput with you.
Yes. The same verification is available in the RoxBusiness dashboard, so a finance or operations team can check a single payee - a 'know your payee' check before sending money - while developers use the API for automated flows.
Yes. The check compares the submitted name against the registered account holder, whether that is an individual or a company, and is used inside RoxPay's SEPA Direct Debit mandate flow as a pre-check.
NO_MATCH is not a transport error - it is a valid 200 response telling you the name does not belong to the IBAN. Treat it as a hard stop in your UI or payment run: surface a clear warning, block auto-approval, and let the user re-check the payee before sending.
CLOSE_MATCH (scheme code CMTC) means the name is almost right - a missing middle name, a legal vs trading name. The response carries the verified account-holder name, so you can show it as a suggestion and ask the payer to confirm rather than reject the payment.
For legal persons the scheme allows verification against the organisation identifier (e.g. Italian Partita IVA / Codice Fiscale) as well as the name. You submit the identifier in the request and the API returns the standard match outcome - useful when the registered name and trading name differ.
Yes. For a payment run, loop your supplier or payroll file and call the verify endpoint per record before releasing the batch. It is built for high throughput, so finance teams can mass-validate IBANs against names ahead of every distinta/bonifico run.
Yes. You send a JSON request with the payee name and IBAN and get back the outcome, the verified name (on a close match) and the responding BIC. See a full request and response in our VoP example, or the payloads and scheme codes in the API documentation.
Treat the verify call as one extra step before the payment is authorised. Authenticate with a bearer token, POST the payee name and IBAN, read the outcome, then branch: proceed on MATCH, show the suggested name and ask for confirmation on CLOSE_MATCH, block auto-approval on NO_MATCH and let the payer decide on NOT_APPLICABLE. Because the endpoint is stateless, the same call drops into checkout, supplier onboarding, a payment run or a payout batch without changing your payment rails.
It is both, depending on the job. As a payee checker it answers 'who does this IBAN belong to?' for a single payee - useful for a finance team or a payer before sending money. As a payment validation API it runs the same check inside an automated flow, so every payment or payout is validated against the account holder before it leaves.
'Know your payee' is the practical habit of confirming the account holder's name before you pay, rather than trusting the details on an invoice or an email. The API turns that habit into an automated step: the name is compared against the IBAN and you get a clear match, close match, no match or not-possible answer in well under a second.
Confirmation of Payee (CoP) is the UK name-checking scheme; Verification of Payee (VoP) is the EPC scheme used across the EU and SEPA. If you need both, look for a provider that covers the SEPA VoP scheme through one integration and returns the standardised outcomes, so your code does not change per market. RoxPay delivers VoP as a single REST API with the scheme codes, responding BIC and processing time in every response.
Five things. Coverage: which banks and countries the provider can reach across SEPA. Latency: whether results reliably fit inside the instant-payment window. Accuracy: how name matching handles close matches and legal versus trading names. Directions: whether requesting and responding VoP come through the same integration. And support: who monitors the service and what happens when a responding PSP is unreachable. Ask for the response payload and the error codes in writing - they tell you more than a feature list.
Branch on the scheme code rather than the display label. In your UI, treat MTCH as a silent pass, CMTC as a soft warning that shows the suggested name and asks the payer to confirm, and NMTC as a hard warning that blocks auto-approval. NOAP is neither: it means the check could not be completed, so tell the payer that verification was unavailable and let them decide. Keeping the four codes separate in your code is what makes the warning behaviour predictable.
Yes, and you should. The endpoint is stateless, so the same call verifies a payee when the record is created - a seller, supplier or employee onboarding step - and again immediately before money moves. Re-checking at payout time is what catches bank details that changed after onboarding, which is where payout redirection fraud usually happens. One endpoint serves both moments, so you do not maintain two checks.
Yes. Sandbox credentials are issued separately from production, so you can run match, close match and no match flows against the API before you go live. The same credentials also unlock the RoxBusiness dashboard, where you can run ad-hoc checks without writing code.
You get NOT_APPLICABLE (scheme code NOAP) as a valid 200 response, not a transport error. It means the check could not be completed for that IBAN at that moment. Treat it as an unknown rather than a failure: inform the payer that verification was unavailable and let them decide whether to continue. Genuine technical failures use 4xx and 5xx status codes with a machine-readable error code.
Keep reading
Integrate Verification of Payee
Get your credentials and go live on the SEPA VoP scheme with one REST integration.