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/virtualcards/enroll-user

KEY USAGE POLICY

Important: Always begin integration using your test_secret_key to simulate enrollments.

  • Use test_secret_key for development/testing.
  • Switch to secret_key (Live Key) only after approval.
  • Test calls return simulated responses; no real customers are created.
  • Live calls create real customers and enroll them.

⚠️ Going live without testing may cause failed enrollments or blocked API keys.

HEADERS

Authorization * string

Send your {secret_key} as a Bearer token.

Content-Type * application/json

All requests must use JSON.

IP WHITELISTING

Ensure your server IP is whitelisted in your dashboard.

  • CF-Connecting-IP
  • X-Forwarded-For
  • $request->ip() fallback

BODY PARAMS

Parameter Required Description
customerEmailCustomer email address.
idNumberID number (e.g., BVN, PASSPORT, NATIONAL_ID).
idTypeUppercase ID type (BVN, PASSPORT, NATIONAL_ID, etc.)
firstNameFirst name.
lastNameLast name.
otherNames-Other names (optional).
phoneNumberPhone number with country code.
cityCity.
stateState/region.
countryFull country name (e.g., Nigeria, Madagascar).
zipCodePostal code.
line1Address line.
houseName-Optional house/apartment name.
bvnRequired only for Nigerian customers.
idImageID front image URL.
userPhotoID back image or user photo.
dateOfBirthDate of birth (YYYY-MM-DD). Required for non-Nigeria users.

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => "https://mybundlepay.com/ng/api/v2/virtualcards/enroll-user",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => json_encode([
        "customerEmail" => "[email protected]",
        "idNumber" => "12345678901",
        "idType" => "BVN",
        "firstName" => "John",
        "lastName" => "Doe",
        "phoneNumber" => "+2348012345678",
        "city" => "Lagos",
        "state" => "Lagos",
        "country" => "Nigeria",
        "zipCode" => "100001",
        "line1" => "10 Allen Avenue",
        "houseName" => "House 5",
        "bvn" => "12345678901",
        "idImage" => "https://example.com/id-front.jpg",
        "userPhoto" => "https://example.com/id-back.jpg",
        "dateOfBirth" => "1995-07-14"
    ]),
    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]",
  idNumber: "MG123456789",
  idType: "NATIONAL_ID",
  firstName: "Jane",
  lastName: "Doe",
  phoneNumber: "+261330123456",
  city: "Antananarivo",
  state: "Antananarivo",
  country: "Madagascar",
  zipCode: "101",
  line1: "123 Antananarivo Street",
  houseName: "House 12",
  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/virtualcards/enroll-user", 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_ENROLLED",
    "message": "Virtual card user successfully enrolled for MyBundlePay.",
    "mode": "TEST",
    "data": {
        "business_id": "xxxxx-b3f1-4759-8bb7-xxxxxx",
        "response": {
            "customer_id": "xxxxxxxxxxxxxx",
            "name": "Jane Doe",
            "emailAddress": "[email protected]",
            "phoneNumber": "+261330123456",
            "status": "active",
            "type": "individual",
            "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-11T02:04:17+01:00",
            "updatedAt": "2025-11-11T02:04:17+01:00"
        }
    }
}
Error Response (Validation)

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

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