Skip to main content

Hello Clever Payment API Reference (2.0)

Introduction

Hello Clever Payment is an instant payment solution empowered by the New Payments Platform with PayID and PayTo supported. Hello Clever also supports debit/credit cards with a competitive rates. With Hello Clever, you can create and monitor payment requests with powerful AI-powered insights, real-time enrichment, detailed classification, accurate and latest transaction information. Hello Clever Payment APIs are based on REST.

Hello Clever provides core API services enabling developers to build innovative payment solutions. You can use this documentation to integrate your application with Hello Clever.

Please note that, Hello Clever provides two ways of the API solution you can utilise depending on your business direction:

  • Integrate Hello Clever Payment Gateway to your website or your application. Currently our Payment Gateway supports PayID, PayTo, and cards. See more
  • Whitelabel our PayID and PayTo solutions at your request and fully customise the user experience your own way. See more

Getting started

To use our API solution, you will need to register and have a merchant account (https://merchant.helloclever.co) to generate and obtain an access key. The merchant account will also enables you to manage and view payments from your customers, set up cashback rates, and manage payout accounts. You can reach out to our sales team via https://helloclever.typeform.com/enquiry to open an account free of charge. We provide a dedicated support team to guide you through the integration journey.

API Endpoint

Postman collection

We understand that starting a new service can be overwhelming. That's why we want to make the process as easy as possible for you. To get started quickly and smoothly, we recommend using our example Postman collection .

This collection is designed to give you a clear understanding of how our service works and how you can use it to achieve your goals. With this collection, you can easily explore our API and try out the different functionalities that we offer. So, if you're ready to dive in and start exploring, we encourage you to use our example Postman collection and let us know if you have any questions or feedback.

Authentication

  • The Hello Clever API uses API keys to authenticate requests. You can view and manage your API keys within the Hello Clever Dashboard.
  • Our API is organised around REST and has predictable resource-oriented URLs, accepts form-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.
  • You can use our API in test mode within our sandbox environment, which does not affect your live data or interact with the banking networks. The API key you use to authenticate the request determines whether the request is live mode or test mode.

Payin methods

Get payin methods

This API enables you to receive a list of all available payin methods. The app-id and secret-key will be used to determine the necessary payin methods based on the country and currency. You can configure this information in the Hello Clever Merchant Dashboard.

Authorizations:
(app-idsecret-key)

Responses

Response Schema: application/json
Array of objects
Response Schema: application/json
object

Response samples

Content type
application/json
Example
{
  • "records": [
    ]
}

Get payin’s required fields

Certain payment methods may require information to be collected from consumers. This API will provide all parameters potentially needed for a specific payin method. The returned parameters may be either optional or mandatory.

Authorizations:
(app-idsecret-key)
query Parameters
payin_method_name
required
string

Payin Method Name (For e.g. ph_bank_maya_php)

Responses

Response Schema: application/json
object
Response Schema: application/json
object

Response samples

Content type
application/json
Example
{
  • "record": {
    }
}

Payin

Create a payin request

To be able to successfully create a payin request you would need the following APIs in consideration:

  • Step 1: Call the Get payin methods to retrieve the list of supported methods.
  • Step 2: Call the Get payin required fields to get specific required fields for each method.
  • Step 3: Create the payment using the method and required fields from the previous step.
  • Step 4: On sandbox environment, you can call the Simulate payin to simulate the payment.

Note:
If the payin_method_name is jp_bank_jpy, the pay_code will be sent to the webhook after a certain period with the following fields:

  • bank_name: The recipient's bank name.
  • transfer_id: The transfer identifier on the provider side.
  • branch_code: The code of the recipient's bank branch.
  • branch_name: The name of the recipient's bank branch.
  • account_number: The recipient's account number.
  • account_name: The recipient's account name.
  • expired_timestamp: The payment expiration time.
  • account_type: The recipient's account type.
  • transfer_name: The name associated with the transfer.

If you use one of the following payin methods, please check the list of supported providers before proceeding:

❗ Important:
For Step 3, if you choose mobile_money as the payin method, as the PayIn method, refer to the instructions in the Mobile Money tab.

  • For example: gh_mobile_money_ghs
Authorizations:
(app-idsecret-key)
Request Body schema: application/json
currency
required
string

Transaction currency. It has to be a valid ISO 4217 currency codes. For example, 'PHP' for Philippine Peso, 'AUD' for Australian Dollar.

gst
required
boolean

Goods and Services Tax.

amount
required
number

Amount. Optional with usdc_bank 's payin method name.

name
required
string

Customer name.

email
required
string

If required_contact == true, this email must be the same email that was used to create the contact.

external_id
string

Custom ID.

description
required
string

Description.

payin_method_name
required
string

Payin method name to be used for this payment. You will receive this from the Get payin methods API.

payin_method_params
required
object

Payin method parameters. You will receive this from the Get payin’s required fields API.

required
object

Merchant Callback Details

expired_at
string <YYYY-MM-DDTHH:mm:ss>

Expired time of transaction. This datetime would be in the UTC timezone. Must set the schedule bigger 15 minutes from the current time.

Responses

Response Schema: application/json
uuid
string
name
string
description
string
email
string
external_id
string
status
string <pending | received | expired | return_pending | return_received | return_expired | waiting>

Status of the transaction:

  • pending: Your customer hasn't made the requested payment yet.
  • received: Your customer has paid successfully. the funds have been settled into the merchant's available balance.
  • waiting: Your customer has paid successfully. The funds are waiting to be settled into the merchant's available balance.
  • expired: The payment request has expired.
  • return_pending: A full refund or partial refund request has been triggered on the payment.
  • return_received: The refund has been transferred to the original payee.
  • return_expired: The refund request has expired. Expiration time is set to be 10 days.
  • return_rejected: A refund failed due to problems with the destination account. HelloClever will not retry again.
stage
string <authorize_otp | authorize_stk | normal_stage>
object

Code using pay

currency
string
gst
boolean
amount
number
gst_amount
number
total
number
paid_amount
number
payment_method
string
is_refundable
boolean
expired_at
string <date-time>
pay_by
string <date-time>
object
Response Schema: application/json
object
Response Schema: application/json
object

Callbacks

Request samples

Content type
application/json
Example
{
  • "currency": "PHP",
  • "amount": 500,
  • "name": "Hello Clever",
  • "gst": false,
  • "email": "test@helloclever.co",
  • "payin_method_name": "ph_bank_maya_php",
  • "payin_method_params": { },
  • "description": "Test Payin",
  • "webhook_notification": {},
  • "expired_at": "2021-12-23T06:00:00.000+0000"
}

Response samples

Content type
application/json
Example
{
  • "uuid": "VMMAOTFQ",
  • "name": "Hello Clever",
  • "description": "description",
  • "email": "test@helloclever.co",
  • "external_id": "123456",
  • "status": "pending",
  • "currency": "PHP",
  • "gst": true,
  • "amount": "1000.0",
  • "gst_amount": "100.0",
  • "total": "1100.0",
  • "paid_amount": "0",
  • "payment_method": "ph_bank_maya_php",
  • "is_refundable"": "false",
  • "expired_at": "2021-12-23T06:00:00.000+0000",
  • "pay_by": "2021-12-23T06:00:00.000+0000",
  • "webhook_notification": {}
}

Callback payload samples

Callback
POST: PayID.PaymentStatus.status Event
Content type
application/json
Example
{
  • "uuid": "VMMAOTFQ",
  • "name": "Hello Clever",
  • "description": "description",
  • "email": "test@helloclever.co",
  • "external_id": "123456",
  • "status": "pending",
  • "currency": "PHP",
  • "gst": true,
  • "amount": "1000.0",
  • "gst_amount": "100.0",
  • "total": "1100.0",
  • "paid_amount": "0",
  • "payment_method": "ph_bank_maya_php",
  • "is_refundable"": "false",
  • "expired_at": "2021-12-23T06:00:00.000+0000",
  • "pay_by": "2021-12-23T06:00:00.000+0000",
  • "webhook_notification": {}
}

Get payin requests in a period of time

This API allows you to fetch a complete list of payin linked to your app-id. You can filter the results based on multiple query params. This API is paginated. The default is 20 transactions per page.

Authorizations:
(app-idsecret-key)
query Parameters
from_date
string
Example: from_date=2022-01-01T00:00:00

Start date to query payment requests from, format 'DD/MM/YY' or 'YYYY-MM-DDThh:mm:ss'. This datetime would be in UTC timezone

to_date
string
Example: to_date=2022-01-01T00:00:00

End date to query payment requests, format 'DD/MM/YY' or 'YYYY-MM-DDThh:mm:ss'. The datetime would be in UTC timezone

page
string

Page number to query. Currently we support 20 records per page

per_page
string

Default 20 records per page

Responses

Response Schema: application/json
per_page
integer
page
integer
total_page
integer
Array of objects
Response Schema: application/json
object

Response samples

Content type
application/json
{
  • "total": 100,
  • "page": 1,
  • "per_page": 20,
  • "records": [
    ]
}

Get payin details

This API allows you to fetch the details of a specific payin request. You can use the UUID to retrieve the details of a specific payment request.

Authorizations:
(app-idsecret-key)
query Parameters
uuid
any

Unique ID in system.

Responses

Response Schema: application/json
uuid
string

Unique Id in system.

name
string

Customer name.

email
string

Customer email.

external_id
string

Custom ID.

status
string <pending | received | expired | return_pending | return_received | return_expired>
object

Code using pay

currency
string
gst
boolean
amount
number
gst_amount
number
total
number
paid_amount
number
payment_method
string
description
string
is_refundable
boolean
expired_at
string <date-time>
pay_by
string <date-time>
object
Response Schema: application/json
object

Response samples

Content type
application/json
{
  • "uuid": "string",
  • "name": "string",
  • "email": "string",
  • "external_id": "string",
  • "status": "string",
  • "pay_code": {
    },
  • "currency": "string",
  • "gst": true,
  • "amount": 0,
  • "gst_amount": 0,
  • "total": 0,
  • "paid_amount": 0,
  • "payment_method": "string",
  • "description": "string",
  • "is_refundable": true,
  • "expired_at": "2019-08-24T14:15:22Z",
  • "pay_by": "2019-08-24T14:15:22Z",
  • "webhook_notification": {
    }
}

Payin request simulation

This API allows you to simulate a payin request completion. This is useful for testing purposes and works only in sandbox environment. To complete the payment, it must be in a PENDING status.

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
uuid
required
string

Payment UUID

amount
number

Amount simulate

status
required
string

The desired transaction status, with two possible statuses completed or failed.

Responses

Response Schema: application/json
status
string
Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "uuid": "MB3Y26GO",
  • "amount": 500,
  • "status": "completed"
}

