Disburse Funds to Vendor Bank Accounts (Payouts)
π Use Case
A fintech app, gig platform, or marketplace wants to send money to users, vendors, or freelancers directly into their Nigerian bank accounts.
Why Use Payouts?
- Automate vendor or partner settlements
- Reduce reliance on manual bank transfers
- Track disbursements programmatically
- Improve payout speed and reliability
Prerequisites
- TransactPay business account with payouts enabled
- API secret key and RSA public key
- Verified recipient bank account details
- Sufficient wallet or settlement balance
Step-by-Step Implementation
Step 1: Prepare Payout Payload
Basic required fields:
account_number
bank_code
(e.g.,057
for Zenith,011
for First Bank)amount
narration
(optional)reference
(your own transaction ID)
Node.js Code to Send Payout
const axios = require("axios");
const NodeRSA = require("node-rsa");
const fs = require("fs");
require("dotenv").config();
const pubKey = fs.readFileSync("./transactpay_pub.pem", "utf8");
const rsa = new NodeRSA(pubKey);
rsa.setOptions({ encryptionScheme: "pkcs1" });
const payoutPayload = {
account_number: "1234567890",
bank_code: "057", // Zenith Bank
amount: 15000, // NGN 15,000
reference: "PAYOUT-20250711-001",
narration: "Vendor settlement for Order #1098"
};
const encrypted = rsa.encrypt(JSON.stringify(payoutPayload), "base64");
axios
.post("https://api.transactpay.io/disbursement/single", {
data: encrypted,
}, {
headers: {
Authorization: `Bearer ${process.env.TRANSACTPAY_SECRET_KEY}`,
},
})
.then((res) => {
console.log("Disbursement response:", res.data);
})
.catch((err) => {
console.error("Disbursement error:", err.response?.data || err.message);
});
import json, requests, os
from dotenv import load_dotenv
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
load_dotenv()
key = os.getenv("TRANSACTPAY_SECRET_KEY")
with open("transactpay_pub.pem", "rb") as key_file:
pub_key = serialization.load_pem_public_key(key_file.read())
payload = {
"account_number": "1234567890",
"bank_code": "057",
"amount": 15000,
"reference": "PAYOUT-20250711-001",
"narration": "Vendor settlement for Order #1098"
}
encrypted = pub_key.encrypt(json.dumps(payload).encode(), padding.PKCS1v15())
res = requests.post(
"https://api.transactpay.io/disbursement/single",
headers={"Authorization": f"Bearer {key}"},
json={"data": encrypted.hex()}
)
print("Disbursement response:", res.json())
Sample API Response
{
"status": true,
"message": "Payout successful",
"data": {
"reference": "PAYOUT-20250711-001",
"status": "processing"
}
}
Step 2: Track Disbursement Status via Webhook
Listen for webhook events like:
{
"event": "disbursement.success",
"data": {
"reference": "PAYOUT-20250711-001",
"status": "success",
"amount": 15000
}
}
Update your database once confirmed.
Tips
- Always store payout references uniquely
- Log both API and webhook events for audit
- Monitor wallet balance to avoid payout failures
Updated 1 day ago