Build With MyBundlePay

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.

REST APIs JSON based
Webhooks Real time events
Sandbox Test first

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/fetch-card

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 calls return mock virtual card details.
  • Live calls return actual virtual card data for your business.
  • Ensure your IP address is whitelisted on your MyBundlePay Dashboard.

⚠️ Do not use live keys for testing — unauthorized IPs will be blocked.

HEADERS

Authorization * string

Send your {secret_key} as a Bearer token in the header.

Content-Type * application/json

All requests must use JSON body format.

IP WHITELISTING

Only authorized server IPs can access this endpoint. Whitelist your IP in MyBundlePay Dashboard.

BODY PARAMS

Parameter Required Description
card_id Unique identifier of the virtual card to fetch.

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://mybundlepay.com/ng/api/v2/virtual-card/fetch-card',
  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 =>'{
    "card_id": "xxxxx-8535-4961-a720-xxxxxxx"
  }',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'Authorization: Bearer {secret_key}'
  ),
));

$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>

const axios = require('axios');

const data = {
  card_id: "xxxxx-8535-4961-a720-xxxxxxx"
};

axios.post("https://mybundlepay.com/ng/api/v2/virtual-card/fetch-card", data, {
  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

{
  "status": "success",
  "message": "Card fetched successfully.",
  "data": {
    "card_account_id": "xxxxxxxxxxxxxxxxxxxx",
    "card_Id": "xxxxx-8535-4961-a720-xxxxxxx",
    "card_balance": "5000.00",
    "cardNumber": "411111******1111",
    "cardName": "Test User",
    "cardType": "Virtual",
    "cardBrand": "VISA",
    "cvv2": "123",
    "card_expiry": "12/30",
    "card_status": "ACTIVE",
    "valid": "true",
    "card_reference": "SIM-REF-001",
    "card_city": "Lagos",
    "card_street": "10 MyBundlePay Ave",
    "card_country": "NG",
    "card_zipCode": "100001",
    "card_countryCode": "NG"
  },
  "mode": "test"
}
❌ Error Response (Invalid Token)

{
  "status": "failed",
  "code": "INVALID_TOKEN",
  "message": "Invalid secret key provided.",
  "mode": "test"
}
❌ Error Response (Card Not Found)

{
  "status": "failed",
  "message": "Card not found or not assigned to your business.",
  "mode": "live"
}