Collect mobile money
POST
/payment-api/momopaySends a payment prompt to the customer's phone. By default the customer is charged the amount plus our collection fee and your wallet is credited with the amount once they approve. If your account is set to absorb the fee, the customer is charged the amount only and the fee is deducted from what is credited to you.
- The response is only an acknowledgement; the payment is pending until the customer approves the prompt.
- Idempotent on transaction_id: a repeated reference returns 422.
- Who pays the fee (fee_bearer: customer or merchant) is an account-level setting — contact support to change it. The response, status checks, history and webhook all report charges and net_amount so you can reconcile either way.
Parameters
amountdecimalrequiredAmount in GHS with up to two decimals.
phone_numberstringrequiredThe customer's mobile money number.
networkstringrequiredThe customer's network.
MTNTELECELAIRTELTIGOVDFATLtransaction_idstringrequiredYour unique reference, 12 to 36 characters.
callback_urlstringoptionalHTTPS URL that receives the webhook when the payment settles.
| Field | Type | Required | Description |
|---|---|---|---|
amount | decimal | required | Amount in GHS with up to two decimals. |
phone_number | string | required | The customer's mobile money number. |
network | string | required | The customer's network.MTNTELECELAIRTELTIGOVDFATL |
transaction_id | string | required | Your unique reference, 12 to 36 characters. |
callback_url | string | optional | HTTPS URL that receives the webhook when the payment settles. |
Errors
- 403Your account is not allowed for momo collection. Kindly Contact Support
- 422The transaction id has already been taken.
Request
curl -X POST "https://api.bulkclix.com/api/v1/payment-api/momopay" \ -H "x-api-key: YOUR_API_KEY" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "amount": 50, "phone_number": "0241234567", "network": "MTN", "transaction_id": "ORDER-2026-000123", "callback_url": "https://example.com/webhooks/bulkclix" }'
Response · 200
application/json
{ "message": "Payment Initiated Successful", "data": { "amount": "50.00", "charges": 0.5, "amount_to_pay": 50.5, "net_amount": 50, "fee_bearer": "customer", "transaction_id": "ORDER-2026-000123", "ext_transaction_id": "839201746512", "phone_number": "233241234567" } }
Webhook · POST to your callback_url
application/json
{ "amount": "50.00", "charges": "0.50", "net_amount": 50, "fee_bearer": "customer", "status": "success", "transaction_id": "ORDER-2026-000123", "ext_transaction_id": "839201746512", "phone_number": "233241234567" }