1. Overview

The TRAXX Payment Gateway supports card payments, alternative payment methods, hosted checkout, refunds, transaction queries, and recurring payment setup using parameter-based transaction types.

HTTPS only SHA-256 signing 3DS support Hosted checkout Refund API

Audience

This document is intended for developers integrating merchant systems with the TRAXX Payment Gateway.

Supported Payment Methods

  • Visa
  • Mastercard
  • Alternative payment methods such as Paynow QR and selected wallets (Apple Pay, Google Pay), where enabled

2. Integration Methods

Topic Direct Post Hosted Payment Page
Customer enters card details On the merchant page On the TRAXX hosted page
Endpoint https://sandbox.traxx.sg/api/payment https://hosted.sandbox.traxx.sg/hostedpageserver/api/v1/transactions
Card fields sent by merchant Yes No
3DS redirect possible Yes Yes
Recurring first payment Supported via transType Supported via transType

Direct Post

Use Direct Post when the merchant system collects payment details and submits the payment request directly to TRAXX. This method provides greater flexibility and control over the payment flow but may require additional handling for different payment methods.

Hosted Payment Page

Use Hosted Payment Page when the merchant prefers customers to enter payment details on a TRAXX-hosted checkout page. This option is recommended if the merchant prefers a single integration that supports multiple payment methods (Paynow QR, Apple Pay, Google Pay, etc) without requiring separate implementations for each method.

Please note that successful payments using payment methods such as PayNow and wallets cannot be tested in the sandbox environment. However, you may click the Cancel button to test the redirect flow.

3. Quick Start

Direct Post flow

POST https://sandbox.traxx.sg/api/payment
No. Steps Related link
1Send a payment request to the Direct Post endpoint.5. Payment Request
2If the response includes skipTo3DURL, redirect the customer to that URL.
Otherwise, the transaction result returned in the response should be treated as the final payment status.
6. Payment Response
3Handle the merchant return URL response.7. Return URL
4Handle the merchant notification URL callback.8. Notification URL
5Return HTTP 200 with acknowledgement JSON for successful callback processing.8. Notification URL

Hosted Payment Page flow

POST https://sandbox.traxx.sg/hostedpageserver/api/v1/transactions
No. Steps Related link
1Send a payment request to the Hosted Payment Page endpoint.5. Payment Request
2The response will include skipTo3DURL, which is the hosted payment page URL.
Redirect the customer to that URL.
6. Payment Response
3Handle the merchant return URL response.7. Return URL
4Handle the merchant notification URL callback.8. Notification URL
5Return HTTP 200 with acknowledgement JSON for successful callback processing.8. Notification URL

4. Transaction Types

Type Code Description
Capture sales Immediately authorizes and captures the transaction amount.
Recurring first payment subscribe Processes the first payment and creates a token for subsequent recurring charges.
MOTO moto Immediately authorizes and captures a MOTO transaction without 3DS verification.
MOTO recurring first payment moto-subscribe Processes the first MOTO recurring transaction and creates a token for future charges.

Availability of each transaction type depends on acquirer support and merchant configuration.

5. Payment Request

Note: All parameter values must be submitted as string data types, unless stated otherwise.

5.1 Common Parameters