Response samples

Content type
application/json
{
  • "status": "ok"
}

Refund Payin

Initiate a refund request on a completed payin (with received status). Before initiating the refund, check if the payin method is refundable (is_refundable == true).

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
uuid
required
integer

Payment request ID

amount
number

Refund amount, must be numeric. If not specified, the refund amount will be the same as the total amount.

description
required
string

Partial refund reason, must be at least 5 characters long

Responses

Response Schema: application/json
total_amount
string

Total amount of the transaction

refund_amount
string

Amount refunded

description
string

Reason for the refund

object
Response Schema: application/json
object
Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "uuid": "APU221YS",
  • "amount": 10,
  • "description": "Partial Refund Reason"
}

Response samples

Content type
application/json
{
  • "total_amount": "100.0",
  • "refund_amount": "10.0",
  • "description": "Test refund",
  • "payin_request": {
    }
}

Cancel Payin

Cancel a pending Payin transaction,the transaction status will be updated to expired. Before cancel payin, check if the payin method is cancellable (is_cancellable == true).

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
uuid
required
integer

Payment request ID

Responses

Response Schema: application/json
status
string

Status

Response Schema: application/json
object
Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "uuid": "APU221YS"
}

Response samples

Content type
application/json
{
  • "status": "Ok"
}

Mobile Money

