Before creating a payin, call Get PayIn Methods and Get Required Fields to discover which payment methods and customer fields are available for your configured currency.
Get PayIn Methods
GET/v2/payins/payin_methods
Returns all payment methods available for your app-id. The methods returned depend on the country and currency configured in your Hello Clever Merchant Dashboard.
Response fields
Array of available payin methods.
Get PayIn Required Fields
GET/v2/payins/payin_method/params
Returns the fields required (or optional) to create a payin for a specific payment method. Call this once per method to understand what customer data you need to collect.
Query parameters
The payment method code returned from Get PayIn Methods.
Response fields
List of parameters for the payment method.
Create PayIn
POST/v2/payins
Creates a new payin request. You must first call Get PayIn Methods and Get Required Fields to gather the correct method code and required fields.
Body parameters
The payment method code (e.g.,
my_bank_duitnow_myr).The payment amount in the currency’s base unit.
ISO 4217 currency code (e.g.,
MYR, VND, AUD).A description for this payment.
Include GST in the transaction. Set to
true only for AUD transactions by AU merchants.Time in seconds before the payin request expires.
Customer details for the transaction.
Webhook configuration for this payin. If omitted, your dashboard default is used.
Redirect URLs after payment completion.
Response fields
Unique identifier for this payin transaction.
Current status:
pending, received, expired, return_received, or failed.URL for the customer to complete payment (if applicable for the method).
The payment code or reference number the customer uses to pay (e.g., for bank transfers).
ISO 8601 timestamp when the payin expires.
Webhooks are called on a best-effort basis. If your endpoint does not return HTTP 200, Hello Clever retries 3 times with 15-minute delays between attempts. Design your webhook handler to be idempotent.
Get PayIn Details
GET/v2/payins/detail
Returns the full details of a specific payin request by UUID.
Query parameters
The unique identifier of the payin transaction.
Get PayIns in a Period
GET/v2/payins/all
Returns a paginated list of payin transactions linked to your app-id, filtered by date range and optional status. Returns 20 records per page by default.
Query parameters
Start of the date range in ISO 8601 format (e.g.,
2025-01-01T00:00:00Z).End of the date range in ISO 8601 format.
Filter by payment status:
pending, received, expired, return_received, failed.Page number for pagination.
Number of records per page.
Cancel PayIn
POST/v2/payins/cancel
Cancels a pending payin transaction. The status transitions to expired. Check is_cancellable == true on the payin method before calling this endpoint.
Body parameters
The UUID of the pending payin to cancel.
Refund PayIn
POST/v2/payins/refund
Initiates a refund on a completed (received) payin. Check is_refundable == true on the transaction before calling this endpoint.
Body parameters
The UUID of the received payin to refund.
The amount to refund. If omitted, the full amount is refunded. Partial refunds are only allowed 30–60 minutes after payin completion.
PayIn Simulation (sandbox only)
POST/v2/payins/simulate
Simulates the completion of a pending payin in the sandbox environment. The payin must be in pending status. This endpoint is not available in production.
Body parameters
The UUID of the pending payin to simulate as completed.
Authorize OTP Transaction
POST/v2/payins/confirm_otp
After creating a payin using a mobile money method (e.g., gh_mobile_money_ghs), if the response stage is authorize_otp, an OTP has been sent to the customer’s phone. Collect the OTP from the customer and submit it to this endpoint. On success, an STK push is sent to the customer’s phone to confirm the payment with their PIN.
Body parameters
The UUID of the payin awaiting OTP authorization.
The OTP received on the customer’s phone.
Resend OTP
POST/v2/payins/resend_otp
Resends the OTP for a mobile money payin when the original OTP has expired or was not received by the customer.
Body parameters
The UUID of the payin for which to resend the OTP.