BACS-approved · From 1.9p
Official modulus algorithms. Catch bad details before the payment fails.
Mod 10, Mod 11, Double Alternate · typically under 50ms · 50 free test checks
Modulus checking is an industry-standard validation method used to verify that a UK sort code and account number combination is valid before processing a payment.
Our service uses the official BACS-approved modulus checking algorithms (Modulus 10 and Modulus 11) to mathematically verify that account details are correctly formatted and could represent a valid bank account.
Invalid payment details cost UK businesses over £800 million annually in failed transactions, administrative overhead, and customer service issues.
Catch invalid account details before submission
Provide instant feedback on data entry errors
Reduce manual intervention and customer support
Uses official modulus checking algorithms
Simple integration, powerful validation
Sort code and account number in the payment form.
Your system sends a validation request.
Modulus algorithms run, typically under 50ms.
Valid or not, with bank details when the number checks.
Integrate in minutes with our developer-friendly API
curl -X GET "https://wsp.esortcode.com/uk/v1/validateaccount?key=YOUR_API_KEY&sortcode=200000&accountNumber=12345678"
const apiKey = 'YOUR_API_KEY';
const sortCode = '200000';
const accountNumber = '12345678';
const url = `https://wsp.esortcode.com/uk/v1/validateaccount?key=${apiKey}&sortcode=${sortCode}&accountNumber=${accountNumber}`;
const response = await fetch(url);
const result = await response.json();
import requests
api_key = 'YOUR_API_KEY'
sort_code = '200000'
account_number = '12345678'
url = f'https://wsp.esortcode.com/uk/v1/validateaccount?key={api_key}&sortcode={sort_code}&accountNumber={account_number}'
response = requests.get(url)
result = response.json()
$apiKey = 'YOUR_API_KEY';
$sortCode = '200000';
$accountNumber = '12345678';
$url = "https://wsp.esortcode.com/uk/v1/validateaccount?key={$apiKey}&sortcode={$sortCode}&accountNumber={$accountNumber}";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
{
"modulusCheck": {
"sortcode": "200000",
"accountNumber": "12345678",
"valid": true
},
"branches": [
{
"bankName": "BARCLAYS BANK PLC",
"branchTitle": "Head Office",
"address1": "1 Churchill Place",
"town": "London",
"postcode": "E14 5HP",
"bacsPayments": true,
"directDebits": true,
"directCredits": true
}
]
}
Pay only for what you use - annual packs from 4.0p to 2.5p, monthly from 2.4p to 1.9p
Choose annual or monthly, then drag the slider or tap a preset
50 free checks to try the API · no card required
Higher packs unlock lower per-check rates
Everything you need for production-grade validation
TLS 1.3 encryption, ISO 27001 certified
Daily database updates for accuracy
Detailed dashboards and reporting
Expert technical support team
Real-time notifications and callbacks
Validate hundreds of records at once
Need a 100% uptime contract on modulus checking? Enterprise SLA is £99 a month.
Enterprise SLA →Fifty free checks. No card. Same modulus API as the rest of the bureau.
Create a free account