Parameter Required Description Example
merNo Yes Merchant number assigned by TRAXX. 28888
terNo Yes Terminal number assigned by TRAXX. 88866
merMgrURL Yes Merchant transaction website domain. Enter the domain name only (exclude http:// and https://). merchant.com
merremark No Optional merchant-defined remark or reference note for internal tracking purposes. Test order
orderNo Yes Unique merchant-generated order number used to identify and track the transaction in the merchant system. This value is also used as the primary transaction reference for tracking recurring payment transactions. ABC12345
transType Yes Transaction type. Refer to: 4. Transaction Types sales
transModel Yes Fixed value: M. M
apiType No API interface type. Use 1 by default unless stated otherwise. 1
currencyCode Yes Currency code in ISO 4217 alphabetic format representing the transaction currency. USD
amount Yes Transaction amount. Must be submitted in decimal format with exactly two decimal places. 50.00
returnURL Yes URL to which the customer will be redirected after payment processing is completed. If your URL contains "&", please replace it with "|". Refer to 7. Return URL https://return.traxx.sg
merNotifyURL Yes Merchant endpoint URL used to receive asynchronous transaction notifications. If your URL contains "&", please replace it with "|". Refer to 8. Notification URL https://notify.traxx.sg
hashcode Yes The hashcode must be generated from the required request fields in the prescribed sequence using SHA-256 and the hash key provided by TRAXX. Refer to: 9. Signature Generation ABCD123456...
payIP Yes Customer public IP address captured at the time of transaction submission. 121.21.1.121
CharacterSet Yes Character encoding used in the request. Typically UTF8. UTF8
webInfo No Browser user-agent information of the customer environment. Strongly recommended for monitoring purposes. userAgent:Mozilla...
language No Language preference for the payment session, if applicable. Default is en_US en_US

5.2 Direct Post

POST (CARD) https://sandbox.traxx.sg/api/payment
POST (QR) https://sandbox.traxx.sg/api/qr
Parameter Required Description Example
cardNO Yes Primary Account Number (PAN) of the payment card. Must be provided as a numeric string without spaces or separators. 5544330000000235
cvv Yes Card Verification Value (CVV/CVC). Security code printed on the card, typically 3 or 4 digits. 123
expMonth Yes Card expiry month in two-digit format (MM). 10
expYear Yes Card expiry year in four-digit format (YYYY). 2030
cardFullName Yes Full name of the cardholder. John Doe
cardType No Used for alternative payment methods like PayNow QR (Singapore), Apple Pay, Google Pay, and others. paynow
goodsString Yes Product details in JSON string format, where each item contains fields such as goodsName, quantity, and goodsPrice. [{\"goodsName\":\"pen\",
\"quantity\":\"2\",
\"goodsPrice\":\"15.20\"}]
Billing Information
cardAddress Yes Billing address of the cardholder. 123 Market Street
cardZipCode Yes Billing ZIP or postal code. 94103
cardCity Yes Billing city. San Francisco
cardState Yes Billing state or province. CA
cardCountry Yes Billing country in ISO 3166-1 alpha-2 format. US
cardFullPhone Yes Cardholder phone number. 12345678
Recipient Information
grPerName Yes Recipient or consignee name. John Doe
grAddress Yes Delivery address. 500 Market Street
grZipCode Yes Delivery ZIP or postal code. 94103
grCity Yes Delivery city. San Francisco
grState Yes Delivery state or province. CA
grCountry Yes Delivery country in ISO 3166-1 alpha-2 format. US
grphoneNumber Yes Recipient phone number. 9876543210
grEmail Yes Recipient email address. john@example.com

5.3 Hosted Payment Page

POST https://sandbox.traxx.sg/hostedpageserver/api/v1/transactions

For Hosted Payment Page integration, the merchant must not send card number, CVV, or expiry details. The customer enters those details on the TRAXX hosted checkout page after redirect.

6. Payment Response

The payment response contains the transaction result and any next-step instructions.

Parameter Description
transTypeTransaction type.
orderNoMerchant order number.
merNoMerchant number.
terNoTerminal number.
currencyCodeTransaction currency.
amountTransaction amount.
tradeNoGateway transaction number.
hashcodeSHA-256 response signature.
respCodeTransaction response code.
respMsgTransaction response message.
acquirerAcquirer name or the Merchant descriptor.
settleCurrencySettlement currency.
settleAmountSettlement amount.
skipTo3DURLThe URL provided for payer redirection when 3DS authentication or Hosted Payment Page is required.
The merchant must redirect the payer's browser to this URL to allow completion of authentication or payment process.
merNotifyURLMerchant's notification URL.
{
  "transType": "sales",
  "orderNo": "1776751685203",
  "merNo": "2888",
  "terNo": "88816",
  "currencyCode": "SGD",
  "amount": "21.00",
  "tradeNo": "9aa0ada8a798f6de",
  "hashcode": "56a7b4e97d8e0bddcc8cf571bb6b77df47b184591e98b59fb4bd61bffca0b1ae",
  "respCode": "01",
  "respMsg": "pending_async",
  "acquirer": "FS-SGD",
  "settleCurrency": "SGD",
  "settleAmount": "21.00",
  "skipTo3DURL": "https://test.com/gateway/processing;sessionid=574DAA...1Ojg4NDM",
  "merNotifyURL": "https://notify.traxx.sg"
}

Response code summary

Code Meaning Description
00SuccessPayment completed successfully. No further action required.
01PendingPayment is being processed asynchronously. The final result will be provided via notification or query API.
OthersFailedPayment failed. Treat any code other than 00 or 01 as a failed transaction.

7. Return URL

After payment completion, TRAXX redirects the customer browser to the merchant returnURL with payment result parameters appended as query strings.

Merchant handling requirements

  • Validate the response signature.
  • Check respCode and respMsg.
  • Use the Return URL mainly to display the payment result to the customer.
  • The final transaction status should be confirmed and updated based on the server-to-server notification sent to merNotifyURL. Refer to 8. Notification URL for instructions on updating payment status.
Sample Return URL:
https://your-return-url.com/?amount=2.00¤cyCode=SGD&hashcode=...&merNo=18888&orderNo=ABC12345&respCode=00&respMsg=success&terNo=88816&tradeNo=9fc4952d74a7db84&transType=sales

8. Notification URL

TRAXX sends asynchronous notifications to the merchant merNotifyURL to report payment results, including recurring payment events where applicable.

Acknowledgement requirement

Upon receiving a payment notification, the merchant endpoint must return HTTP 200 OK with a JSON body to acknowledge successful processing.
HTTP/1.1 200 OK
Content-Type: application/json

{
  "merNotifyStatus": "1"
}

Notification Best Practices

Immediate acknowledgement: Merchant systems should return HTTP 200 OK as soon as the notification is received, together with the required acknowledgement JSON response. Any remaining business processing should be performed asynchronously using a queue, worker, or background job.

Returning the acknowledgement immediately helps reduce timeout retries and prevents duplicate notification handling caused by delayed responses.

Timeout and retry behaviour

  • The acknowledgement timeout is currently set to 20 seconds.
  • If acknowledgement is not received within the timeout window, the retry mechanism is triggered automatically.
  • Merchant systems should process notifications idempotently to prevent duplicate updates.
  • If the notification endpoint is unavailable, stopped, or under maintenance, the system may retry the notification up to 4 attempts.
  • Multiple notifications for the same transaction can therefore occur when acknowledgements time out or fail.

Idempotency and duplicate handling

Merchant systems must implement duplicate checking when processing payment notifications. Use both orderNo and tradeNo as references.

Field Recommended use
orderNo Merchant order reference for business-level matching.
tradeNo Gateway transaction reference for uniqueness and duplicate detection.

tradeNo is unique per transaction. If multiple notifications are received with the same orderNo and tradeNo, they should be treated as duplicate notifications and must not result in duplicate records being created. This is particularly important for subsequent recurring payment notifications, where retry mechanisms may resend the same notification if the initial notification does not receive acknowledgement within the configured timeout period.

Operational recommendation

  • Do not wait for all internal processing to finish before returning HTTP 200.
  • Make notification processing idempotent.
  • Log and reconcile retries using both orderNo and tradeNo.

9. Signature Generation

The hashKey is a secret key provided by TRAXX. It must be kept confidential and never exposed on the frontend.

All signatures must be generated using the SHA256 hashing algorithm.

General Rules

  • Parameters must be concatenated in the exact order specified.
  • Use & between each key-value pair.
  • Append the hashKey at the end.
  • Do not include extra spaces.
  • Parameter names are case-sensitive.
  • The final hash output must be represented as a lowercase hexadecimal SHA256 string.

9.1 Request Signature

Concatenate the following fields in exact order:

EncryptionMode=SHA256
CharacterSet={CharacterSet}
merNo={merNo}
terNo={terNo}
orderNo={orderNo}
currencyCode={currencyCode}
amount={amount}
payIP={payIP}
transType={transType}
transModel={transModel}
{hashKey}

Step-by-step process

  1. Concatenate all parameters using &.
  2. Append the hashKey at the end.
  3. Apply SHA256 hashing.
  4. Convert output to lowercase hexadecimal.

Example string before hashing

EncryptionMode=SHA256&CharacterSet=UTF8&merNo=168&terNo=88816&orderNo=109116361045¤cyCode=USD&amount=98.99&payIP=127.0.0.1&transType=sales&transModel=M&fb5677a2f9ab4c02a232d018b1eddfd6

After applying SHA256 hashing to the above string, the resulting value becomes the hashcode sent in the payment request.


9.2 Response and Notification Signature

Merchants must validate the response and notification signature to confirm that the data originated from TRAXX.

Concatenate the following fields in exact order:

amount={amount}
currencyCode={currencyCode}
merNo={merNo}
orderNo={orderNo}
respCode={respCode}
respMsg={respMsg}
terNo={terNo}
tradeNo={tradeNo}
transType={transType}
{hashKey}

Verification process

  1. Concatenate the received parameter values.
  2. Append the hashKey.
  3. Apply SHA256 hashing.
  4. Compare the generated hash with the received signature.
  5. If values match → response is valid.
  6. If values do not match → reject the response.

Important Notes

  • The hash must follow the documented field order exactly.
  • Always use the exact parameter values received or sent.
  • Any mismatch in order, value, or format will result in signature failure.
  • Signature validation is mandatory before updating payment status.

10. Refund

Endpoint

POST https://sandbox.traxx.sg/refund/doRefund

Request fields

Parameter Type Description Example
merNostringMerchant number.28888
terNostringTerminal number.88816
tradeNostringOriginal payment transaction number returned by TRAXX.28888
busAmountnumericOriginal transaction amount.28888
busCurrencystringOriginal transaction currency.28888
refundAmountnumericRefund amount, full or partial.28888
refundCurrencystringRefund currency.28888
refundReasonstringReason for refund.28888
hashCodestringRefund request signature. Refer to: 9. Signature Generation28888
{
  "merNo": "28888",
  "terNo": "28888",
  "tradeNo": "28888",
  "busAmount": "28888",
  "busCurrency": "28888",
  "refundAmount": "28888",
  "refundCurrency": "28888",
  "refundReason": "28888",
  "hashCode": "28888"
}

Response fields

Parameter Type Description Example
merNostringMerchant number.28888
terNostringTerminal number.88816
tradeNostringOriginal payment transaction number returned by TRAXX.28888
busAmountnumericOriginal transaction amount.28888
busCurrencystringOriginal transaction currency.28888
refundAmountnumericRefund amount, full or partial.28888
refundCurrencystringRefund currency.28888
refundReasonstringReason for refund.28888
hashCodestringRefund request signature.28888
{
  "merNo": "28888",
  "terNo": "28888",
  "tradeNo": "28888",
  "busAmount": "28888",
  "busCurrency": "28888",
  "refundAmount": "28888",
  "refundCurrency": "28888",
  "refundReason": "28888",
  "hashCode": "28888"
}

11. Query Transactions

Endpoint

POST https://sandbox.traxx.sg/external/query

Request fields

Parameter Description
merNoMerchant number.
terNoTerminal number.
orderNoMerchant order number.
tradeNoOptional gateway transaction number.
amountTransaction amount.
currencyTransaction currency.
signatureQuery request signature.
Example: 

Response fields

Parameter Description
merNoMerchant number.
terNoTerminal number.
orderNoMerchant order number.
tradeNoOptional gateway transaction number.
amountTransaction amount.
currencyTransaction currency.
signatureQuery request signature.
Example: 

12. Payment Method Identification

For Hosted Payment Page integrations where multiple payment methods are available, the merchant should submit the initial payment request using the primary terminal credentials provided for the checkout initiation request.

Initial request behaviour

  • Use the primary terminal credentials in the initial payment request.
  • At the point of request creation, the merchant does not yet know which payment method the payer will choose.
  • The hosted payment page then presents the enabled payment methods to the payer.

Callback verification behaviour

Additional terminal credentials may be issued for specific payment methods such as PayNow, Google Pay, or Apple Pay. These credentials are not used to create the initial hosted payment page request. Instead, they are used to identify and verify the actual payment method used based on the API response or notification callback.

Stage Which credentials to use
Initial one-time payment request Use the primary terminal credentials provided for checkout initiation.
Response / callback verification Use the payment-method-specific terminal information returned in the callback to identify which method the payer selected.

Example: if terminal IDs such as 88836, 88846, or 88856 are issued for specific payment methods, those values are used for callback interpretation and payment method tracking, not for the initial hosted page request.

13. Recurring Payments

Recurring payments are set up using the first successful payment transaction. The initial recurring setup payment must be submitted using transType=subscribe.

13.1 Recurring Payment Flow

First Payment

The first payment is initiated by the merchant using transType=subscribe. This first successful transaction sets up the recurring payment arrangement.

Subsequent Payments

After the first successful recurring setup payment, subsequent payments are triggered automatically on a monthly basis by the TRAXX system.

13.2 Recurring Bill Date Rules

The next recurring charge date is determined based on the merchant's configured recurring day, where applicable. If no recurring day has been configured, the recurring charge date will default to one month from the initial payment date.

Scenario Next Recurring Date
Merchant does not have a configured recurring day The bill date is based on the initial payment date plus one month.
Initial payment date is on or before the 15th of the month The next recurring date is set to the merchant-configured recurring day in the following month.
Initial payment date is after the 15th of the month The next recurring date is set to the merchant-configured recurring day two months later.

13.3 How the Merchant Is Notified

When a subsequent recurring payment is triggered, the merchant will be notified through the same notification callback flow used for other payment notifications.

The notification will be sent to the merchant's merNotifyURL, and the orderNo in the notification will remain the same as the original recurring setup transaction.

Important: Recurring payment notifications must be handled using the same validation, acknowledgement, and idempotency logic described in the Notification URL section.

13.4 Best Practices

  • Store the original orderNo from the first recurring setup transaction for reconciliation.
  • Verify the notification signature before updating any payment status.
  • Return HTTP 200 OK with the required acknowledgement JSON as soon as the notification is received.
  • Process recurring notifications idempotently to prevent duplicate records in case of retries.

13.5 Example Summary

Step 1: Merchant submits first payment with transType=subscribe
Step 2: First payment succeeds and recurring arrangement is created
Step 3: System automatically triggers subsequent recurring payments monthly
Step 4: Merchant receives payment result through merNotifyURL
Step 5: Merchant validates, acknowledges, and processes the notification

13.6 Stopping Recurring Payments

Important: Recurring payments will continue indefinitely once the recurring arrangement has been successfully created. Recurring charges will only stop when the merchant submits a termination request to TRAXX support. Recurring payments do not automatically stop after a fixed number of cycles.

Termination Process

Merchants must submit a termination request manually using the Recurring Termination Request Form (template to be provided) when recurring payments are no longer required. The completed form should be sent to support@traxx.asia for processing.

Important Notes

  • Recurring payments will continue to be triggered according to the configured billing cycle until the termination request has been processed.
  • Merchants should submit termination requests in advance of the next billing cycle to avoid unintended charges.
  • Termination requests are typically processed within 1-2 working days.
  • Once termination is completed, no further recurring charges will be generated for the specified orderNo.

14. Live-Proofing and Go-Live Notes

Before Go-Live

Before proceeding to production, the merchant will receive the following credentials and configuration details from TRAXX.

Parameter Description Example
merNo Merchant number assigned by TRAXX. 1888
terNo Terminal number associated with the merchant account. 88816
hashKey Secret key used to generate the request signature. Refer to Section 9: Signature Generation. 36fce1a7709c440286477792a2735b73
merMgrURL Merchant payment gateway URL configured on TRAXX system. https://traxx.asia
currencyCode Currency enabled for the terminal, in ISO 4217 format. USD
  • Provide the production server IP address for whitelisting.
  • Configure the production credentials in the merchant environment.
  • Complete transaction testing and record the results in the required live-proofing sheet.
  • TRAXX will review the submitted test results before lifting transaction restrictions and enabling normal live processing.

Testing notes

  • During pre-production or live-proofing, each test transaction may be subject to a maximum amount limit, depending on merchant setup.
  • Where instructed, test transactions should not exceed $20.00 per transaction.
  • Live test transactions should generally be kept to at least $2.00 to avoid reporting issues.

Recommended merchant checklist

Step Action
1 Share server IP address and payment URL for whitelisting.
2 Configure merchant credentials for the target environment.
3 Run required proofing transactions.
4 Record all proofing transactions in the required test sheet.
5 Submit the completed sheet to TRAXX for review.
6 Proceed to normal live processing after TRAXX confirms go-live readiness.