Loading...
Loading...
Paystack Verification API — KYC verification tools for resolving bank accounts, validating account ownership, and looking up card BIN information. Use this skill whenever verifying bank account details before transfers, confirming account holder names, validating customer identity for compliance, looking up card brand/type/bank from BIN, or implementing KYC flows. Also use when you see references to /bank/resolve, /bank/validate, /decision/bin endpoints, or need to match account numbers to names.
npx skill4agent add rexedge/paystack paystack-verificationDepends on: paystack-setup for thehelper.paystackRequest
Related: paystack-miscellaneous for fetching bank codes.
| Method | Endpoint | Description |
|---|---|---|
| GET | | Resolve account number to name |
| POST | | Validate account ownership |
| GET | | Resolve card BIN |
| Param | Type | Required | Description |
|---|---|---|---|
| string | Yes | Bank account number |
| string | Yes | Bank code (from List Banks endpoint) |
const resolved = await paystackRequest<{
account_number: string;
account_name: string;
}>("/bank/resolve?account_number=0022728151&bank_code=063");
// resolved.data.account_name → "WES GIBBONS"async function verifyAccountBeforeTransfer(
accountNumber: string,
bankCode: string,
expectedName: string
) {
const resolved = await paystackRequest<{
account_number: string;
account_name: string;
}>(`/bank/resolve?account_number=${accountNumber}&bank_code=${bankCode}`);
const resolvedName = resolved.data.account_name.toLowerCase();
const expected = expectedName.toLowerCase();
if (!resolvedName.includes(expected)) {
throw new Error(
`Account name mismatch: "${resolved.data.account_name}" does not match "${expectedName}"`
);
}
return resolved.data;
}| Param | Type | Required | Description |
|---|---|---|---|
| string | Yes | Customer's first and last name |
| string | Yes | Account number |
| string | Yes | |
| string | Yes | Bank code |
| string | Yes | Two-letter ISO code (e.g. |
| string | Yes | |
| string | No | Identity document number |
const validation = await paystackRequest<{
verified: boolean;
verificationMessage: string;
accountAcceptsDebits: boolean;
accountAcceptsCredits: boolean;
accountHolderMatch: boolean;
accountOpen: boolean;
}>("/bank/validate", {
method: "POST",
body: JSON.stringify({
bank_code: "632005",
country_code: "ZA",
account_number: "0123456789",
account_name: "Ann Bron",
account_type: "personal",
document_type: "identityNumber",
document_number: "1234567890123",
}),
});
// validation.data.verified → true
// validation.data.verificationMessage → "Account is verified successfully"const card = await paystackRequest<{
bin: string;
brand: string;
sub_brand: string;
country_code: string;
country_name: string;
card_type: string; // "DEBIT" | "CREDIT"
bank: string;
}>("/decision/bin/539983");
// card.data.brand → "Mastercard"
// card.data.card_type → "DEBIT"
// card.data.bank → "Guaranty Trust Bank"