Hlawula MoR is still in development. Payments on this site are demos and nobody is charged. Try the demo checkout

Selling

Payment methods

Hlawula accepts eight payment methods. Wallets and cards work for buyers anywhere; Capitec Pay, Absa Pay, Nedbank Direct EFT and Pay by bank are for buyers in South Africa. PayFast or Peach processes all of them, and your customer only sees Hlawula.

MethodidWho can use itHow the buyer approves
Apple Payapple_payEveryoneFace ID or Touch ID
Google Paygoogle_payEveryoneDevice unlock
Samsung Paysamsung_payEveryoneFingerprint or PIN
CardcardEveryoneCard details, 3-D Secure
Capitec Paycapitec_paySouth AfricaIn the Capitec app
Absa Payabsa_paySouth AfricaIn the Absa Banking App
Nedbank Direct EFTnedbank_direct_eftSouth AfricaSigns in to Nedbank Money
Pay by bankpay_by_bankSouth AfricaSigns in to their own bank

Apple Pay first

On the hosted checkout, Apple Pay is the first button. It's the fastest way to pay: no typing, one glance, done. Google Pay and Samsung Pay sit right under it. Everyone else picks card or their bank below.

Wallets return an encrypted payment token from the device. You send that token to the pay endpoint and the aggregator decrypts it; card details never touch your servers or ours.

Request body
{ "method": "apple_pay", "walletToken": "<token from ApplePaySession>" }

Before going live with Apple Pay

Apple requires the paying domain to be verified and served over HTTPS, and only shows the button in Safari and on Apple devices. The demo checkout uses a stand-in payment sheet and a placeholder token, so it works in any browser. Use Apple's official button and sheet in production.

Cards

Request body
{
  "method": "card",
  "cardNumber": "4242 4242 4242 4242",
  "expiry": "12/30",
  "cvc": "123",
  "name": "Thandi Mokoena"
}

We check the number passes the Luhn check, the expiry hasn't passed and the security code is 3 or 4 digits. In the demo, card details reach the API directly; in production they go straight to the aggregator's hosted fields.

South African bank payments

Capitec Pay and Absa Pay

The buyer enters the cellphone number linked to their banking app. The bank sends an approval request to the app, and the payment completes when they approve it.

Request body
{ "method": "capitec_pay", "mobile": "082 123 4567" }

Numbers can be written as 082 123 4567, 0821234567 or +27 82 123 4567.

Nedbank Direct EFT and Pay by bank

The buyer signs in to their bank, checks the amount and approves an EFT. Pay by bank works with Absa, Capitec, Discovery Bank, FNB, Investec, Nedbank, Standard Bank and TymeBank.

Request body
{ "method": "pay_by_bank", "bank": "FNB" }

Which methods a buyer can use

Ask for the list with the buyer's country. Each method comes back with available set for that country.

bash
curl "$HLAWULA_URL/api/payment-methods?country=GB"

Paying with a South Africa only method for a buyer elsewhere returns 400 method_unavailable.

Errors

CodeWhen
method_unknownThe method id isn’t one of the eight above.
method_unavailableThe method isn’t offered in the buyer’s country.
wallet_token_missingA wallet payment arrived without a token.
card_invalidThe card number fails validation.
expiry_invalidThe expiry date is malformed or in the past.
cvc_invalidThe security code isn’t 3 or 4 digits.
mobile_invalidThe cellphone number isn’t a South African mobile number.
bank_invalidPay by bank was used without one of the supported banks.