Authorizing an OTP transaction

After submitting a request to Create a PayIn Request using the mobile_money PayIn method, if the stage field is authorize_otp, it means an OTP has been sent to the wallet owner's phone. You should collect the OTP to authorize the Payin. Retrieve the OTP sent to the customer's phone and send a request to our authorization endpoint. If the OTP verification is successful, an STK prompt will be sent to the wallet owner's phone, prompting them to enter their PIN.

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
uuid
required
string

Payin request ID

code
required
string

Responses

Response Schema: application/json
status
string
Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "uuid": "APU221YS",
  • "code": "123456"
}

Response samples

Content type
application/json
{
  • "status": "Ok"
}

Resend OTP

This endpoint allows you to resend OTP in a situation where the initial OTP received had expired or was not received at all.

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
uuid
required
string

Payin request ID

Responses

Response Schema: application/json
status
string
Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "uuid": "APU221YS"
}

Response samples

Content type
application/json
{
  • "status": "Ok"
}

Authorizing an STK transaction(Sandbox only)

This endpoint allows you to authorize the transaction in the Sandbox environment. It is meant to simulate a wallet owner entering their wallet PIN at the STK prompt.

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
uuid
required
string

Payment request ID

pin
required
string

STK pin

Responses

Response Schema: application/json
status
string
Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "uuid": "APU221YS",
  • "pin": "1234"
}

