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/v2/virtual-card/unfreeze
KEY USAGE POLICY
Important: Use your test_secret_key for sandbox testing.
Switch to live_secret_key only when you are ready to go live.
- Test keys use sandbox endpoints for mock data.
- Live keys connect directly to your MyBundlePay virtual card account.
- Ensure your IP is whitelisted in your MyBundlePay Dashboard.
⚠️ Unauthorized IPs or live key misuse will be blocked automatically.
HEADERS
Authorization * string
Send your {secret_key} as a Bearer token.
Content-Type application/json
JSON format is required.
IP WHITELISTING
Only registered server IPs can call this endpoint. Update your IP list in your MyBundlePay Dashboard.
REQUEST BODY
| Parameter | Required | Description |
|---|---|---|
cardId |
✅ | Unique identifier of the virtual card to be unfrozen. |
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://mybundlepay.com/ng/api/v2/virtual-card/unfreeze',
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 =>'{
"cardId": "xxxxx-db81-4893-ae4b-xxxxxx"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Bearer {secret_key}'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
const axios = require('axios');
axios.post("https://mybundlepay.com/ng/api/v2/virtual-card/unfreeze", {
cardId: "xxxxx-db81-4893-ae4b-xxxxxx"
}, {
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer {secret_key}"
}
})
.then(res => console.log(res.data))
.catch(err => console.error(err.response ? err.response.data : err.message));
✅ Success Response (Test Mode)
{
"statusCode": 200,
"message": "Card updated successfully.",
"type": "individual",
"name": "John Doe",
"emailAddress": "[email protected]",
"brand": "MasterCard",
"currency": "USD",
"maskedPan": "506100******5635",
"last4": "5635",
"expiryMonth": "05",
"expiryYear": "25",
"status": "active",
"mode": "test"
}
❌ Error Response (Missing Parameter)
{
"status": "failed",
"message": "cardId is required.",
"mode": "unknown"
}
❌ Error Response (Invalid Token)
{
"status": "failed",
"code": "INVALID_TOKEN",
"message": "Invalid secret key provided.",
"mode": "live"
}
❌ Error Response (Card Not Found)
{
"status": "failed",
"message": "Card ID does not exist.",
"mode": "live"
}