API Reference
Integrate data bundles, admission forms, results checkers, and wallet services into your application with the SpeedyBuyGH REST API.
Authentication
All API requests require a valid API key
Authenticate by sending your API key as a Bearer
token in the
Authorization
header. Generate API keys from the
Console → API
Keys page.
Authorization: Bearer your_api_key_here
https://platform.speedybuygh.com/api/v1
All endpoints below are relative to this base URL.
Error Handling
All errors return a consistent JSON structure:
{
"success": false,
"message": "Error description here"
}
| Code | Meaning | Description |
|---|---|---|
| 200 | OK | Request successful |
| 401 | Unauthorized | Missing or invalid API key |
| 403 | Forbidden | IP not whitelisted |
| 404 | Not Found | Resource does not exist |
| 422 | Validation Error | Invalid parameters or insufficient funds |
| 503 | Service Unavailable | API access temporarily disabled |
Data Bundles
Browse and purchase internet data bundles across all networks.
/v1/bundles
List all active data bundles. Optionally filter by network.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
network
|
string | Optional | Filter by network key (e.g. mtn, vodafone, airteltigo) |
Response Example
{
"success": true,
"data": [
{
"id": 1,
"name": "1GB MTN Bundle",
"network": "mtn",
"network_name": "MTN",
"data_amount": "1GB",
"capacity": 1024,
"validity": "30 days",
"price": 5.50,
"is_popular": true
}
],
"count": 42
}
/v1/bundles/{network}
Get bundles filtered by a specific network.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
network
|
string | Required | Network key (URL segment) — e.g. mtn, vodafone, airteltigo |
Response Example
{
"success": true,
"data": [
{
"id": 5,
"name": "500MB Vodafone",
"network": "vodafone",
"data_amount": "500MB",
"capacity": 512,
"validity": "7 days",
"price": 3.00
}
]
}
Orders
Place, track, and list data bundle orders.
/v1/orders
Place a new data bundle order. Funds are deducted from your wallet.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
data_bundle_id
|
integer | Required | ID of the data bundle to purchase |
recipient_phone
|
string | Required | Recipient phone number (max 10 chars) |
quantity
|
integer | Optional | Quantity to order (default: 1, max: 1) |
Response Example
{
"success": true,
"message": "Order placed successfully",
"order_number": "ORD-20260226-ABC123",
"status": "processing",
"total_amount": 5.50,
"new_balance": 94.50
}
/v1/orders
List your orders with pagination.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
per_page
|
integer | Optional | Results per page (default: 20) |
Response Example
{
"success": true,
"data": [
{
"order_number": "ORD-20260226-ABC123",
"order_status": "completed",
"payment_status": "completed",
"delivery_status": "delivered",
"bundle": "1GB MTN Bundle",
"recipient_phone": "0241234567",
"total_amount": 5.50,
"created_at": "2026-02-26T07:00:00+00:00"
}
]
}
/v1/orders/{orderNumber}
Get details of a specific order by its order number.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
orderNumber
|
string | Required | Order number (URL segment) |
Response Example
{
"success": true,
"order": {
"order_number": "ORD-20260226-ABC123",
"order_status": "completed",
"payment_status": "completed",
"bundle": "1GB MTN Bundle",
"recipient_number": "0241234567",
"total_cost": 5.50,
"delivery_status": "delivered",
"created_at": "2026-02-26T07:00:00+00:00"
},
"server_check": null
}
/v1/orders/{orderNumber}/delivery-status
Check real-time delivery status of an order from the provider(server).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
orderNumber
|
string | Required | Order number (URL segment) |
Response Example
{
"success": true,
"order_number": "ORD-20260226-ABC123",
"network": "MTN",
"data_amount": "1GB MTN Bundle",
"recipient_number": "0241234567",
"total_cost": 5.50,
"order_status": "completed",
"delivery_status": "delivered",
"server_response": { ... }
}
/v1/delivery-speed
Get the current daily delivery speed notice from the provider(server).
Response Example
{
"success": true,
"message": "Delivery speed notice retrieved",
"notice": "All networks delivering within 5 minutes"
}
Wallet
Check your wallet balance and transaction history.
/v1/wallet/balance
Get your current wallet balance.
Response Example
{
"success": true,
"balance": 100.00,
"currency": "GHS"
}
/v1/wallet/transactions
List your wallet transaction history with pagination.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
per_page
|
integer | Optional | Results per page (default: 20) |
Response Example
{
"success": true,
"data": [
{
"reference": "TXN-ABC123",
"type": "debit",
"amount": 5.50,
"balance_after": 94.50,
"category": "order",
"description": "Data bundle purchase",
"status": "completed",
"created_at": "2026-02-26T07:00:00+00:00"
}
]
}
Admission Forms
Browse and purchase admission form vouchers for institutions.
/v1/admission-forms
List all active admission forms. Optionally filter by institution type.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
type
|
string | Optional | Filter by institution type (e.g. university, polytechnic, nursing) |
Response Example
{
"success": true,
"data": [
{
"id": 1,
"institution_type": "university",
"institution_name": "University of Ghana",
"year": "2026",
"description": "UG Undergraduate admission",
"price": 120.00,
"available_quantity": 50
}
],
"count": 15
}
/v1/admission-forms/{id}
Get details of a specific admission form.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id
|
integer | Required | Admission form ID (URL segment) |
Response Example
{
"success": true,
"data": {
"id": 1,
"institution_type": "university",
"institution_name": "University of Ghana",
"year": "2026",
"description": "UG Undergraduate admission",
"price": 120.00,
"available_quantity": 50
}
}
/v1/admission-forms/{id}/buy
Purchase admission form voucher(s). Deducts from your wallet and returns serial/pin.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id
|
integer | Required | Admission form ID (URL segment) |
quantity
|
integer | Required | Number of vouchers to purchase (min: 1) |
Response Example
{
"success": true,
"message": "Purchase successful",
"order_number": "ORD-20260226-XYZ789",
"items": [
{ "serial": "AF-001-234", "pin": "5678-9012" }
],
"total_cost": 120.00,
"new_balance": 380.00
}
Results Checkers
Browse and purchase exam results checker vouchers.
/v1/results-checkers
List all active results checkers. Optionally filter by exam type.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
type
|
string | Optional | Filter by exam type (e.g. wassce, bece, cssps) |
Response Example
{
"success": true,
"data": [
{
"id": 1,
"exam_type": "wassce",
"name": "WASSCE 2026 Checker",
"year": "2026",
"description": "Check your WASSCE results",
"price": 15.00,
"quantity": 200,
"is_popular": true
}
],
"count": 8
}
/v1/results-checkers/{id}
Get details of a specific results checker.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id
|
integer | Required | Results checker ID (URL segment) |
Response Example
{
"success": true,
"data": {
"id": 1,
"exam_type": "wassce",
"name": "WASSCE 2026 Checker",
"year": "2026",
"description": "Check your WASSCE results",
"price": 15.00,
"available_quantity": 200,
"is_popular": true
}
}
/v1/results-checkers/{id}/buy
Purchase results checker voucher(s). Deducts from your wallet and returns serial/pin.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id
|
integer | Required | Results checker ID (URL segment) |
quantity
|
integer | Required | Number of vouchers to purchase (min: 1) |
Response Example
{
"success": true,
"message": "Purchase successful",
"order_number": "ORD-20260226-RC456",
"items": [
{ "serial": "RC-001-567", "pin": "8901-2345" }
],
"total_cost": 15.00,
"new_balance": 85.00
}
User Info
Get the authenticated user profile
/api/user
Returns the profile of the user associated with the API key. Note: This endpoint uses /api/user (not /api/v1/).
{
"success": true,
"user": {
"id": 1,
"name": "SpeedyBuyGH User",
"email": "[EMAIL_ADDRESS]",
"phone": "0241234567",
"business_name": "SpeedyBuyGH",
"wallet_balance": 100.00
}
}
No matching sections
Try different keywords or