Skip to content

Bank Account Verification

Resolve and verify the holder name on a Nigerian bank account via NIBSS ICAD Name Enquiry. Batch-capable.

View as Markdown

Resolves the holder name of a bank account (10-digit NUBAN) through NIBSS ICAD Name Enquiry, and checks it against the name you expect. Ideal for payouts and onboarding; use bulk jobs for batches.

POST/v1/verify/account
Availability
Sandbox and live
Indicative price
₦25.00 per completed check
Consent
Not required (not_required); no reason either.
MCP tool
verify_account

Request

Body parameters

  • account_numberstringrequired

    Format: 10 digits.

  • bank_codestringrequired

    Format: 3 to 6 digits.

  • matchobject
  • match.namestringrequired

    Expected account holder name; compared token by token, order-insensitive. At least 2 characters.

  • Bank codes are CBN codes such as 058 (GTBank). GET /v1/banks lists them.
  • match.name is compared token by token and in any order: every word you send must appear in the account name.

Send an Idempotency-Key header so a retried request is never billed twice. See Idempotency.

curl -X POST http://localhost:4000/v1/verify/account \
  -H "Authorization: Bearer sk_test_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "account_number": "0123456789",
  "bank_code": "058",
  "match": {
    "name": "Clarke Griffin"
  }
}'

Response

A completed check returns 200 with a verification object. status is verified or not_found. If the provider has not answered in time you get 202 with status: "pending"; retrieve it later or wait for the verification.completed webhook.

200 OK · assertion
{
  "reference_id": "spm_8171f3a87cbe221341f7185f",
  "object": "verification",
  "product": "account",
  "method": "account_name_enquiry",
  "status": "verified",
  "match": true,
  "field_matches": null,
  "field_confidence": null,
  "mode": "sandbox",
  "reason": null,
  "subject": "******6789",
  "summary": {
    "account_name_masked": "A***** C***** O*****",
    "bank_name": "Guaranty Trust Bank",
    "name_match": true
  },
  "consent": {
    "mechanism": "not_required",
    "consent_id": null,
    "timestamp": "2026-10-19T09:41:07.512Z"
  },
  "source": "api",
  "error": null,
  "billing": {
    "amount_kobo": 0,
    "currency": "NGN"
  },
  "latency_ms": 190,
  "created_at": "2026-10-19T09:41:07.512Z",
  "updated_at": "2026-10-19T09:41:07.874Z"
}

summary

  • account_name_maskedstring

    Account name with each word masked: A***** C***** O*****.

  • bank_namestring

    Bank name for the code you sent.

  • name_matchboolean | null

    Result of match.name; null when not requested.

Full-tier accounts calling the REST API also receive provider, provider_reference and data, the normalized record. MCP, webhooks, lists and bulk results never include it. See Response shaping.

Full tier only
{
  "provider": "sandbox",
  "provider_reference": "SBX6CB753DB2C",
  "data": {
    "account_number": "0123456789",
    "bank_code": "058",
    "bank_name": "Guaranty Trust Bank",
    "account_name": "CLARKE ELIZA GRIFFIN",
    "bvn_linked": true,
    "name_match": true
  }
}

Test values

Send these bodies with a sandbox key. More outcome triggers are on the Sandbox page.

Name matches
{
  "account_number": "0123456789",
  "bank_code": "058",
  "match": {
    "name": "Clarke Griffin"
  }
}
Name mismatch
{
  "account_number": "1234567890",
  "bank_code": "044",
  "match": {
    "name": "John Doe"
  }
}
Corporate account
{
  "account_number": "4567890123",
  "bank_code": "011"
}

Errors

StatusCodeMeaning
400
invalid_request
The body failed validation. details lists each field.
401
unauthorized
Missing or invalid API key.
402
insufficient_balance
Live only: wallet balance is below the check price.
403
not_entitled
Your workspace is not enabled for this product or method.
409
idempotency_key_reused
The Idempotency-Key was used with a different body.
422
provider_rejected_request
The upstream registry rejected the request.
503
verification_unavailable
Temporary failure. Retry, with the same or a new Idempotency-Key.

All errors share one shape. See Errors for the full list.

Questions? Email developers@speedmap.ng. This page is also available as Markdown.