curl --request POST \
--url https://api.nomba.com/v2/bill/electricity \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'accountId: <accountid>' \
--data '
{
"disco": "jed",
"merchantTxRef": "12345",
"payerName": "John Doe",
"amount": 1000,
"customerId": "customer123",
"meterType": "prepaid"
}
'import requests
url = "https://api.nomba.com/v2/bill/electricity"
payload = {
"disco": "jed",
"merchantTxRef": "12345",
"payerName": "John Doe",
"amount": 1000,
"customerId": "customer123",
"meterType": "prepaid"
}
headers = {
"accountId": "<accountid>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
accountId: '<accountid>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
disco: 'jed',
merchantTxRef: '12345',
payerName: 'John Doe',
amount: 1000,
customerId: 'customer123',
meterType: 'prepaid'
})
};
fetch('https://api.nomba.com/v2/bill/electricity', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nomba.com/v2/bill/electricity",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'disco' => 'jed',
'merchantTxRef' => '12345',
'payerName' => 'John Doe',
'amount' => 1000,
'customerId' => 'customer123',
'meterType' => 'prepaid'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"accountId: <accountid>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nomba.com/v2/bill/electricity"
payload := strings.NewReader("{\n \"disco\": \"jed\",\n \"merchantTxRef\": \"12345\",\n \"payerName\": \"John Doe\",\n \"amount\": 1000,\n \"customerId\": \"customer123\",\n \"meterType\": \"prepaid\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("accountId", "<accountid>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nomba.com/v2/bill/electricity")
.header("accountId", "<accountid>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"disco\": \"jed\",\n \"merchantTxRef\": \"12345\",\n \"payerName\": \"John Doe\",\n \"amount\": 1000,\n \"customerId\": \"customer123\",\n \"meterType\": \"prepaid\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nomba.com/v2/bill/electricity")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["accountId"] = '<accountid>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"disco\": \"jed\",\n \"merchantTxRef\": \"12345\",\n \"payerName\": \"John Doe\",\n \"amount\": 1000,\n \"customerId\": \"customer123\",\n \"meterType\": \"prepaid\"\n}"
response = http.request(request)
puts response.read_body{
"code": "200",
"description": "SUCCESS",
"message": "Transaction completed Successfully",
"status": true,
"data": {
"id": "API-PHCN-28958-37da63af-8daa-4cb7-9070-e32920e38c12",
"status": "SUCCESS",
"type": "phcn",
"amount": 1000,
"source": "api",
"sourceUserId": null,
"customerBillerId": "12345678902",
"productId": "benin",
"meta": {
"payment_type": "prepaid",
"api_rrn": null,
"biller_account_name": "John Doe",
"rrn": null,
"api_account_id": "0167288-d989-460a-bbde-9842f2b4320f",
"api_client_id": "05cc8ef7-3aa6-408a-9cde-1a91fd20f592",
"user_id": "0167288-d989-460a-bbde-9842f2b4320f",
"merchantTxRef": "310120260017AM",
"allowDuplicate": true,
"sender_name": "Josh Doe",
"idempotentKey": "0167288-d989-460a-bbde-9842f2b4320f_310120260017AM",
"pos_withdrawal_id": "0167288-d989-460a-bbde-9842f2b4320f_310120260017AM",
"userName": "John Doe",
"isCorporate": "true",
"currency": "NGN",
"hooksEligible": "true",
"isSubscribedToSavingsService": false,
"isSubscribedToLoanService": false,
"txnAlertEligible": false,
"banking_entity_id": 189585760,
"banking_entity_user_id": 188595905,
"banking_entity_type": "CORPORATE",
"transactionCategory": "Bills & Utility",
"meterNumber": "12345678901",
"amount_charged": "1000.0",
"paymentVendor": "wallet",
"wallet_balance": "3055.85",
"wallet_currency": "NGN",
"paymentVendorReference": "6ab8d20521deef068755e6a2",
"gatewayMessage": "Token: 43557934939308375700",
"billingServiceResponse": "Token: 43557934939308375700",
"phcnToken": "43557934939308375700",
"phcnCustomerName": "Mr Johnson",
"phcnCustomerAddress": "29 Okabiri Street ",
"phcnCustomerPhone": "09012345678",
"phcnVendToken": "14557934939308375701",
"phcnVendUnits": "16.4",
"meterDebt": "unknown",
"units": "16.4",
"income": "21.0",
"paymentFee": 0,
"tx_revenue": "21.0"
},
"userId": null,
"timeCreated": "2026-09-27T08:21:25.582+00:00"
}
}{
"code": "201",
"description": "PROCESSING",
"message": "Success",
"status": true,
"data": {
"id": "API-PHCN-28958-37da63af-8daa-4cb7-9070-e32920e38c12",
"status": "PROCESSING",
"type": "phcn",
"amount": 1000,
"source": "api",
"sourceUserId": null,
"customerBillerId": "12345678902",
"productId": "benin",
"meta": {
"payment_type": "prepaid",
"api_rrn": null,
"biller_account_name": "John Doe",
"rrn": null,
"api_account_id": "0167288-d989-460a-bbde-9842f2b4320f",
"api_client_id": "05cc8ef7-3aa6-408a-9cde-1a91fd20f592",
"user_id": "0167288-d989-460a-bbde-9842f2b4320f",
"merchantTxRef": "310120260017AM",
"allowDuplicate": true,
"sender_name": "Josh Doe",
"idempotentKey": "0167288-d989-460a-bbde-9842f2b4320f_310120260017AM",
"pos_withdrawal_id": "0167288-d989-460a-bbde-9842f2b4320f_310120260017AM",
"userName": "John Doe",
"isCorporate": "true",
"currency": "NGN",
"hooksEligible": "true",
"isSubscribedToSavingsService": false,
"isSubscribedToLoanService": false,
"txnAlertEligible": false,
"banking_entity_id": 189585760,
"banking_entity_user_id": 188595905,
"banking_entity_type": "CORPORATE",
"transactionCategory": "Bills & Utility",
"meterNumber": "12345678901",
"amount_charged": "1000.0",
"paymentVendor": "wallet",
"wallet_balance": "3055.85",
"wallet_currency": "NGN"
},
"userId": null,
"timeCreated": "2026-09-27T08:21:25.582+00:00"
}
}{
"code": "400",
"description": "Request failed."
}{
"code": "401",
"description": "Unauthorized"
}{
"code": "403",
"description": "Forbidden"
}{
"code": "404",
"description": "Record not found"
}{
"code": "429",
"description": "Too many requests"
}{
"code": "500",
"description": "Server error"
}{
"code": "400",
"description": "Request failed."
}Vend electricity via parent account (v2)
You can use this endpoint to vend electricity via parent account.
curl --request POST \
--url https://api.nomba.com/v2/bill/electricity \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'accountId: <accountid>' \
--data '
{
"disco": "jed",
"merchantTxRef": "12345",
"payerName": "John Doe",
"amount": 1000,
"customerId": "customer123",
"meterType": "prepaid"
}
'import requests
url = "https://api.nomba.com/v2/bill/electricity"
payload = {
"disco": "jed",
"merchantTxRef": "12345",
"payerName": "John Doe",
"amount": 1000,
"customerId": "customer123",
"meterType": "prepaid"
}
headers = {
"accountId": "<accountid>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
accountId: '<accountid>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
disco: 'jed',
merchantTxRef: '12345',
payerName: 'John Doe',
amount: 1000,
customerId: 'customer123',
meterType: 'prepaid'
})
};
fetch('https://api.nomba.com/v2/bill/electricity', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nomba.com/v2/bill/electricity",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'disco' => 'jed',
'merchantTxRef' => '12345',
'payerName' => 'John Doe',
'amount' => 1000,
'customerId' => 'customer123',
'meterType' => 'prepaid'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"accountId: <accountid>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nomba.com/v2/bill/electricity"
payload := strings.NewReader("{\n \"disco\": \"jed\",\n \"merchantTxRef\": \"12345\",\n \"payerName\": \"John Doe\",\n \"amount\": 1000,\n \"customerId\": \"customer123\",\n \"meterType\": \"prepaid\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("accountId", "<accountid>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nomba.com/v2/bill/electricity")
.header("accountId", "<accountid>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"disco\": \"jed\",\n \"merchantTxRef\": \"12345\",\n \"payerName\": \"John Doe\",\n \"amount\": 1000,\n \"customerId\": \"customer123\",\n \"meterType\": \"prepaid\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nomba.com/v2/bill/electricity")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["accountId"] = '<accountid>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"disco\": \"jed\",\n \"merchantTxRef\": \"12345\",\n \"payerName\": \"John Doe\",\n \"amount\": 1000,\n \"customerId\": \"customer123\",\n \"meterType\": \"prepaid\"\n}"
response = http.request(request)
puts response.read_body{
"code": "200",
"description": "SUCCESS",
"message": "Transaction completed Successfully",
"status": true,
"data": {
"id": "API-PHCN-28958-37da63af-8daa-4cb7-9070-e32920e38c12",
"status": "SUCCESS",
"type": "phcn",
"amount": 1000,
"source": "api",
"sourceUserId": null,
"customerBillerId": "12345678902",
"productId": "benin",
"meta": {
"payment_type": "prepaid",
"api_rrn": null,
"biller_account_name": "John Doe",
"rrn": null,
"api_account_id": "0167288-d989-460a-bbde-9842f2b4320f",
"api_client_id": "05cc8ef7-3aa6-408a-9cde-1a91fd20f592",
"user_id": "0167288-d989-460a-bbde-9842f2b4320f",
"merchantTxRef": "310120260017AM",
"allowDuplicate": true,
"sender_name": "Josh Doe",
"idempotentKey": "0167288-d989-460a-bbde-9842f2b4320f_310120260017AM",
"pos_withdrawal_id": "0167288-d989-460a-bbde-9842f2b4320f_310120260017AM",
"userName": "John Doe",
"isCorporate": "true",
"currency": "NGN",
"hooksEligible": "true",
"isSubscribedToSavingsService": false,
"isSubscribedToLoanService": false,
"txnAlertEligible": false,
"banking_entity_id": 189585760,
"banking_entity_user_id": 188595905,
"banking_entity_type": "CORPORATE",
"transactionCategory": "Bills & Utility",
"meterNumber": "12345678901",
"amount_charged": "1000.0",
"paymentVendor": "wallet",
"wallet_balance": "3055.85",
"wallet_currency": "NGN",
"paymentVendorReference": "6ab8d20521deef068755e6a2",
"gatewayMessage": "Token: 43557934939308375700",
"billingServiceResponse": "Token: 43557934939308375700",
"phcnToken": "43557934939308375700",
"phcnCustomerName": "Mr Johnson",
"phcnCustomerAddress": "29 Okabiri Street ",
"phcnCustomerPhone": "09012345678",
"phcnVendToken": "14557934939308375701",
"phcnVendUnits": "16.4",
"meterDebt": "unknown",
"units": "16.4",
"income": "21.0",
"paymentFee": 0,
"tx_revenue": "21.0"
},
"userId": null,
"timeCreated": "2026-09-27T08:21:25.582+00:00"
}
}{
"code": "201",
"description": "PROCESSING",
"message": "Success",
"status": true,
"data": {
"id": "API-PHCN-28958-37da63af-8daa-4cb7-9070-e32920e38c12",
"status": "PROCESSING",
"type": "phcn",
"amount": 1000,
"source": "api",
"sourceUserId": null,
"customerBillerId": "12345678902",
"productId": "benin",
"meta": {
"payment_type": "prepaid",
"api_rrn": null,
"biller_account_name": "John Doe",
"rrn": null,
"api_account_id": "0167288-d989-460a-bbde-9842f2b4320f",
"api_client_id": "05cc8ef7-3aa6-408a-9cde-1a91fd20f592",
"user_id": "0167288-d989-460a-bbde-9842f2b4320f",
"merchantTxRef": "310120260017AM",
"allowDuplicate": true,
"sender_name": "Josh Doe",
"idempotentKey": "0167288-d989-460a-bbde-9842f2b4320f_310120260017AM",
"pos_withdrawal_id": "0167288-d989-460a-bbde-9842f2b4320f_310120260017AM",
"userName": "John Doe",
"isCorporate": "true",
"currency": "NGN",
"hooksEligible": "true",
"isSubscribedToSavingsService": false,
"isSubscribedToLoanService": false,
"txnAlertEligible": false,
"banking_entity_id": 189585760,
"banking_entity_user_id": 188595905,
"banking_entity_type": "CORPORATE",
"transactionCategory": "Bills & Utility",
"meterNumber": "12345678901",
"amount_charged": "1000.0",
"paymentVendor": "wallet",
"wallet_balance": "3055.85",
"wallet_currency": "NGN"
},
"userId": null,
"timeCreated": "2026-09-27T08:21:25.582+00:00"
}
}{
"code": "400",
"description": "Request failed."
}{
"code": "401",
"description": "Unauthorized"
}{
"code": "403",
"description": "Forbidden"
}{
"code": "404",
"description": "Record not found"
}{
"code": "429",
"description": "Too many requests"
}{
"code": "500",
"description": "Server error"
}{
"code": "400",
"description": "Request failed."
}code field in the response reflects the HTTP status code of the response. For example, 200 means the request completed successfully, and 201 means it was accepted and is still being processed.Authorizations
Nomba authenticates API calls with OAuth2 HTTP bearer tokens. There are two methods of authentication; Client-Credentials method and PKCE (Proof Key for Code Exchange) method. In each of the methods, You will get an ACCESS_TOKEN. You need to use an "Authorization" HTTP header to provide your ACCESS_TOKEN. For example: Authorization: {ACCESS_TOKEN}.
Headers
The parent accountId of the business.
"890022ce-bae0-45c1-9b9d-ee7872e6ca27"
Body
The request payload required to vend electricity
Response
OK - your request was successful.
Response code. This reflects the HTTP status code of the response, e.g. 200 when the request completed successfully and 201 when it was accepted and is still being processed.
200, 201, 400, 401, 403, 429, 500 "200"
Response description
"SUCCESS"
Show child attributes
Show child attributes
Response message
"Transaction completed Successfully"
Whether the request was successful
true