Response samples

Content type
application/json
{
  • "status": "Ok"
}

Resend STK (Sim toolkit)

This endpoint allows you to resend the STK prompt in a situation where the initial STK prompt received had expired or was not received at all.

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
uuid
required
string

Payin request ID

Responses

Response Schema: application/json
status
string
Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "uuid": "APU221YS"
}

Response samples

Content type
application/json
{
  • "status": "Ok"
}

Payout methods

Get payout methods

This API enables you to receive a list of all available payout methods. The app-id and secret-key will be used to determine the necessary payout methods based on the country and currency. You can configure this information in the Hello Clever Merchant Dashboard.

Authorizations:
(app-idsecret-key)

Responses

Response Schema: application/json
Array of objects
Response Schema: application/json
object

Response samples

Content type
application/json
Example
{
  • "records": [
    ]
}

Get payout required fields

Certain payout methods may require information to be collected from consumers. This API will provide all the parameters potentially needed for a specific payout method. The returned parameters could be either optional or mandatory.

Authorizations:
(app-idsecret-key)
query Parameters
payout_method_name
required
string

Payout method name

Responses

Response Schema: application/json
object
Response Schema: application/json
object
Response Schema: application/json
object

Response samples

Content type
application/json
Example
{
  • "record": {
    }
}

Payout

Create a payout.

This API enables outbound payments in mutilple currency using supported payout methods. Steps to create a payout:

  • Step 1: Call the Get payout methods to retrieve the list of supported methods.
  • Step 2: Call the Get payout required fields to get specific required fields for each method.
  • Step 3: Initialize a payout with the required fields.

You only need to do steps 1 and 2 once. After that, you can use the same method and required fields to create a payout payment.

There are 4 statuses of the payment:

  • created: Payout payment created.
  • processing: Payout has been processed
  • scheduled: Waiting for fund to be charged to the payee.
  • completed: Payout payment has been completed for the entire batch, not for individual transactions.

Please note: If you use one of the following payout methods, please check the list of supported providers before proceeding:

Please note that if any of the transactions fail, it will not affect the completion of the entire batch.

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
required
Array of objects

Payout transaction details

currency
required
string

Currency for payout

payout_method_name
required
string

Payout method name

scheduled_at
string <YYYY-MM-DDTHH:mm:ss>

Payout transaction to payee in this time. This datetime would be in UTC timezone.

description
required
string >= 5 characters

Description of payout payment

required
object
external_id
string

Custom ID

Responses

Response Schema: application/json
uuid
required
string

Unique id in system.

currency
required
string

Currency payout

payout_method_name
required
string
description
string [ 1 .. 90 ] characters

Description of payout payment.

total_amount
required
string

Total amount of list payout transactions

status
required
string
Enum: "created" "processing" "scheduled" "completed" "expired"

Status of payout payment

required
object

Merchant Callback Details

scheduled_at
string <YYYY-MM-DDTHH:mm:ss>

Payout transaction to payee in this time. This datetime would be in UTC timezone.

Array of objects

Payout transaction details

error_code
string
Enum: "HC_PAYOUT1" "HC_PAYOUT2"

Error code for the batch. We have 2 error codes HC_PAYOUT1 (Insufficient funds to payout. Please topup balance in dashboard) and HC_PAYOUT2 (Insufficient Balance. Hello Clever will charge your PayTo agreement to pay out).

error_message
string
Enum: "Insufficient available funds. Top up your balance." "Insufficient Balance. Hello Clever will charge your PayTo agreement to pay out."

A description corresponds to the value of the statusCode field.

external_id
string

Custom ID

Response Schema: application/json
object
Response Schema: application/json
object
Response Schema: application/json
object

Callbacks

Request samples

Content type
application/json
Example
{
  • "payout_transaction_details": [
    ],
  • "currency": "AUD",
  • "payout_method_name": "au_bank_aud",
  • "description": "Test payout",
  • "webhook_notification": {},
  • "external_id": "1235"
}

Response samples

Content type
application/json
Example
{
  • "uuid": "OHXTEF9M",
  • "currency": "AUD",
  • "payout_method_name": "au_bank_aud",
  • "description": "Payout payment 2023",
  • "total_amount": "1000",
  • "status": "processing",
  • "scheduled_at": null,
  • "payout_transactions": [
    ],
  • "error_code": "HC_PAYOUT1",
  • "error_message": "",
  • "external_id": "123",
  • "webhook_notification": {}
}

