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.

API Documentation for Buying Data Bundles

Overview

This endpoint allows fintech developers and businesses to purchase data bundles for Nigerian networks via MyBundlePay's API.

Important: The amount must be passed as a string and correspond exactly to the price of the selected data bundle from the available bundles fetched via the /api/data-bundles endpoint.


POST https://mybundlepay.com/ng/api/buy-databundle

HEADERS

Authorization* string

Pass your {secret_key} as a Bearer token in the request header to authorize this call.

Content-Type* string

Must be set to application/json

BODY PARAMS

biller* string

The biller identifier for the data provider, e.g. mtn-data-ng. Use billers from the /api/data-bundles endpoint.

phone* string

The phone number to which the data bundle will be credited. Format as a local Nigerian number (e.g., 081xxxxxxxx).

bundle* string

The bundle code from available bundles, e.g. 100_30 for a 100MB bundle valid 30 days.

amount* string

The price of the selected bundle as a string. This must exactly match the price value from the bundle list (e.g., "10000").

REQUEST EXAMPLE


{
  "biller": "mtn-data-ng",
  "phone": "081xxxxxxxx",
  "bundle": "100_30",
  "amount": "10000",
  "type": 2
}

                        

RESPONSE

Success response example:


{
    "status": "success",
    "message": "Data purchase successful"
}

                            

Error response examples:


{
    "message": "Invalid token",
    "status": "failed"
}
{
    "message": "User not found",
    "status": "failed"
}
{
    "message": "Business not found",
    "status": "failed"
}
{
    "message": "KYC not approved",
    "status": "failed"
}
{
    "status": "failed",
    "message": "Account balance is insufficient"
}
{
    "status": "failed",
    "message": "Failed to process request"
}

                            

<?php
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://mybundlepay.com/ng/api/buy-databundle',
  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 =>'{
    "biller": "mtn-data-ng",
    "phone": "081xxxxxxxx",
    "bundle": "100_30",
    "amount": "10000",
    "type": 2
  }',
  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/buy-databundle', {
    biller: 'mtn-data-ng',
    phone: '081xxxxxxxx',
    bundle: '100_30',
    amount: '10000',
    type: 2
}, {
    headers: {
        'Authorization': 'Bearer {secret_key}',
        'Content-Type': 'application/json'
    }
})
.then(response => {
    console.log(response.data);
})
.catch(error => {
    console.error(error.response ? error.response.data : error.message);
});