Banking & Fintech
A customer or business record ready for account-opening rules.
Basic
Start with the core verification
Run the minimum checks needed for the normal customer journey.
- Standard KYC Bundle
Step-up
Ask for more when risk changes
Add these checks only when the listed trigger applies.
- Face Match — Home AffairsRemote onboarding
- AML, PEP & Sanctions ScreeningHigher-risk customers
- Bank Account VerificationWhen an account will receive or send funds
- CIPC Company SearchBusiness customers
Customer
Start in your current journey
A customer starts account opening, lending, payments or payout onboarding.
Your channel
Collect the required evidence
Identity, selfie, entity, risk and bank-account details required by your policy.
VerifyNow API
Run the selected checks
Your server sends the requests below with one idempotency key per check.
Your rules
Make the business decision
Apply your RMCP, customer-risk rating and exception rules.
Your team
Keep the audit record
Keep request IDs, returned evidence and the final business decision.
API sequence
Standard KYC Bundle
Run the Standard KYC Bundle for identity and supporting trace context.
POST /verifyFace Match — Home Affairs
Compare a live selfie with the Home Affairs identity photo for stronger remote identity binding.
POST /facematchAML, PEP & Sanctions Screening
Screen a person against AML, PEP, sanctions and adverse-risk sources when policy requires it.
POST /aml-screeningBank Account Verification
Verify the account holder and bank-account status before money moves.
POST /bank-account-verificationCIPC Company Search
Verify a business customer or counterparty against CIPC records.
POST /cipcSelect calls according to your product and risk policy. More calls do not automatically create a compliant outcome.
Server-side orchestration example
JavaScript
const API_BASE = 'https://www.verifynow.co.za/api/external';
async function callVerifyNow(path, body, idempotencyKey) {
const response = await fetch(`${API_BASE}${path}`, {
method: 'POST',
headers: {
'x-api-key': process.env.VERIFYNOW_API_KEY,
'Content-Type': 'application/json',
'Idempotency-Key': idempotencyKey,
},
body: JSON.stringify(body),
});
const data = await response.json();
if (!response.ok) throw new Error(data.error || 'Verification failed');
return data;
}
export async function runBankingFintechChecks(input) {
const results = {};
results.kyc = await callVerifyNow(
'/verify',
{
bundle: 'kyc_bundle',
idNumber: input.idNumber,
mode: 'production',
},
`${input.customerReference}:kyc`
);
if (Boolean(input.selfieBase64)) {
results.face = await callVerifyNow(
'/facematch',
{
bundle: 'facematch',
mode: 'production',
selfie_image_base64: input.selfieBase64,
id_number: input.idNumber,
},
`${input.customerReference}:face`
);
}
if (input.riskLevel === 'high') {
results.aml = await callVerifyNow(
'/aml-screening',
{
mode: 'production',
name: input.fullName,
entity: 0,
country: 'za',
dataset: 'all',
},
`${input.customerReference}:aml`
);
}
if (Boolean(input.bank)) {
results.bank = await callVerifyNow(
'/bank-account-verification',
{
type: 'Individual',
firstName: input.firstName,
surname: input.surname,
identityNumber: input.idNumber,
identityType: 'IDNumber',
bankName: input.bank.name,
bankAccountNumber: input.bank.accountNumber,
bankBranchCode: input.bank.branchCode,
bankAccountType: input.bank.accountType,
mode: 'production',
},
`${input.customerReference}:bank`
);
}
if (Boolean(input.companyRegistrationNumber)) {
results.company = await callVerifyNow(
'/cipc',
{
reportType: 'cipc_company_match',
registration_number: input.companyRegistrationNumber,
mode: 'production',
},
`${input.customerReference}:company`
);
}
return {
customerReference: input.customerReference,
results,
next: 'Apply your policy and route mismatches to manual review.',
};
}