Callback payload samples

Callback
POST: PayoutStatus.status Event
Content type
application/json
Example
{
  • "uuid": "OHXTEF9M",
  • "currency": "AUD",
  • "payout_method_name": "au_bank_aud",
  • "description": "Payout payment 2023",
  • "total_amount": "1000",
  • "status": "processing",
  • "scheduled_at": null,
  • "payout_transactions": [
    ],
  • "error_code": "HC_PAYOUT1",
  • "error_message": "",
  • "external_id": "123",
  • "webhook_notification": {}
}

Get payout requests in a period of time

You can easily query payout payments in a period of time. Currently we support up to 1 year period. Should you need more, please contact us directly.

Authorizations:
(app-idsecret-key)
query Parameters
from_date
required
string
Example: from_date=2022-01-01T00:00:00

Start date to queries payment requests from, format 'DD/MM/YY' or 'YYYY-MM-DDThh:mm:ss'. This datetime would be in UTC timezone

to_date
required
string
Example: to_date=2022-01-01T00:00:00

End date to queries payment requests, format 'DD/MM/YY' or 'YYYY-MM-DDThh:mm:ss'. This datetime would be in UTC timezone

page
required
string

Page number to query. Currently we support 20 records per page

Responses

Response Schema: application/json
from_date
required
string
to_date
required
string
page
required
integer
size
required
integer
next_page
required
integer
total_page
required
integer
total_count
required
integer
required
Array of objects
Response Schema: application/json
object
Response Schema: application/json
object
Response Schema: application/json
object

Response samples

Content type
application/json
{
  • "from_date": "2022-01-01T00:00:00.000+0000",
  • "to_date": "2022-12-01T00:00:00.000+0000",
  • "page": 1,
  • "size": 10,
  • "next_page": 2,
  • "total_page": 1,
  • "total_count": 10,
  • "records": [
    ]
}

Get payout details


Check the status of a payout payment. There are 4 statuses:

  • created: Payout payment created.
  • processing: Payout has been topup to payID response.
  • scheduled: Waiting charge fund to payee.
  • completed: Payout payment completed.
Authorizations:
(app-idsecret-key)
query Parameters
uuid
required
string

Hello Clever payout payment UUID

Responses

Response Schema: application/json
uuid
required
string

Unique id in system.

currency
required
string

Currency payout

payout_method_name
required
string
description
required
string [ 1 .. 90 ] characters

Description of payout payment.

total_amount
required
string

Total amount of list payout transactions

status
required
string
Enum: "created" "processing" "scheduled" "completed" "expired"

Status of payout payment

object

Merchant Callback Details

scheduled_at
string <YYYY-MM-DDTHH:mm:ss>

Payout transaction to payee in this time. This datetime would be in UTC timezone.

required
Array of objects
error_code
required
string

Error code for the batch. We have 2 error codes HC_PAYOUT1 (Insufficient funds to payout. Please topup balance in dashboard) and HC_PAYOUT2 (Insufficient Balance. Hello Clever will charge your PayTo agreement to pay out).

error_message
required
string

A description corresponds to the value of the statusCode field.

external_id
string

Custom ID

Response Schema: application/json
object
Response Schema: application/json
object

Response samples

Content type
application/json
Example
{
  • "uuid": "OHXTEF9M",
  • "currency": "AUD",
  • "payout_method_name": "au_bank_aud",
  • "description": "Payout payment 2023",
  • "total_amount": "1000",
  • "status": "processing",
  • "scheduled_at": null,
  • "payout_transactions": [
    ],
  • "error_code": "HC_PAYOUT1",
  • "error_message": "",
  • "external_id": "123",
  • "webhook_notification": {}
}

Payout simulation

This API works only in sandbox environment and allows you to simulate the completion of a payment. To complete the payout, it must be in a PENDING status.

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
uuid
required
string

Payout UUID

status
required
string

The desired transaction status, with two possible statuses completed or failed.

Responses

Response Schema: application/json
status
string
Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "uuid": "MB3Y26GO",
  • "status": "completed"
}

Response samples

Content type
application/json
{
  • "status": "ok"
}

Cancel a scheduled payout

You can cancel a payout payment scheduled to run in the future.

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
uuid
required
string

Payout payment UUID

Responses

Response Schema: application/json
status
string
Response Schema: application/json
object
Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "uuid": "OHXTEF9M"
}

