POST https://mybundlepay.com/ng/api/v2/virtual-card/user/update/{cardUserId}

KEY USAGE POLICY

Important: Always start 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/live operations.
  • Test mode does not modify real card users.
  • Live mode updates actual card user details in production.

⚠️ Avoid using live keys until your test integration has been verified.

HEADERS

Authorization * string

Send your {secret_key} as a Bearer token.

Content-Type * application/json

All requests must be in JSON format.

BODY PARAMS

Parameter Required Description
customerEmailCustomer email address.
idNumberGovernment-issued ID number (e.g. BVN, PASSPORT, NIN).
idTypeType of ID (must be uppercase: PASSPORT, NIN, BVN).
firstNameCustomer’s first name.
lastNameCustomer’s last name.
phoneNumberCustomer phone number (include country code, e.g. +2348012345678).
cityCity of residence.
stateState or region of residence.
countryCountry (e.g. Nigeria).
zipCodePostal code.
line1Street address line.
houseName-Optional house or apartment name.
bvnBVN number (required for Nigerian customers).
idImageURL of uploaded ID image.
userPhotoURL of user’s profile photo.
dateOfBirthDate of birth (YYYY-MM-DD).
cardId-Card Id of the user (optional).

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://mybundlepay.com/ng/api/v2/virtual-card/user/update/USER-ID-HERE',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => json_encode([
    "customerEmail" => "john.doe@example.com",
    "idNumber" => "A123456789",
    "idType" => "PASSPORT",
    "firstName" => "John",
    "lastName" => "Doe",
    "phoneNumber" => "+2348012345678",
    "city" => "Lagos",
    "state" => "Lagos",
    "country" => "Nigeria",
    "zipCode" => "100001",
    "line1" => "12 Allen Avenue",
    "houseName" => "MyBundlePay HQ",
    "bvn" => "22334455667",
    "idImage" => "https://example.com/id.jpg",
    "userPhoto" => "https://example.com/photo.jpg",
    "dateOfBirth" => "1990-05-10"
  ]),
  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: "john.doe@example.com",
  idNumber: "A123456789",
  idType: "PASSPORT",
  firstName: "John",
  lastName: "Doe",
  phoneNumber: "+2348012345678",
  city: "Lagos",
  state: "Lagos",
  country: "Nigeria",
  zipCode: "100001",
  line1: "12 Allen Avenue",
  houseName: "MyBundlePay HQ",
  bvn: "22334455667",
  idImage: "https://example.com/id.jpg",
  userPhoto: "https://example.com/photo.jpg",
  dateOfBirth: "1990-05-10"
};

axios.post("https://mybundlepay.com/ng/api/v2/virtual-card/user/update/USER-ID-HERE", 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": {
        "id": "94c2ec31-75c4-4036-b502-82e030ce2070",
        "customerEmail": "john.doe@example.com",
        "firstName": "John",
        "lastName": "Doe",
        "idType": "PASSPORT",
        "phoneNumber": "+2348012345678",
        "country": "Nigeria",
        "bvn": "22334455667",
        "kycPassed": true
    }
}
Error Response (Validation)

{
  "status": "failed",
  "message": {
    "bvn": ["The bvn field is required."]
  }
}
Error Response (General)

{
    "status": "failed",
    "message": "Failed to update virtual card user.",
    "details": {
        "error": "ID type not supported for this country",
        "statusCode": 400
    }
}