Skip to content
Lira APILira API

Overview

Verify that a bank account exists and retrieve the account holder's name and address details before initiating a transfer.

Prerequisites

You'll need an API key. See Quickstart or Authentication if you don't have one yet.

Note

Verification endpoints use an API key in the X-API-Key header, not a Bearer token. Verification POST requests also require an Idempotency-Key header.


Step 1: Make the verification request

Submit the account number, country code, and bank code to the verification endpoint.

Terminal
curl -X POST https://api.lira.com/api/v1/verify/account \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Idempotency-Key: YOUR_IDEMPOTENCY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountNumber": "0123456789",
    "country": "NG",
    "bankCode": "000014"
  }'

Request body fields

FieldTypeRequiredDescription
accountNumberstringYesThe bank account number to verify. 10 digits for Nigerian NUBAN accounts; the UnionPay card number for China personal accounts.
countrystringYesISO 3166-1 alpha-2 country code. See Country Requirements for every supported country (African, UK/China, Asia, LATAM, and Europe/SEPA corridors).
bankCodestringYesThe receiving institution's routing code. Its form depends on the country: the local bank/clearing code for African corridors, the 6-digit sort code for the UK, or the bank's BIC/SWIFT code for China business accounts. Supply whichever routing code applies to the destination country in this single field.
accountNamestringConditionalThe claimed account holder name. Required for GB and CN, where verification confirms whether this name matches the bank's record. Optional elsewhere.
accountHolderTypestringConditionalINDIVIDUAL or BUSINESS. Required for CN to select the right matching rules.
identifiersarrayConditionalCorridor-specific identity codes for the account holder, each { "type": ..., "value": ... }. Required for CN business accounts (a BUSINESS_REGISTRATION entry carrying the 18-character Uniform Credit Code), and for Brazil (CPF/CNPJ), Chile (RUT), Colombia (CC/NIT), and Ecuador (CC/RUC).
modestringNosync (default) or async. Use async to receive the result via webhook. Not supported for TZ, ET, GB, CN, or the Asia, LATAM, and Europe/SEPA corridors; those are synchronous only.

Formats, bank codes, and required fields vary by country. See Country Requirements for every supported country.

Note

In sandbox, use account number 0000000001 with bank code 000014 and country NG to get a predictable successful result. See Environments for the full list of sandbox test data.


Name-match corridors (UK & China)

For GB and CN, verification works differently from the African corridors. Instead of returning the account holder's name from a registry, the bank confirms whether the accountName you supplied matches the account on record.

  • You must send accountName in the request.
  • When verified is true, the name matched. The accountName in the response is the name you submitted. These corridors do not return a separately sourced name.
  • When verified is false, the account was not found or the name did not match. accountName is omitted.

This keeps the response shape uniform across every country while reflecting that name-match corridors never disclose the registered name.


Step 2: Read the result

Successful verification

JSON
{
  "id": "a1b2c3d4-...-...-...-...",
  "status": "success",
  "verificationType": "ACCOUNT_NUMBER",
  "identifier": "0123456789",
  "country": "NG",
  "verifiedAt": "2026-03-09T10:05:00.000Z",
  "verified": true,
  "accountNumber": "0123456789",
  "accountName": "Jane Doe",
  "bankCode": "000014",
  "bankName": "Access Bank",
  "address": {
    "state": "Lagos",
    "lga": "Ikeja"
  }
}

Failed verification

JSON
{
  "id": "a1b2c3d4-...-...-...-...",
  "status": "failed",
  "verificationType": "ACCOUNT_NUMBER",
  "identifier": "0123456789",
  "country": "NG",
  "verifiedAt": "2026-03-09T10:05:00.000Z",
  "verified": false,
  "error": {
    "code": "ACCOUNT_NOT_FOUND",
    "message": "No account found for the provided details"
  }
}

Note

A 200 OK HTTP response does not mean the verification succeeded. Always check the status field. failed is a valid, expected outcome, not an API error.


Response fields reference

FieldTypeDescription
idstringUnique verification ID (VERIFICATION_ID). Store this to retrieve the result later or correlate with a webhook.
statusstringsuccess, failed, error, or pending (async only).
verificationTypestringAlways ACCOUNT_NUMBER for this endpoint.
identifierstringThe account number submitted in the request.
countrystringCountry code from the request.
verifiedbooleantrue if the account was confirmed; false otherwise.
verifiedAtstringISO 8601 timestamp of when the verification completed.
accountNumberstringThe verified account number. Present when status is success.
accountNamestringFor NG/GH/ZM/TZ/ET, the account holder's name as returned by the bank. For GB/CN, the name you submitted, confirmed to match the bank's record. Present when status is success.
bankCodestringThe bank code from the request. Present when status is success.
bankNamestringThe full name of the bank. Present when status is success.
address.statestringThe state associated with the account. May be absent depending on the bank.
address.lgastringThe local government area. May be absent depending on the bank.
errorobjectPresent when status is failed or error.
error.codestringMachine-readable failure code. See error handling table below.
error.messagestringHuman-readable description.

Step 3: Retrieve the result later

If you need to fetch a verification result again, use its id:

Terminal
curl https://api.lira.com/api/v1/verify/VERIFICATION_ID \
  -H "X-API-Key: YOUR_API_KEY"

Step 4: List past verifications

View all bank account verifications for your organization, with optional filters:

Terminal
curl "https://api.lira.com/api/v1/verify?type=ACCOUNT_NUMBER&status=success" \
  -H "X-API-Key: YOUR_API_KEY"

Query parameters

ParameterDescription
typeFilter by verification type. Use ACCOUNT_NUMBER.
statusFilter by result: success, failed, error, pending.
limitNumber of results to return.
offsetPagination offset.

Error handling

statusMeaningAction
successAccount verifiedRead accountName, bankName, and address
failedAccount not found or details mismatchCheck error.code; prompt user to recheck details
errorUpstream or system errorRetry with exponential backoff
pendingAsync verification in progressPoll GET /verify/VERIFICATION_ID or wait for webhook
error.codeCauseAction
ACCOUNT_NOT_FOUNDAccount number not found at the specified bankAsk the user to check their account number and bank code
INVALID_BANK_CODEBank code not recognizedValidate against the supported banks list
INVALID_ACCOUNT_NUMBERAccount number format is invalidValidate format (10 digits for Nigeria) before submitting
PROVIDER_ERRORUpstream system returned an errorRetry with exponential backoff
PROVIDER_TIMEOUTUpstream system timed outRetry; transient error

For the full error code reference, see Errors.


Next steps