Response samples

Content type
application/json
{
  • "status": "OK"
}

Contact

Create Contact

When processing a Payin or Payout transaction, if the require_contact parameter is true, you need to create a new contact before proceeding with the transaction. Each contact will have a unique email associated with it, ensuring that the user’s information is complete before continuing with the payment process. This email will be used during the process of calling the API to create a Payin or Payout transaction.

After successfully creating the contact, you need to perform KYC (Know Your Customer) verification for this contact if the Payin or Payout methods require KYC(require_kyc == true). This will be done through the Submit KYC API provided below. If KYC is not required, you can proceed with the transaction process without further verification. Ensure that these steps are completed thoroughly and accurately to maintain security and compliance. Wishing you success in carrying out this process!

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
email
required
string

Contact's email. This email will be used during the process of calling the API to create a Payin or Payout transaction. A new contact must be created to continue the payment process.

first_name
required
string

Contact's first name

last_name
required
string

Contact's last name

type
required
string
Enum: "individual" "organization"

The type of contact (e.g., individual or organization)

dob
required
string

Contact's date of birth, format 'yyyy-mm-dd'

reg_no
required
string

Contact registration number, required if type is organization

phone
required
string

Contact's phone number

gender
required
string
Enum: "male" "female"

Contact's gender

street
required
string

The primary name of an address's street for the contact.

city
required
string

Name of an address's city or town for the contact.

postal_code
required
string

The contact's address's postcode

state
required
string

The contact's address's state / province / county.

country
required
string

ISO 3166-1 alpha-2 country code of the contact's country.

Responses

Response Schema: application/json
email
string
Response Schema: application/json
object
Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "email": "test@helloclever.co",
  • "first_name": "Luxy",
  • "last_name": "Tran",
  • "type": "individual",
  • "dob": "1991-12-24",
  • "reg_no": "123456789",
  • "phone": "+6123224242",
  • "gender": "male",
  • "street": "338 George Street",
  • "city": "Sydney",
  • "postal_code": "2000",
  • "state": "New South Wales",
  • "country": "AU"
}

Response samples

Content type
application/json
{
  • "email": "test@helloclever.co"
}

Submit KYC

This API allows you to submit the necessary KYC documents for a specific contact. The KYC documents include the contact's identity proof (e.g., ID card, passport), a selfie, and relevant document images. You must provide the correct contact email.

The following parameters are required for the successful submission of KYC:

  • email: The contact's email used for verification.
  • document_type: Type of identification document (e.g., passport, ID card,...).
  • document_number: The identification number on the document.
  • document_username: The name as shown on the identification document.
  • issue_date: The date the identification document was issued.
  • expiry_date: The expiry date of the identification document.
  • issue_country: The country that issued the identification document.
  • nationality: The country of nationality of the contact (ISO 3166-1 alpha-2 code).
  • selfie:A selfie image of the contact for identity verification should be in JPEG format.
  • id_doc_front_side:The front side image of the identification document should be in JPEG or PNG format.
  • id_doc_back_side: The back side image of the identification document should be in JPEG or PNG format
  • webhook_notification: A JSON object containing the endpoint_url and authorization_header for receiving KYC status change notifications.
Authorizations:
(app-idsecret-key)
Request Body schema: multipart/form-data
email
required
string

The contact's email used for verification.

document_type
required
string
Enum: "passport" "id_card" "driving_license"

The type of identification document (e.g., passport, id_card).

document_number
required
string

The identification number on the document.

document_username
required
string

The name as shown on the identification document.

issue_date
string

The issue date of the identification document in format 'yyyy-mm-dd'.

expiry_date
required
string

The expiry date of the identification document in format 'yyyy-mm-dd'.

issue_country
required
string

The country that issued the identification document (ISO 3166-1 alpha-2).

nationality
required
string

The country of nationality of the contact (ISO 3166-1 alpha-2 code).

selfie
required
string <binary>

A selfie image of the contact for identity verification should be in JPEG format.

id_doc_front_side
required
string <binary>

The front side image of the identification document should be in JPEG or PNG format.

id_doc_back_side
required
string <binary>

The back side image of the identification document should be in JPEG or PNG format.

webhook_notification
required
string

A JSON object containing the endpoint_url and authorization_header for receiving KYC status change notifications.

