AXS Developer Hub
  1. Developers
AXS Developer Hub
  • Getting Started
    • Overview
    • Account Setup
    • Payment Link
    • Merchant Branding
  • Point of Sale
    • PayCube
    • Function & Response Codes
  • Developers
    • Payment Link Integration
    • QR Code Integration
    • Transaction Query
  • Plugin
    • WooCommerce
  • Appendix
    • Test Cards
    • Reserved Amounts
  1. Developers

QR Code Integration

Overview#

This section enabled developers to integrate AXS Payment Link with their app/web to start collecting payments by displaying QR code on customer-facing devices for customer to scan pay.
Prerequisites: Do complete your Merchant Branding and get your Payment Link ready.
Choose Link Type - Get QR Code String

Generating Client ID and Secret#

Before integrating with AXS Checkout, it is essential to understand how AXS authenticate you and how the data is protected.
AXS uses Client ID and Secret to authenticate you and encrypt your payload to keep your data safe.
Follow the steps to generate Client ID and Secret:
1
Navigate to Developer page
2
Click 'Create' button on top right corner to create new credential
You may input the application name that is easy to recognise and represent your application.
Client ID and Secret should be kept confidential and only stored on your servers. Do not store them on your mobile or web client

Start Integrating#

Starts your integration into your application in 3 steps:
1. Generate Complete Payment Link
Generate a complete payment link with user's payment information.
2. Flash QR Code on Screen
Once the complete payment link is ready, request for the QR string using the payment link.
3. Handle Webhook
After the payment is processed, webhook will be sent for payment notifications.

Step 1: Generate Complete Payment Link#

This is the first step of the payment flow. Once you have the base payment link, client id and secret, follow this instruction to generate a complete payment link.

Endpoint#

UAT
Production
https://payment.uat.pay.axs.com.sg/api/hpp/v1/qrcode/{merchantLinkId}?data={JWE encrypted parameters}
AXS uses JSON Web Encryption (JWE) to encrypt the request parameters.

Request Parameters#

Parameters
Required
Remarks
clientIdThe Client ID generated in Merchant Portal
amountPayment amount in cents.
1. Example: 100 = $1.00
2. Max amount = $9,999,999.00
3. Amount preset in Merchant Portal will be used if not specify
currencyDefault is "SGD"
Currently only support SGD.
merchantRefMerchant's unique merchant reference.
Max 40 characters.
scheme- Available values: paynow, alipay, wechatpay.
- Accepts only single value.
- If not specified, default will be paynow.
expiryTo set preferred expiry (in seconds) for QR code.
Default 300 seconds.
terminalIdMerchant's input information.
To be displayed in Merchant Portal.
webhookUrlThis URL will overwrite preset URL in Merchant Branding.
Sample Request Data
{"clientId": "5fc53a20-e563-4f45-8dcc-4fd1f20f649c", "amount": "1023", "currency": "SGD", "merchantRef": "Ref123", "scheme": "", "expiry": "450", "terminalId": "Terminal-1", "webhookUrl": "https://webhook.site/fc1903f3-09a3-4141-af96-63c2ad029373"}
Sample Code
Sample Final URL

Step 2: Flash QR Code on Screen#

After the complete payment link is generated, make server-to-server call (CURL) to the payment link. You will received JWE encrypted payload as respond.
Decrypt the payload using the same secret key and validate the parameters as below:

Response Parameters#

Parameters
Required
Remarks
transactionReferenceIdAXS' unique transaction reference. Example: 1448241333514969089
merchantIdUnique Merchant ID assigned to you by AXS.
merchantRefMerchant's unique merchant reference from Step 1.
qrStringA string of QR code generated from AXS.
You will have to convert this string into QR code before displaying on screen.
expiryThe validity of QR code. It is either defined by you or default as 600 seconds.
createdAtDate time of the QR code creation in Unix format.
Example: 1765869431779
statusSUCCESS - QR code generated successfully.
paymentTypeThe type of the QR code.
Example: PAYNOW / ALIPAY / WECHATPAY
Sample Response Data
{"transactionReferenceId":"1465233604962779136","merchantId":"010120000666","merchantRef":"Ref123","qrString":"00020101021226580009SG.PAYNOW010120213999902222Z01103010041420260126144014520458145303702540510.235802SG5915TauLong Testing6009Singapore62260122PNW146523360544319078463046366","expiry":300,"createdAt":1769409314506,"status":"SUCCESS","paymentType":"PAYNOW"}
Sample Code
Once you decrypted the payload and verified the content, convert the QR value in qrString into QR code and display on screen for customer to make payment.

Step 3: Handle Webhook#

Once the payment is completed, a webhook notification will be triggered from AXS' server to your server about the payment confirmation.
Decrypt the JWE payload using the same method in Step 2.
Please be advised to mark your order as paid ONLY after the webhook is received and validated.

Webhook Parameters#

The following fields are sent with the webhook request:
Parameters
Required
Remarks
amountPayment amount in dollar. Example: 101.01
currencyDefault is "SGD"
Currently only support SGD.
transactionRefAXS' unique transaction reference. Example: 1448241333514969089
merchantRefMerchant's unique merchant reference from Step 1.
statusPayment status:
SUCCESS - Payment successful.
EXPIRED - QR code expired. Use the reserved amounts provided to simulate.
responseCodeEmpty for QR payment
paymentSchemePayment scheme.
Available value: PAYNOW / ALIPAY / WECHATPAY
paymentDateTimePayment date time in (ISO 8601) standard.
Example: 2025-12-10T09:14:01.201466Z
After received webhook from AXS, decrypt the JWE payload using the same secret key used for encryption in Step 1.
Sample Response Data
{"amount":"10.23","currency":"SGD","transactionRef":"1428191406936641536","merchantRef":"Ref123","status":"SUCCESS","responseCode":"00","paymentScheme":"VISA","paymentDateTime":"2026-01-16T01:22:46.010508Z"}
Congrats! You have now successfully completed the payment integration with QR code.
Previous
Payment Link Integration
Next
Transaction Query
Built with