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/user/update/{cardUserId}

KEY USAGE POLICY

Important: Always begin integration using your test_secret_key before switching to live mode.

  • Use test_secret_key for sandbox or test environment.
  • Use live_secret_key for production operations.
  • Test mode does not update live card users.
  • Live mode modifies real user data in production.

⚠️ Do not use live keys until your test integration is verified.

HEADERS

Authorization * string

Send your {secret_key} as a Bearer token.

Content-Type * application/json

All requests must be JSON formatted.

BODY PARAMS

Parameter Required Description
customerEmailCustomer email address.
firstNameCustomer first name.
lastNameCustomer last name.
otherNames-Middle or additional names (optional).
phoneNumberCustomer phone number with country code.
statusCustomer account status (e.g., active).
line1Address line (e.g., street or road name).
houseName-House or apartment name (optional).
cityCity of residence.
stateState or region of residence.
zipCodePostal or ZIP code.
countryCountry (e.g., Nigeria).
idTypeID type (PASSPORT, NIN, NATIONAL_ID, BVN).
BVN number (required for Nigerian customers)
idNumberGovernment-issued ID number.
idImageURL of front side of the ID image.
userPhotoURL of user profile photo or ID back.
dateOfBirthDate of birth (YYYY-MM-DD).

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://mybundlepay.com/ng/api/v2/virtual-card/user/update/xxxxxxxxxxxxxxxxxxxx',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => json_encode([
    "customerEmail" => "[email protected]",
    "firstName" => "Jane",
    "lastName" => "Doe",
    "otherNames" => "",
    "phoneNumber" => "+261330123456",
    "status" => "active",
    "line1" => "123 Antananarivo Street",
    "houseName" => "House 12",
    "city" => "Antananarivo",
    "state" => "Antananarivo",
    "zipCode" => "101",
    "country" => "Madagascar",
    "idType" => "NATIONAL_ID",
    "idNumber" => "MG123456789",
    "idImage" => "https://example.com/id-front.jpg",
    "userPhoto" => "https://example.com/id-back.jpg",
    "dateOfBirth" => "1990-05-20"
  ]),
  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 = {
  customerEmail: "[email protected]",
  firstName: "Jane",
  lastName: "Doe",
  otherNames: "",
  phoneNumber: "+261330123456",
  status: "active",
  line1: "123 Antananarivo Street",
  houseName: "House 12",
  city: "Antananarivo",
  state: "Antananarivo",
  zipCode: "101",
  country: "Madagascar",
  idType: "NATIONAL_ID",
  idNumber: "MG123456789",
  idImage: "https://example.com/id-front.jpg",
  userPhoto: "https://example.com/id-back.jpg",
  dateOfBirth: "1990-05-20"
};

axios.post("https://mybundlepay.com/ng/api/v2/virtual-card/user/update/xxxxxxxxxxxxxxxxxxxx", 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",
    "code": "USER_UPDATED",
    "message": "Virtual card user details successfully updated.",
    "mode": "TEST",
    "data": {
        "statusCode": 200,
        "message": "Customer updated successfully.",
        "customer_id": "xxxxxxxxxxxxxxxxxxxx",
        "type": "individual",
        "name": "Jane Doe",
        "phoneNumber": "+261330123456",
        "emailAddress": "[email protected]",
        "status": "active",
        "individual": {
            "firstName": "Jane",
            "lastName": "Doe",
            "otherNames": "",
            "dob": "1990-05-20",
            "documents": {
                "idFrontUrl": "https://example.com/id-front.jpg",
                "idBackUrl": "https://example.com/id-back.jpg"
            }
        },
        "billingAddress": {
            "line1": "123 Antananarivo Street",
            "line2": "House 12",
            "city": "Antananarivo",
            "state": "Antananarivo",
            "postalCode": "101",
            "country": "Madagascar"
        },
        "isDeleted": false,
        "createdAt": "2025-11-11T13:03:06+01:00",
        "updatedAt": "2025-11-11T13:03:06+01:00"
    }
}
⚠️ Error Response (BVN Required)

{
    "status": "failed",
    "code": "BVN_REQUIRED",
    "message": "BVN number is required for customers in Nigeria."
}
⚠️ Error Response (Unauthorized Assignment)

{
    "status": "failed",
    "message": "This customer is not assigned to your business.",
    "mode": "live"
}