agentsclimarketplace

Paystack verification

Skill rexedge/paystack/skills/paystack-verification

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.From its SKILL.md

Install
npx -y skills add rexedge/paystack --skill paystack-verification

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

3.9 KB, 838 tokens by cl100k_base, as published. Nobody here has run it

Paystack Verification

The Verification API provides KYC tools for account resolution, validation, and card BIN lookups.

Depends on: paystack-setup for the paystackRequest helper.
Related: paystack-miscellaneous for fetching bank codes.

Endpoints

MethodEndpointDescription
GET/bank/resolveResolve account number to name
POST/bank/validateValidate account ownership
GET/decision/bin/:binResolve card BIN

Resolve Account Number

Confirm an account belongs to the right customer. Returns the account holder's name.

ParamTypeRequiredDescription
account_numberstringYesBank account number
bank_codestringYesBank 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"

Verify Before Transfer Pattern

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;
}

Validate Account

Full account validation with identity document verification. Use before sending money.

ParamTypeRequiredDescription
account_namestringYesCustomer's first and last name
account_numberstringYesAccount number
account_typestringYespersonal or business
bank_codestringYesBank code
country_codestringYesTwo-letter ISO code (e.g. NG, ZA, GH)
document_typestringYesidentityNumber, passportNumber, or businessRegistrationNumber
document_numberstringNoIdentity 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"

Resolve Card BIN

Get card brand, type, and issuing bank from the first 6 digits of a card number:

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"

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,861. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.