Example: {"endpoint_url": "https://helloclever.co/callback", "authorization_header": "token"}

  • endpoint_url: An internet accessible URL that Hello Clever will invoke when the status of the KYC status has changed. The call will be done using the HTTP POST method.
  • authorization_header: The string that Hello Clever will include in the Authorization request header when calling the Callback URL.

Responses

Response Schema: application/json
status
string
Response Schema: application/json
object
Response Schema: application/json
object

Callbacks

Response samples

Content type
application/json
{
  • "status": "Ok"
}

Callback payload samples

Callback
POST: KYC Status Changed Event
Content type
application/json
{
  • "email": "test@helloclever.co",
  • "first_name": "Luyx",
  • "last_name": "Tran",
  • "type": "individual",
  • "dob": "1991-12-24",
  • "phone": "+6123224242",
  • "reg_no": "123456789",
  • "gender": "male",
  • "street": "338 George Street",
  • "city": "Sydney",
  • "postal_code": "2000",
  • "state": "New South Wales",
  • "country": "AU",
  • "identity": {
    },
  • "kyc_statuses": [
    ]
}

Generate share token using Sumsub API

Contact Hello Clever Support team to get Sumsub Client ID.

See the Sumsub Authentication documentation (https://docs.sumsub.com/reference/authentication) to add the required headers to the Sumsub API request.

Request Body schema: application/json
applicantId
required
string

The applicant's ID in the Sumsub system.

forClientId
required
string

Contact Hello Clever Support team to get Client ID.

ttlInSecs
int32

The lifespan of the generated token in seconds.

Responses

Response Schema: application/json
token
required
string
forClientId
required
string

Request samples

Content type
application/json
{
  • "applicantId": "12345-67890",
  • "forClientId": "helloclever.co",
  • "ttlInSecs": 600
}

Response samples

Content type
application/json
{
  • "token": "_act-12345-67890-abcde-98765",
  • "forClientId": "helloclever.co"
}

Submit KYC With Token

This API enables merchants to verify a contact’s identity seamlessly using Sumsub KYC solution. Instead of requiring contacts to upload identification documents and selfies directly, this API leverages a token-based approach. When a contact completes their KYC process through Sumsub interface, a unique verification token is generated. This token represents the validated identity data, eliminating the need for manual document handling. The merchant submits this token along with the contact’s email to finalize the verification process on the server. Additionally, this API allows for automated KYC status tracking through webhook notifications. Merchants can provide a callback URL and an authorization header to receive real-time updates whenever the KYC status changes, ensuring a smooth verification experience without requiring periodic checks. With this approach, merchants can enhance security, streamline identity verification, and provide contacts with a frictionless onboarding experience.

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
email
required
string

The contact's email used for verification.

token
required
string

Usage Notes:

  • You must call the Generate share token using Sumsub API first to obtain this token.
  • This token is a unique identifier linking the contact to their KYC verification process.
  • It is a required field and must be a valid token provided by Sumsub.
  • The token is time-sensitive and may expire after a certain period if the KYC process is not completed.
  • If the token is invalid or expired, the API will return an error.
required
object

Merchant Callback Details

Responses

Response Schema: application/json
status
string
Response Schema: application/json
object
Response Schema: application/json
object

Callbacks

Request samples

Content type
application/json
{
  • "email": "test@helloclever.co",
  • "token": "_act-sbx-jwt-eyJhbGciOiJub25lIn0.eyJqdGkiOiJfYWN0LXNieC0wZTRiMGIzMC05NDUyLTQyMzQtOTQ4Ny1mMTQwZWUzZmE2ZWYiLCJ1cmwiOiJodHRwczovL2FwaS5zdW1zdWIuY29tIn0.",
  • "webhook_notification": {}
}

Response samples

Content type
application/json
{
  • "status": "Ok"
}

Callback payload samples

Callback
POST: KYC Status Changed Event
Content type
application/json
{
  • "email": "test@helloclever.co",
  • "first_name": "Luyx",
  • "last_name": "Tran",
  • "type": "individual",
  • "dob": "1991-12-24",
  • "phone": "+6123224242",
  • "reg_no": "123456789",
  • "gender": "male",
  • "street": "338 George Street",
  • "city": "Sydney",
  • "postal_code": "2000",
  • "state": "New South Wales",
  • "country": "AU",
  • "identity": {
    },
  • "kyc_statuses": [
    ]
}

Update Contact

This API allows you to update the information of an existing contact in the system. To do so, you need to provide the contact email and the updated details of the contact.

Authorizations:
(app-idsecret-key)
Request Body schema: application/json
email
required
string

The contact's email used for verification.

first_name
string

Contact's first name.

last_name
string

Contact's last name.

type
string
Enum: "individual" "organization"

The type of the contact (e.g., individual or organization).

dob
string

Contact's date of birth, format 'yyyy-mm-dd'.

reg_no
string

Contact registration number, required if type is organization.

phone
string

Contact's phone number.

gender
string
Enum: "male" "female"

Contact's gender

street
string

The primary name of an address's street for the contact.

city
string

Name of an address's city or town for the contact.

postal_code
string

The contact's address's postcode.

state
string

The contact's address's state / province / county.

country
string

ISO 3166-1 alpha-2 country code of the contact's country.

Responses

Response Schema: application/json
status
string
Response Schema: application/json
object
Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "email": "test@helloclever.co",
  • "first_name": "Luyx",
  • "last_name": "Tran",
  • "type": "individual",
  • "dob": "1991-12-24",
  • "reg_no": "123456789",
  • "phone": "+6123224242",
  • "gender": "male",
  • "street": "338 George Street",
  • "city": "Sydney",
  • "postal_code": "2000",
  • "state": "New South Wales",
  • "country": "AU"
}

