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.
Post https://mybundlepay.com/ng/api/transaction/verify
HEADERS
Authorization* string
Pass your {secret_key} as a bearer token in the request header to authorize this call.
Content-Type application/json
Ensure requests are sent as JSON.
BODY PARAMS
Your unique transaction reference you used during virtual account creation. This is used to verify funding status.
WEBHOOK NOTIFICATION
After successful payment, MyBundlePay will send a POST request to your webhook URL.
Headers
Content-Type application/json
X-Webhook-Secret Your webhook secret
Webhook Payload
{
"amount": "6000.00",
"fee": "230.00",
"netAmount": "5770.00",
"accountName": "OTTI MERCY",
"bankName": "NIBSS",
"method": "Virtual Account Funding",
"externalReference": "8520985893522125839",
"sessionId": "000010260615112957111052973618",
"narration": "REF8520985893522125839 BO OTTI MERCY IFO MYBUNDLE",
"status": "Completed",
"date": "15 Jun 2026, 12:30 PM"
}
Webhook Verification Example (PHP)
<?php
$payload = file_get_contents("php://input");
$data = json_decode($payload,true);
$receivedSecret = $_SERVER['HTTP_X_WEBHOOK_SECRET'] ?? null;
$myWebhookSecret = "YOUR_WEBHOOK_SECRET";
if($receivedSecret !== $myWebhookSecret){
http_response_code(401);
echo json_encode([
"status"=>"error",
"message"=>"Invalid webhook secret"
]);
exit;
}
// Process payment
$amount = $data['amount'];
$reference = $data['externalReference'];
$status = $data['status'];
// Your logic here
echo json_encode([
"status"=>"success",
"message"=>"Webhook received"
]);
?>
Expected Webhook Response
{
"status": "success",
"message": "Webhook received"
}
Webhook Failure Response
{
"status": "error",
"message": "Invalid webhook secret"
}
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://mybundlepay.com/ng/api/transaction/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
"tx_ref" => "TX8456463755"
]),
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer {secret_key}"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
var axios = require('axios');
var data = JSON.stringify({
"tx_ref": "TX8456463755"
});
var config = {
method: 'post',
url: 'https://mybundlepay.com/ng/api/transaction/verify',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer {secret_key}'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
Sample Responses
✅ Successful Transaction (Funded)
{
"status": "success",
"message": "Transaction verified successfully",
"data": {
"amount": 5000,
"accountNumber": "60225522600",
"accountName": "MYBUNDLEPAYLTD Checkout",
"currency": "NGN",
"expired_at": "2025-09-18 11:22:54"
}
}
❌ Pending Transaction (Active)
{
"status": "failed",
"message": "Transaction not yet funded",
"data": {
"amount": 5000,
"accountNumber": "60225522600",
"accountName": "MYBUNDLEPAYLTD Checkout",
"currency": "NGN",
"expired_at": "2025-09-18 11:22:54"
}
}