Key Requirements
Retrieve your API keys from your dashboard by following the steps on our
Authentication page. Use your public API key for
all collection requests.
Set
X-TenantID to test while developing and live when processing real
payments. X-ProductID defaults to "app" for all requests.POST requests. See our Webhooks guide for setup instructions.
Supported currencies and countries
Bank codes (customer_bank_code) differ per currency and country.
The full list of Payaza MoMo collection codes is availablehere.
Phone number format
Thecustomer_number field requires the phone number in international format (country code + number, no + or spaces).
How collections work
Mobile Money collections follow a different flow from card payments because the customer must approve the payment on their own phone. The flow varies slightly depending on the collection type:Standard MoMo flow (GHS, KES, UGX, TZS, XAF, LRD)
Standard MoMo flow (GHS, KES, UGX, TZS, XAF, LRD)
- Your server calls Process Collection with the customer’s phone number and amount.
- Payaza instructs the telecom network to send a USSD prompt to the customer’s phone.
- The customer sees a message like “Approve payment of GHS 50 to Business X?” and enters their MoMo PIN.
- Your server uses the Transaction Status Query API or listens for a webhook to confirm success or failure.
XOF flow — Côte d'Ivoire and Benin (OTP is only required for Orange CIV XOF Collections)
XOF flow — Côte d'Ivoire and Benin (OTP is only required for Orange CIV XOF Collections)
- Your server calls Process Collection.
- Check the
requires_otpfield in the response:- If
false— the customer is prompted directly on their phone. Check for the status. - If
true— the customer receives an OTP via SMS. Your UI must collect the OTP and submit it via XOF Process OTP API before the payment can proceed.
- If
- After the OTP is submitted (Required for Orange CIV XOF Collections), use the Transaction Status Query or listen for a webhook.
ZAR EFT and Capitec flow — South Africa
ZAR EFT and Capitec flow — South Africa
- Your server calls Process Collection with
currency_code: “ZAR”. - The response includes a
payment_completion_url. Redirect the customer to this URL to complete their EFT or Capitec payment. - After the customer completes the bank redirect, Use the Transaction Status Query API or listen for a webhook.
SLE flow — Sierra Leone (Afrimoney, Orange Money)
SLE flow — Sierra Leone (Afrimoney, Orange Money)
- Your server calls Process Collection with
currency_code: “SLE”and the customer’s Sierra Leone mobile money number. - Payaza instructs the mobile money network (Afrimoney or Orange Money) to send a payment prompt to the customer’s phone.
- The customer approves the payment on their device.
- Use the Transaction Status Query API or listen for a webhook to confirm the final outcome.
Step 1 — Process Collection
Initiate a collection from the customer’s Mobile Money wallet.Step 2 — XOF Process OTP (XOF only)
This step only applies to XOF collections where the initial Process
Collection response returned
requires_otp: true. This applies to all Orange
CIV Money transactions. Skip to Step 3 for all other currencies.requires_otp is true, the customer receives an OTP on their phone. Your UI must collect this code from the customer and submit it before the payment can be authorised.
Use the payment_token, payee, payment_method, and transaction_channel values directly from the Process Collection response.
Test credentials for XOF:
Phone number (no OTP required):
Phone number (OTP required):
2250004768072251114462945 - Test OTP value: 4567Step 3 — Transaction Status Query
Check the final status of a collection. Use this endpoint to confirm whether the payment was successful, failed, or is still pending. When to use it: Use this endpoint after initiating a collection (and after submitting the OTP for XOF), or use it as a fallback if a webhook is not received.Webhooks
Payaza sends webhook events for both successful and failed collections. Webhooks are the recommended way to receive the final status rather than continuous polling.
Sample
Successful Collection payload
Failed Collection payload
Always verify the webhook signature before processing the payload. See the
Webhooks guide for verification steps.
Response Codes
Developer notes
- Always generate a unique
transaction_referenceper collection to avoid duplicate errors. - A
response_code: "09"on Process Collection is normal — it means the prompt was sent, not that the collection succeeded. - For XOF, check
requires_otpin the Process Collection response before deciding whether to show an OTP input field in your UI. - For ZAR, check
redirect_customer_to_url_processingand redirect the customer topayment_completion_urlto complete payment via their bank. - Webhooks are sent for both successful and failed collections. Use Transaction Status Query as a fallback when a webhook is not received within your expected timeout.
- Collections are not retried automatically. If a collection fails or times out, your application must handle the retry logic and generate a new
transaction_reference. - Use the bank code that matches both the currency and the telecom network of the customer’s MoMo account. Mismatched bank codes will fail silently on some networks.