Supported currencies and payment methods
The v3 gateway supports the currencies configured in your Hello Clever Merchant Dashboard, including recently added support for NZD, HKD, MWK, TZS, and KHQR USD. Contact support@helloclever.co to enable additional currencies. Each currency exposes its own set ofpayin_method_code values. The codes below are the ones the gateway currently issues:
Treat this table as orientation, not as configuration. Call
GET /v3/payin_methods for the methods actually enabled on your own account, along with each method’s minimum and maximum amount, supported card brands, and available checkout languages. Those limits vary by currency: NZD and HKD card payments cap at 10,000, for example, while MWK methods start at 2,000.Mobile money payments
Mobile money methods (ke_mobile_money_kes, mw_mobile_money_mwk, bw_mobile_money_bwp, gh_mobile_money_ghs, cm_mobile_money_xaf, ci_mobile_money_xof) settle through a prompt on the customer’s handset rather than on the checkout page. The customer enters their mobile number, receives a PIN or STK push prompt, approves it, and then confirms on the page with I have paid.
The hosted checkout shows the network requirements for each market. Points worth reflecting in your own messaging:
- Only certain networks are supported per currency. For MWK, only Airtel and TNM mobile numbers work; a number on another network fails.
- Prompts expire. The customer must respond promptly. Ignoring or dismissing the prompt causes a timeout, which surfaces as a failed payment rather than a pending one.
- The wallet needs sufficient balance before the payment is initiated.
- The customer must not close or refresh the page until they have approved the prompt and selected I have paid.
Address collection
Some methods require a billing address before the payment can proceed. On the hosted checkout, the address field autocompletes as the customer types and validates the result against a real address, so the customer selects their address rather than typing it in full. You can pre-fillsender_info.address, city, postal_code, state, and country_code when you create the payin; those values are carried into the form, and the customer only completes what is missing. Validation still applies to anything they change.
Address autocomplete reduces failures on methods that verify the address, but it does not remove the requirement. If you already hold a verified address for the customer, pass it in
sender_info so they have less to fill in.Integration modes
Payment Method
Display available payment methods directly in your UI. Call Get Payin Methods, let the customer choose, then Create Payin with the selected method code. The customer completes checkout on Hello Clever’s hosted page.
Payment Link (Hello Clever brand)
Create a payment link without specifying a method. Redirect the customer to the generated
payment_url where they can choose from all available methods on a Hello Clever branded checkout page.Payment Link (Your brand)
Use a custom domain for your payment checkout page. Contact support@helloclever.co to configure white-label branding.
Base URLs
Authentication
All v3 requests require the sameapp-id and secret-key header pair used in v2.
string
required
Your application identifier from the Hello Clever Merchant Dashboard.
string
required
Your client secret. Never expose this in client-side code.
Step-by-step integration guide
1
Configure credentials
Each site in your Hello Clever account has a unique
app-id. Set the site type to Payment API in your dashboard to activate the credentials. If you operate across multiple currencies, link each site individually to receive the correct app-id and secret-key for each currency.A Webhook Secret Key is issued at the merchant level and shared across all sites under the same merchant. Use it to verify every webhook signature from Hello Clever.2
Get available payment methods (optional)
Call
GET /v3/payin_methods to retrieve the list of payment methods for your configured currency. You can display these directly in your checkout UI if you want the customer to choose a method before creating the payin.Example response
3
Create the payment link
Call The response includes the
POST /v3/payin_links with the transaction details. amount, description, and sender_info are required. Include payin_method_code if the customer has already selected a method; omit it to show all available methods on the Hello Clever checkout page. expires_in is in seconds. It defaults to 1800 (30 minutes) and cannot be lower than 900 (15 minutes).Example request body
payment_url to redirect your customer to.Example response
Redirect URLs
Useredirect_url to control where the customer lands once checkout finishes. Both fields are optional, and you can set either one independently.If you omit
redirect_url.failure, the customer stays on the Hello Clever checkout page after a failed payment and has no route back into your checkout flow. Setting it lets you keep failed customers inside your own funnel.4
Redirect the customer
Send the customer to the
payment_url. Choose a UX mode that fits your product:- Redirect: Send the customer directly to the payment URL in the same tab or a new tab.
- Popup: Render the payment URL inside a popup window and listen for payment events via
window.addEventListener("message", ...).
Some browsers (Safari, Chrome) block automatic popups. Inform users to allow popups from your domain if you use the popup UX mode.
5
Handle webhooks
Your server receives a POST webhook at the
endpoint_url you specified whenever the payment status changes. Always treat webhooks as the source of truth for payment status. Do not rely solely on redirect URL parameters.See Webhooks for the full webhook object schema and status reference.6
Test in sandbox
In the sandbox environment, use the payment simulator to test different payment outcomes without real money. After creating a payment, click “I have paid” on the hosted checkout page to open the simulator popup, then trigger success or failure scenarios as needed.
Managing payments after creation
See the API reference for full request and response schemas.
Popup UX event handling
If you embed the checkout in a popup window, listen for payment events to close the popup and update your UI:Handle popup payment events
hc_payment_event object contains:
event_type:"onChange"(status changed) or"onDone"(customer clicked Done or countdown reached zero).page_state:"success"or"failed".