Bill Payments
Pay utility and service bills via the Bridge API using bill product codes
Bill Payments
Pay supported bills by posting the customer or account identifier and the bill product code (nw). The API accepts the request and processes it asynchronously; final status is delivered to your callback URL.
Endpoint
POST https://api.bridgeagw.com/pay_billRequest Headers
Authorization: Basic <base64_encoded_credentials>
Content-Type: application/jsonRequest Body
{
"service_id": 55,
"reference": "Bill payment",
"transaction_id": "ksnyew2kei4a-alnlapk-uou",
"trans_type": "BLP",
"amount": 5,
"account_number": "100000000001",
"nw": "GOT",
"callback_url": "https://webhook.site/0b429e73-ce5c-420b-af82-a346fb577c43",
"request_time": "2025-10-03 23:50"
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
service_id | integer | Yes | Your service identifier |
reference | string | Yes | Payment reference or description |
transaction_id | string | Yes | Unique transaction identifier |
trans_type | string | Yes | Must be BLP for bill payment |
amount | number | Yes | Payment amount |
account_number | string | Yes | Customer or account number for the bill |
nw | string | Yes | Bill product code (see table below) |
callback_url | string | Yes | URL for asynchronous status notifications |
request_time | string | Yes | Request timestamp |
Supported bill products (nw)
| Code | Service |
|---|---|
GOT | GoTV |
GTM | GoTV Max |
DST | DSTv |
MPO | MTN Postpaid |
MPP | MTN Prepaid Data |
VPO | Vodafone Postpaid |
VPP | Vodafone Prepaid Data |
SFL | Surfline |
TLS | Telesol |
STT | Startimes |
ECG | ECG Postpaid |
VBB | Vodafone Broadband (ADSL) |
BXO | Box Office |
EPP | ECG Prepaid |
GHW | Ghana Water |
SCP | School Placement |
WRE | WAEC Result |
Response
Accepted (202)
{
"response_message": "Request successfully received for processing",
"response_code": "202"
}Example Usage
curl -X POST "https://api.bridgeagw.com/pay_bill" \
-H "Authorization: Basic <your_credentials>" \
-H "Content-Type: application/json" \
-d '{
"service_id": 55,
"reference": "Bill payment",
"transaction_id": "ksnyew2kei4a-alnlapk-uou",
"trans_type": "BLP",
"amount": 5,
"account_number": "100000000001",
"nw": "GOT",
"callback_url": "https://your-site.com/webhook/bill-status",
"request_time": "2025-10-03 23:50"
}'const response = await fetch('https://api.bridgeagw.com/pay_bill', {
method: 'POST',
headers: {
'Authorization': 'Basic <your_credentials>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
service_id: 55,
reference: "Bill payment",
transaction_id: "ksnyew2kei4a-alnlapk-uou",
trans_type: "BLP",
amount: 5,
account_number: "100000000001",
nw: "GOT",
callback_url: "https://your-site.com/webhook/bill-status",
request_time: "2025-10-03 23:50"
})
});
const result = await response.json();
console.log(result);import requests
url = "https://api.bridgeagw.com/pay_bill"
headers = {
"Authorization": "Basic <your_credentials>",
"Content-Type": "application/json"
}
data = {
"service_id": 55,
"reference": "Bill payment",
"transaction_id": "ksnyew2kei4a-alnlapk-uou",
"trans_type": "BLP",
"amount": 5,
"account_number": "100000000001",
"nw": "GOT",
"callback_url": "https://your-site.com/webhook/bill-status",
"request_time": "2025-10-03 23:50"
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
print(result)Sandbox testing
Bill payment in sandbox uses 12-digit account numbers specific to each biller, not mobile MSISDNs. Passing a mobile number (e.g. 0244000001) with a biller nw code returns 019.
Last-digit rule: The last digit of the 12-digit account number controls the outcome — digits 0–8 produce a success, digit 9 produces a failure. The same rule applies to all billers.
Sandbox account numbers by biller
nw | Biller | Success account (…001) | Failure account (…009) |
|---|---|---|---|
GOT | GoTV | 100000000001 | 100000000009 |
GTM | GoTV Max | 101000000001 | 101000000009 |
DST | DSTv | 102000000001 | 102000000009 |
MPO | MTN Postpaid | 103000000001 | 103000000009 |
MPP | MTN Prepaid Data | 104000000001 | 104000000009 |
VPO | Vodafone Postpaid | 105000000001 | 105000000009 |
VPP | Vodafone Prepaid Data | 106000000001 | 106000000009 |
SFL | Surfline | 107000000001 | 107000000009 |
TLS | Telesol | 108000000001 | 108000000009 |
STT | StarTimes | 109000000001 | 109000000009 |
ECG | ECG Postpaid | 200000000001 | 200000000009 |
VBB | Vodafone Broadband | 201000000001 | 201000000009 |
BXO | Box Office | 202000000001 | 202000000009 |
EPP | ECG Prepaid | 203000000001 | 203000000009 |
GHW | Ghana Water | 204000000001 | 204000000009 |
SCP | School Placement | 205000000001 | 205000000009 |
WRE | WAEC Result | 206000000001 | 206000000009 |
Account number pattern: for biller at index N in the table (0-based), accounts are 100000000000 + N × 1000000000 through …000009. The payment_option field is optional — the API defaults it to BLP when omitted.
| Scenario | account_number | nw | Expected response_code | Callback sent? |
|---|---|---|---|---|
| Success (GoTV) | 100000000001 | GOT | 202 | Yes → 000/SUCCESS |
| Failure (GoTV) | 100000000009 | GOT | 015 | No |
| Success (ECG Prepaid) | 203000000001 | EPP | 202 | Yes → 000/SUCCESS |
| Success (Ghana Water) | 204000000001 | GHW | 202 | Yes → 000/SUCCESS |
| Invalid account | 3928978903232 | EPP | 019 | No |
| Wrong pairing (MSISDN + biller) | 0244000001 | GOT | 019 | No |
| Limit exceeded | 100000000001 | GOT | 016 (amount > 10000) | No |
Example sandbox request (ECG Prepaid):
{
"service_id": 12345,
"reference": "ECG top-up",
"transaction_id": "BLP-SANDBOX-001",
"trans_type": "BLP",
"amount": 20,
"account_number": "203000000001",
"nw": "EPP",
"callback_url": "https://your-site.com/webhook/bill-status",
"request_time": "2026-01-15T14:30:00Z"
}Callbacks
After you receive 202, rely on your callback_url for final status. See Callbacks.