One integration for payments, cards, bills and payouts.
MyBundlePay gives developers a clean payment gateway, virtual account funding, payout rails, card issuing tools, bill payments, webhooks and merchant-ready checkout experiences.
API Test Console
Test the current endpoint directly from the documentation. Secret keys stay inside this browser session.
Enter your test key, review the sample body for this page, then send a request.
API Documentation for Payout V2
This documentation provides guidance for developers to integrate the Payout V2 endpoint using JSON requests via PHP cURL or NodeJs. Each section includes the endpoint, request parameters, and sample responses.
POST https://mybundlepay.com/ng/api/v2/initiatePayout
HEADERS
Authorization* string
Pass your {secret_key} as a Bearer token in the request header to authorize this call
Accept: application/json
REQUEST PARAMETERS *
JSON payload fields for initiating a payout:
1. amount (integer) – Withdrawal amount in the smallest currency unit (e.g., 1000 = NGN 10.00).
2. destinationBankCode (string) – Bank code identifying the recipient's bank.
3. destinationAccountNumber (string) – Recipient’s bank account number.
4. destinationAccountName (string) – Recipient’s account name.
5. nameEnquiryReference This is the sessionId returned in the name enquiry endpoint response.
6. narration (string, optional) – Custom transaction narration (e.g., “Payment for services”).
Notes for Developers
1. Store API keys securely (e.g., in environment variables).
2. Implement proper error handling for failed requests.
3. Amounts are in the smallest currency unit; ensure correct conversion.
4. Use test keys for development and live keys only in production.
5. Respect API rate limits; implement retries if necessary.
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://mybundlepay.com/ng/api/v2/initiatePayout',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode([
"amount" => 1000,
"destinationBankCode" => "000004",
"destinationAccountNumber" => "123456789",
"destinationAccountName" => "Test",
"nameEnquiryReference" => "xxxxxxxxxxxxxxxxxxxxxxxxxx",
"ref_id" => "trx_h8934h3984h3j40",
"narration" => "payout"
]),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer {secret_key}'
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const axios = require('axios');
const data = {
amount: 1000,
destinationBankCode: "000004",
destinationAccountNumber: "123456789",
destinationAccountName: "Test",
nameEnquiryReference: "xxxxxxxxxxxxxxxxxxxxxx",
ref_id: "trx_h8934h3984h3j40",
narration: "payout"
};
axios.post('https://mybundlepay.com/ng/api/v2/initiatePayout', data, {
headers: {
'Authorization': 'Bearer {secret_key}',
'Content-Type': 'application/json'
}
})
.then(response => console.log(response.data))
.catch(error => console.error(error));
Successful Response
{
"message": "Payout initiated successfully",
"status": "success",
"data": {
"reference": "txn_xxxxxxxx",
"amount": 1000,
"queued": true
}
}
Error Response
{
"status": "failed",
"message": "Insufficient balance."
}