The JavaScript SDK lets you accept card payments securely in your checkout flow with a few lines of code. Hello Clever renders the card form inside an iframe, so raw card details never touch your frontend or servers. This guide covers setup, initialisation, payment creation, and callback handling.
Supported currencies: AUD and USD.

Environments

To see the SDK running, visit the demo website.

Integration steps

1

Register your app ID and domain

Contact the Hello Clever team to register your domain and receive your app_id.
2

Include the SDK script in your checkout page

Switch to the production script URL when you go live.
3

Add a mount element to your HTML

The SDK injects the payment iframe into this element. It must exist before you call createPayment().
4

Initialise the SDK and create a payment

SDK configuration reference

GetKollo({ app_id })

Creates an SDK instance.

createPayment(order, options)

Creates the payment and renders the card form in your mount element.

order (required)

options (required)

onSubmit(payload)

Submits the card form when paymentButton is set to external. Call it from your own button’s click handler.

Payment status callback

After the payment is submitted, or if the card form fails to render, the SDK calls window.getkolloCardCallback:
The callback reflects what happened in the browser. Confirm the final payment status from your webhook notifications before you fulfil the order.

Payment types

Regular payment

Customers can choose to store their card details during a payment. You can then use them for future payments without the customer re-entering them. SCA requirements: in regions that require Strong Customer Authentication (SCA), the customer must complete a 3D Secure (3DS) challenge during payment. When SCA is required, the API response includes a pay_code.3ds_url field. Redirect your customer to this URL to complete authentication. Set up a regular payment: pass payment_type: "regular" in the order object when you call createPayment(). This is optional, because regular is the default.

Unscheduled payment

With an unscheduled payment agreement, you store a customer’s card details during an initial transaction. You can then make a card-not-present transaction with the stored card later. For example, a customer gives their card details when checking in to a hotel, but is only charged at check-out, by which time they may have incurred extra charges. SCA requirements: merchant-initiated transactions fall outside the scope of SCA and qualify for the Merchant Initiated Exclusion, so 3DS authentication is not required. Set up an unscheduled payment:
1

Initial payment (SDK)

Pass payment_type: "unscheduled" in the order object when you call createPayment(). This stores the customer’s card details.
2

Subsequent payments (Tokenisation API)

Charge the saved token with Create Payment via Tokenisation, using these fields:
  • payment_type: set to unscheduled.
  • previous_payment_uuid: the uuid returned for the initial payment. It references the original SCA-authorised transaction and improves approval rates.
  • charge_reason: recommended, because it improves approval rates and chargeback handling. Use one of:
    • resubmission: the original purchase happened, but you could not get authorisation when the goods or services were provided.
    • delayed_charge: there is a delayed charge.
    • no_show: the cardholder agreed to a purchase but did not meet the terms of the agreement.
    • reauthorisation: an additional purchase was made after the original one, typically for delayed or split orders.

Reuse tokens for future payments

Call Create Payment via Tokenisation with your saved token (token.id and token.type). payment_type defaults to regular if you omit it. For the differences between regular and unscheduled, see Payment types.
If the response includes pay_code.3ds_url, redirect your customer there to complete 3DS. After authorisation, they return to your return_url.

Webhook notifications

When the payment status changes (for example, pending to authorised to waiting), Hello Clever sends a webhook event to your configured endpoint. When the payment reaches authorised or waiting, the webhook includes a token object:
Save token.id securely in your database. You can reuse it for future payments without the customer re-entering their card details.
See Webhooks for the payload structure, token inclusion after authorisation, setup, and webhook security.

Payment statuses