🇳🇬 NGN Transfers

Send NGN transfers to Nigerian bank accounts.

Overview

The Capera B2B API allows you to send money to any Nigerian bank account. The transfer process involves three main steps:

  1. List Banks - Get available Nigerian banks
  2. Resolve Account - Verify account details
  3. Initiate Transfer - Send the money

List Banks

GET /v1/banks

Get all available Nigerian banks for transfers.

Authentication

No authentication required.

Response

Returns an array of bank objects.

[
  {
    "id": "bank_001",
    "name": "First Bank of Nigeria",
    "slug": "first-bank"
  },
  {
    "id": "bank_002",
    "name": "United Bank for Africa", 
    "slug": "uba"
  },
  {
    "id": "bank_003",
    "name": "Guaranty Trust Bank",
    "slug": "gtb"
  }
]

Bank Object

AttributeTypeDescription
namestringFull name of the bank
slugstringBank identifier used in API calls

Example Request

curl -X GET https://api.withcapera.com/b2b/v1/banks

Resolve Account

GET /v1/bank/resolve

Verify account details and get the account holder's name.

Authentication

Required. Include your API key in the Authorization header.

Parameters

ParameterTypeRequiredDescription
accountNumberstringRequired10-digit bank account number
bankSlugstringRequiredBank identifier from List Banks

Response

Returns the account holder's name if valid.

{
  "accountName": "John Doe"
}

Errors

StatusErrorResolution
400Account number is requiredInclude accountNumber parameter
400Bank slug is requiredInclude bankSlug parameter
400Bank not foundUse valid bank slug from List Banks
400Account not foundVerify account number is correct
401UnauthorizedCheck API key is valid

Example Request

curl -X GET "https://api.withcapera.com/b2b/v1/bank/resolve?accountNumber=1234567890&bankSlug=first-bank" \
  -H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Initiate Transfer

POST /v1/transfers/initiate

Send NGN to a Nigerian bank account.

Authentication

Required. Include your API key in the Authorization header.

Request Body

FieldTypeRequiredDescription
referencestringRequiredUnique reference (must be unique per merchant)
amountintegerRequiredAmount in kobo (₦1 = 100 kobo)
bankSlugstringRequiredBank identifier from List Banks
accountNumberstringRequired10-digit account number
accountNamestringRequiredAccount holder name
narrationstringOptionalTransfer description (max 100 chars)

Amount in Kobo

All amounts are specified in kobo (minor currency units):

  • ₦1 = 100 kobo
  • ₦100 = 10,000 kobo
  • ₦1,000 = 100,000 kobo

Request Example

{
  "reference": "TRF-2024-001",
  "amount": 50000,
  "bankSlug": "first-bank", 
  "accountNumber": "1234567890",
  "accountName": "John Doe",
  "narration": "Payment for services"
}

Response

Returns initial transfer status.

{
  "status": "PENDING"
}

Errors

StatusErrorResolution
400Session not foundCheck API key is valid
400Invalid request bodyVerify JSON format
400Amount must be greater than 0Use positive amount
400Bank not foundUse valid bank slug
400Reference already existsUse unique reference
401UnauthorizedCheck API key

Example Request

curl -X POST https://api.withcapera.com/b2b/v1/transfers/initiate \
  -H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "TRF-2024-001",
    "amount": 50000,
    "bankSlug": "first-bank",
    "accountNumber": "1234567890", 
    "accountName": "John Doe",
    "narration": "Payment for services"
  }'

Get Transfer Status

GET /v1/transfers/{reference}

Check the status of a transfer.

Authentication

Required. Include your API key in the Authorization header.

Path Parameters

ParameterTypeRequiredDescription
referencestringRequiredTransfer reference

Response

Returns transfer details and current status.

{
  "reference": "TRF-2024-001",
  "status": "SUCCESS", 
  "amount": 50000,
  "fee": 50
}

Transfer Object

AttributeTypeDescription
referencestringUnique transfer reference
statusstringCurrent transfer status
amountintegerTransfer amount in kobo
feeintegerTransfer fee in kobo

Status Values

StatusDescription
PENDINGTransfer is queued
PROCESSINGTransfer is being processed
SUCCESSTransfer completed successfully
FAILEDTransfer failed
CANCELLEDTransfer was cancelled

Errors

StatusErrorResolution
400Reference is requiredInclude reference in path
400Transfer not foundCheck reference is correct
401UnauthorizedCheck API key

Example Request

curl -X GET https://api.withcapera.com/b2b/v1/transfers/TRF-2024-001 \
  -H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Complete Workflow

Here's the recommended flow for sending a transfer:

1. Get Banks (Optional - Cache Results)

curl -X GET https://api.withcapera.com/b2b/v1/banks

2. Resolve Account

curl -X GET "https://api.withcapera.com/b2b/v1/bank/resolve?accountNumber=1234567890&bankSlug=first-bank" \
  -H "Authorization: Bearer YOUR_API_KEY"

3. Initiate Transfer

curl -X POST https://api.withcapera.com/b2b/v1/transfers/initiate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "TRF-2024-001",
    "amount": 50000,
    "bankSlug": "first-bank",
    "accountNumber": "1234567890",
    "accountName": "John Doe"
  }'

4. Check Status

curl -X GET https://api.withcapera.com/b2b/v1/transfers/TRF-2024-001 \
  -H "Authorization: Bearer YOUR_API_KEY"

Best Practices

Reference Generation

Generate unique references to avoid duplicates:

  • Use timestamp: TRF-{timestamp}
  • Include order ID: ORDER-{orderId}
  • Add random suffix: TRF-{timestamp}-{random}

Amount Validation

  • Convert Naira to kobo (multiply by 100)
  • Minimum: ₦1 (100 kobo)
  • Validate amount is positive

Account Verification

Always resolve account details before initiating transfers to ensure accuracy.

Caching

Banks don't change frequently. Cache the bank list for 24 hours to reduce API calls.


Testing

Test Account Numbers

BankAccount NumberAccount Name
first-bank1234567890Test User One
gtb0987654321Test User Two
uba1122334455Test Business

Test Amounts

NGNKoboExpected Result
₦1100Success
₦10010000Success
₦00Validation error

Test Scenarios

  1. Valid Transfer - Use test account details above
  2. Invalid Account - Use non-existent account number
  3. Duplicate Reference - Use same reference twice
  4. Invalid Bank - Use non-existent bank slug

Did this page help you?