Pay by Bank Transfer (NGN) 🇳🇬
Direct Integration via the bank transfer channel allows you to generate dynamic virtual account details for your customers. This enables them to complete payments via their preferred banking app or USSD string without needing a card.
Leatherback currently supports NGN transactions for this payment channel.
Collecting a transfer follows the simple three-step process:
- Initiate Payment: Generate the unique account number and bank details.
- Customer Transfer: The customer sends funds to the displayed account.
- Webhook Notification: Leatherback notifies your server once funds are received.
- Fulfillment: You finalize the order and provide value to the customer.
- Get Transaction Status (Optional)
Before you begin!
To collect payments, you need your API keys. You can find these on the Fusion Dashboard under Settings → API Keys. Follow this guide.
All requests must be authenticated using your Secret Key in the header.
1. Initiate the Payment
To start the transaction, make a POST request to the Initiate Payment API. You must pass PayByTransfer as the channel value.
curl --request POST \
--url https://laas.leatherback.co/api/payment/pay/initiate \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{
"amount": 100,
"channel": "PayByTransfer",
"currency": "NGN",
"link": {
"alias": "0-k2tmbuy"
}, // Only Required if payment is for a payment link
"userInformation": {
"firstName": "Dave",
"lastName": "MC",
"emailAddress": "[email protected]",
"phone": "0901 010 1010"
}
}'{
"value": {
"paymentStatus": "REQUIRE_USER_OFFLINE_ACTION",
"message": "Payment Initiated",
"bankAuthURL": null,
"paymentItem": {
"channel": "PayByTransfer",
"message": "Payment Initiated",
"amount": 100,
"fees": 0,
"reference": "TVI1HLDDNATWSPG",
"paymentReference": "TVI1HLDDNATWSPG",
"metaData": {
"transfer-info": {
"note": "NILL",
"bank": "Providus",
"account_number": "9934812967",
"account_name": "Palonetic Inc",
"expiration": "2023-03-31T11:20:46.7104568Z",
"mode": "banktransfer"
}
}
}
},
"isSuccess": true,
}Verify Transaction Status
Once the customer has completed authentication, you must verify the final status of the transaction.
While Webhooks are recommended for production systems, you can also use polling.
Verify via Polling
Call the Get Transaction Status API using the paymentReference returned in the initiation step.
Status Meanings
| Status | Meaning | Action Required |
|---|---|---|
| SUCCESSFUL | The funds have been secured | Provide value or services to customer |
| PENDING | User has authorized; awaiting bank settlement | Display "Processing" screen |
| FAILED | The charge was rejected | Prompt user for another payment method |
{
"value": {
"paymentReference": "TVI1HLDDNATWSPG",
"amount": {
"currencyCode": "NGN",
"amount": 100
},
"paymentStatus": "Successfull"
},
"isSuccess": true
}Listen for Status (Webhooks)
To avoid the overhead of polling, ensure your Webhook URL is configured in the Developer Portal. See guide here.
We will push a POST notification to your server the moment a transaction is finalized.
Webhook Events
payment.success– Trigger your fulfillment logicpayment.failed– Notify the user and log the failure reason