Response samples

Content type
application/json
{
  • "status": "Ok"
}

Get Contact requests in a period of time

This API allows you to fetch a complete list of contacts linked to your app-id. You can filter the results based on multiple query params. This API is paginated. The default is 20 records per page.

Authorizations:
(app-idsecret-key)
query Parameters
from_date
string
Example: from_date=2022-01-01T00:00:00

Start date to query contact requests from, format 'DD/MM/YY' or 'YYYY-MM-DDThh:mm:ss'. This datetime would be in UTC timezone

to_date
string
Example: to_date=2022-01-01T00:00:00

End date to query contact requests, format 'DD/MM/YY' or 'YYYY-MM-DDThh:mm:ss'. The datetime would be in UTC timezone

page
string

Page number to query. Currently we support 20 records per page.

per_page
string

Default 20 records per page.

Responses

Response Schema: application/json
per_page
integer
page
integer
total_page
integer
Array of objects
Response Schema: application/json
object
Response Schema: application/json
object

Response samples

Content type
application/json
{
  • "total": 100,
  • "page": 1,
  • "per_page": 20,
  • "records": [
    ]
}

Get Contact details

This API allows you to fetch the details of a specific contact request. You can use the email to retrieve the details of the contact.

Authorizations:
(app-idsecret-key)
query Parameters
email
required
string
Example: email=test@helloclever.co

Contact email. Please ensure that the email is correct before sending.

Responses

Response Schema: application/json
email
required
string

The contact's email used for verification.

first_name
required
string

Contact's first name

last_name
required
string

Contact's last name

type
required
string
Enum: "individual" "organization"

The type of contact (e.g., individual or organization)

dob
required
string

Contact date of birth format 'yyyy-mm-dd'

phone
required
string

Contact's phone

reg_no
required
string

Contact registration number.

gender
required
string
Enum: "male" "female"

Contact's gender

street
required
string

The primary name of an address's street.

city
required
string

Name of an address's city or town.

postal_code
required
string

The address's postcode

state
required
string

The address's state / province / county.

country
required
string

ISO 3166-1 alpha-2 country code.

required
object

Contains the most recent KYC submission details for the contact.

Array of objects

An array of KYC statuses for the contact, containing multiple KYC instances with status and message.

Response Schema: application/json
object
Response Schema: application/json
object

Response samples

Content type
application/json
{
  • "email": "test@helloclever.co",
  • "first_name": "Luyx",
  • "last_name": "Tran",
  • "type": "individual",
  • "dob": "1991-12-24",
  • "phone": "+6123224242",
  • "reg_no": "123456789",
  • "gender": "male",
  • "street": "338 George Street",
  • "city": "Sydney",
  • "postal_code": "2000",
  • "state": "New South Wales",
  • "country": "AU",
  • "identity": {
    },
  • "kyc_statuses": [
    ]
}

Delete Contact

This API allows you to delete contact. You can use the email to delete.

Authorizations:
(app-idsecret-key)
query Parameters
email
required
string
Example: email=test@helloclever.co

Contact email. Please ensure that the email is correct before sending.

Responses

Response Schema: application/json
status
required
string

The status to confirm action it.

Response Schema: application/json
object
Response Schema: application/json
object
Response Schema: application/json
object

Response samples

Content type
application/json
{
  • "status": "Ok"
}