The Monnify Bills Payment feature allows all Monnify merchants to Vend and Process Bills using their existing Monnify account. This includes services like Utility Bills, Airtime Topup, and other essential bills.
Access to the Bills Payment product is secured using Bearer Token authentication.
To use the service, first obtain an Access Token by authenticating with your API Key and Client Secret, which you can find on your Monnify dashboard. Include this token in the Authorization: Bearer `token` header of all requests.
Integrating the Bill Payment product involves a high-level sequence of steps to ensure customers select the correct service and that their details are validated before any funds are debited.
| Step | Action | Description | Key Requirement |
|---|---|---|---|
| 1 | Get Categories | Display a list of general bill types (e.g., ELECTRICITY, CABLE_TV) for the user to select from. | None |
| 2 | List Billers | Show all available service providers (e.g., specific electricity companies) that fall under the selected category. | Category Code |
| 3 | List Products | Fetch the specific products offered by the selected biller (e.g., Prepaid Meter, Postpaid Meter, various Data Bundles). | Biller Code |
| 4 | Validate Customer | Required Step. The customer enters their unique identifier (e.g., meter number, phone number). The system validates these details before payment can proceed. | Product Code & Customer ID |
| 5 | Vend Bill (Process Payment) | Once validation is successful, initiate the actual payment transaction by sending the amount and the unique validation reference. | Validation Reference |
| 6 | Check Transaction Status (Requery) | Check the current status of a vend request (e.g., if it is still IN_PROGRESS, SUCCESS, or FAILED). Note: This is not used to initiate a new payment — it is only for status verification. | Transaction Reference |
Consuming the Monnify Bills Payment service generally involves three primary phases: Discovery, Validation, and Vending.
categoryCode.billerCode.validationReference is required for the product.productCode and customerId.vendInstruction object.validationReference will be included and must be used in the vend request.productCodecustomerIdvendAmountvendReference (could be random but should be unique for you per transaction)validationReference only when requireValidationRef was true in the validation response.validationReference when the product requires it.validationReference when requireValidationRef is false.transactionReferencevendReferencevendStatus (which will be SUCCESS when the payment is completed)The Validation step (Step 4) is critical. Before you can process a bill (Step 5), you must successfully validate the customer's ID against the chosen product. A successful validation generates a unique Validation Reference, which acts as a secure key required to successfully complete the final Vend request. This ensures that the payment is directed to the correct customer account.
If the validation step fails (e.g. invalid customerId), the API will return an error response — you should handle this by showing an appropriate error message to the user and not calling the vend endpoint. In case the vend call returns an IN_PROGRESS status, you should poll the “Check Transaction Status” endpoint until you receive a terminal status (SUCCESS or FAILED) or until a timeout / retry limit is reached.
For detailed information on URLs, HTTP methods, and data fields for each step above, see the Bill Payment API Reference
How would you rate your experience?