NetPulse Developer API
Authentication
x-api-key header. Keys are created in the developer dashboard and can be revoked at any time.curl -H "x-api-key: YOUR_KEY" \
https://buydata.space/api/v1/pingBase URL
https://buydata.space/api/v1Endpoints are versioned under /api/v1. Breaking changes will ship under a new version prefix so existing integrations keep working.
5 minute quick start
Step 1 — Get your API key
Create one in the developer dashboard. Keys start with np_live_… and are shown only once.
Step 2 — Top up your wallet
Add funds from the NetPulse home page. Every API purchase is debited atomically from your wallet balance.
Step 3 — Test your key
curl -H "x-api-key: YOUR_KEY" \
https://buydata.space/api/v1/ping{ "ok": true }Step 4 — Browse available products
# Data bundles
curl -H "x-api-key: YOUR_KEY" \
https://buydata.space/api/v1/packages
# Result checkers
curl -H "x-api-key: YOUR_KEY" \
https://buydata.space/api/v1/checkersStep 5 — Make your first purchase
# Buy a data bundle
curl -X POST https://buydata.space/api/v1/purchase \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"network":"MTN","phoneNumber":"0241234567","capacity":"1GB"}'
# Buy a WAEC checker pin
curl -X POST https://buydata.space/api/v1/checkers/purchase \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"waec","quantity":1}'/api/v1/packagesList every data bundle available for purchase across MTN, Telecel, and AirtelTigo. MTN Mashup offers are returned separately under mashup.
No request body. Pass your API key in the header.
curl -H "x-api-key: YOUR_KEY" \
"https://buydata.space/api/v1/packages"{
"packages": [
{
"network": "MTN",
"capacity": "1GB",
"price": 3.70,
"validity": "30 Days"
}
],
"mashup": [
{
"product": "mashup",
"network": "MTN",
"capacity": "10",
"id": "mashup-10",
"size": "Mashup 10GB",
"price": 14.27,
"validity": "30 days",
"allowances": {
"dataAllowance": "511 MB",
"mtnMinutes": 176,
"otherMinutes": 22,
"sms": 45,
"validityDays": 30
}
}
]
}/api/v1/purchaseBuy and deliver a data bundle to a Ghana phone number.
| Parameter | Type | Required | Description |
|---|---|---|---|
| network | string | Required | One of MTN, Telecel, AirtelTigo. |
| product | string | Optional | Use mashup for MTN Mashup; omit for ordinary data. |
| phoneNumber | string | Required | Ghana mobile number, e.g. 0241234567. |
| capacity | string | Required | Exact size from /packages, e.g. 1GB. |
| reference | string | Optional | Idempotency key. Re-sending returns the original order. |
curl -X POST https://buydata.space/api/v1/purchase \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"network": "MTN",
"phoneNumber": "0241234567",
"capacity": "1GB",
"reference": "my-ref-001"
}'Mashup combo packs are bought through this same endpoint — send product: "mashup" with the capacity identifier from the catalogue. The full request, response and error reference lives in the MTN Mashup section.
{
"reference": "NPAPI-1234-abc",
"status": "processing",
"price": 3.70,
"balance": 8.00
}status starts as processing and typically settles to completed within ~4 seconds. Poll /order-status for the final state./api/v1/order-status/{reference}Check the current status of a previously created bundle order.
curl -H "x-api-key: YOUR_KEY" \
"https://buydata.space/api/v1/order-status/NPAPI-1234-abc"{
"reference": "NPAPI-1234-abc",
"network": "MTN",
"capacity": "1GB",
"status": "completed",
"createdAt": "2026-06-15T10:24:00.000Z"
}status transitions from processing to completed or failed.
Overview
Mashup rows come back on GET /api/v1/packages in their own mashup array, never mixed with ordinary data rows. Buy with POST /api/v1/purchase and track with GET /api/v1/order-status/{reference}.
{
"product": "mashup",
"network": "MTN",
"capacity": "10",
"id": "mashup-10",
"size": "Mashup 10GB",
"price": 14.27,
"validity": "30 days",
"allowances": {
"dataAllowance": "511 MB",
"mtnMinutes": 176,
"otherMinutes": 22,
"sms": 45,
"validityDays": 30
}
}capacity such as "10" identifies the package — it is not the data allowance. The real contents ship with every row in allowances: dataAllowance, mtnMinutes, otherMinutes, sms and validityDays. Always read them from the live catalogue./api/v1/purchaseBuy an MTN Mashup combo pack. Same endpoint as ordinary data — the only difference is product: mashup.
| Parameter | Type | Required | Description |
|---|---|---|---|
| product | string | Required | Always mashup for a Mashup order. |
| network | string | Required | Always MTN. Mashup is not offered on other networks. |
| capacity | string | Required | Package identifier from the catalogue, e.g. 10, 20, 30. |
| phoneNumber | string | Required | Ghana mobile number to receive the combo pack. |
| reference | string | Optional | Idempotency key. Re-sending returns the original order. |
curl -X POST https://buydata.space/api/v1/purchase \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"product": "mashup",
"network": "MTN",
"capacity": "10",
"phoneNumber": "0241234567",
"reference": "my-mashup-ref-001"
}'{
"reference": "my-mashup-ref-001",
"status": "processing",
"price": 14.27,
"balance": 8.00
}/api/v1/order-status/{reference}Track a Mashup order exactly like a data order — the same endpoint and the same statuses apply.
curl -H "x-api-key: YOUR_KEY" \
"https://buydata.space/api/v1/order-status/my-mashup-ref-001"{
"reference": "my-mashup-ref-001",
"network": "MTN",
"capacity": "Mashup 10GB",
"status": "completed",
"createdAt": "2026-06-15T10:24:00.000Z"
}Mashup orders return the same status values as data orders, so one tracker covers both products.
Overview
/api/v1/checkersList available result checker types and current prices.
curl -H "x-api-key: YOUR_KEY" \
"https://buydata.space/api/v1/checkers"{
"success": true,
"checkers": [
{
"id": "waec",
"name": "WAEC Result Checker",
"description": "Check WASSCE results",
"price": 17.50,
"available": true
},
{
"id": "bece",
"name": "BECE Result Checker",
"description": "Check BECE results",
"price": 17.50,
"available": true
}
]
}/api/v1/checkers/purchasePurchase one or more result checker pins in a single call.
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | Required | waec or bece. |
| quantity | integer | Optional | Number of pins. Default 1, max 50 per request (tier-limited). |
| reference | string | Optional | Your unique ID to prevent duplicates. |
curl -X POST https://buydata.space/api/v1/checkers/purchase \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "waec",
"quantity": 1
}'curl -X POST https://buydata.space/api/v1/checkers/purchase \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "bece",
"quantity": 5,
"reference": "reseller-2026-06-23"
}'{
"success": true,
"reference": "NPCHK-1712345678901-abc123",
"type": "waec",
"quantity": 1,
"unit_price": 17.50,
"total_cost": 17.50,
"balance_after": 45.00,
"pins": [
{
"serial": "123456789",
"pin": "987654321",
"expires": "2026-12-31"
}
]
}/api/v1/checkers/{reference}Look up a previous checker purchase by reference. Only the buyer can read their own pins.
curl -H "x-api-key: YOUR_KEY" \
"https://buydata.space/api/v1/checkers/NPCHK-1712345678901-abc123"{
"success": true,
"reference": "NPCHK-1712345678901-abc123",
"type": "waec",
"status": "completed",
"quantity": 1,
"unit_price": 17.50,
"total_cost": 17.50,
"pins": [
{ "serial": "123456789", "pin": "987654321", "expires": "2026-12-31" }
],
"created_at": "2026-06-23T15:00:00.000Z"
}/api/v1/checkers/historyList your checker purchases made via the API. Pins are not included — fetch them from the single-reference endpoint.
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | Optional | Filter by waec or bece. |
| limit | integer | Optional | Results per page. Default 20, max 100. |
| page | integer | Optional | Page number. Default 1. |
curl -H "x-api-key: YOUR_KEY" \
"https://buydata.space/api/v1/checkers/history?type=waec&limit=20&page=1"{
"success": true,
"total": 45,
"page": 1,
"limit": 20,
"purchases": [
{
"reference": "NPCHK-1712345678901-abc123",
"type": "waec",
"quantity": 1,
"total_cost": 17.50,
"status": "completed",
"created_at": "2026-06-23T15:00:00.000Z"
}
]
}/api/v1/balanceReturn the current wallet balance for the authenticated API key.
curl -H "x-api-key: YOUR_KEY" \
"https://buydata.space/api/v1/balance"{ "balance": 12.50, "currency": "GHS" }/api/v1/pingConfirm connectivity and validate that your API key is active.
curl -H "x-api-key: YOUR_KEY" \
"https://buydata.space/api/v1/ping"{ "ok": true }Error codes
error (or success: false) field describing the problem.Rate limits
| Tier | Per minute | Per hour | Per day |
|---|---|---|---|
| Starter | 10 | 50 | 200 |
| Business | 50 | 500 | 2,000 |
| Enterprise | ∞ | ∞ | ∞ |
| Tier | Per minute | Per hour | Max pins / request |
|---|---|---|---|
| Starter | 5 | 20 | 5 |
| Business | 30 | 200 | 20 |
| Enterprise | ∞ | ∞ | 50 |
{
"error": "Rate limit exceeded",
"retryAfter": 60,
"tier": "starter",
"upgradeMessage": "Contact support to upgrade to Business tier"
}