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.
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 |
|---|---|---|
| 1 | Send a payment request to the Direct Post endpoint. | 5. Payment Request |
| 2 | If 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 |
| 3 | Handle the merchant return URL response. | 7. Return URL |
| 4 | Handle the merchant notification URL callback. | 8. Notification URL |
| 5 | Return 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 |
|---|---|---|
| 1 | Send a payment request to the Hosted Payment Page endpoint. | 5. Payment Request |
| 2 | The response will include skipTo3DURL, which is the hosted payment page URL. Redirect the customer to that URL. | 6. Payment Response |
| 3 | Handle the merchant return URL response. | 7. Return URL |
| 4 | Handle the merchant notification URL callback. | 8. Notification URL |
| 5 | Return 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\", |
| 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 |
|---|---|
transType | Transaction type. |
orderNo | Merchant order number. |
merNo | Merchant number. |
terNo | Terminal number. |
currencyCode | Transaction currency. |
amount | Transaction amount. |
tradeNo | Gateway transaction number. |
hashcode | SHA-256 response signature. |
respCode | Transaction response code. |
respMsg | Transaction response message. |
acquirer | Acquirer name or the Merchant descriptor. |
settleCurrency | Settlement currency. |
settleAmount | Settlement amount. |
skipTo3DURL | The 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. |
merNotifyURL | Merchant'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 |
|---|---|---|
00 | Success | Payment completed successfully. No further action required. |
01 | Pending | Payment is being processed asynchronously. The final result will be provided via notification or query API. |
| Others | Failed | Payment 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
respCodeandrespMsg. - 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
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
orderNoandtradeNo.
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
hashKeyat 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
- Concatenate all parameters using
&. - Append the
hashKeyat the end. - Apply SHA256 hashing.
- 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
- Concatenate the received parameter values.
- Append the
hashKey. - Apply SHA256 hashing.
- Compare the generated hash with the received signature.
- If values match → response is valid.
- 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 |
|---|---|---|---|
merNo | string | Merchant number. | 28888 |
terNo | string | Terminal number. | 88816 |
tradeNo | string | Original payment transaction number returned by TRAXX. | 28888 |
busAmount | numeric | Original transaction amount. | 28888 |
busCurrency | string | Original transaction currency. | 28888 |
refundAmount | numeric | Refund amount, full or partial. | 28888 |
refundCurrency | string | Refund currency. | 28888 |
refundReason | string | Reason for refund. | 28888 |
hashCode | string | Refund request signature. Refer to: 9. Signature Generation | 28888 |
{
"merNo": "28888",
"terNo": "28888",
"tradeNo": "28888",
"busAmount": "28888",
"busCurrency": "28888",
"refundAmount": "28888",
"refundCurrency": "28888",
"refundReason": "28888",
"hashCode": "28888"
}
Response fields
| Parameter | Type | Description | Example |
|---|---|---|---|
merNo | string | Merchant number. | 28888 |
terNo | string | Terminal number. | 88816 |
tradeNo | string | Original payment transaction number returned by TRAXX. | 28888 |
busAmount | numeric | Original transaction amount. | 28888 |
busCurrency | string | Original transaction currency. | 28888 |
refundAmount | numeric | Refund amount, full or partial. | 28888 |
refundCurrency | string | Refund currency. | 28888 |
refundReason | string | Reason for refund. | 28888 |
hashCode | string | Refund 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 |
|---|---|
merNo | Merchant number. |
terNo | Terminal number. |
orderNo | Merchant order number. |
tradeNo | Optional gateway transaction number. |
amount | Transaction amount. |
currency | Transaction currency. |
signature | Query request signature. |
Example:
Response fields
| Parameter | Description |
|---|---|
merNo | Merchant number. |
terNo | Terminal number. |
orderNo | Merchant order number. |
tradeNo | Optional gateway transaction number. |
amount | Transaction amount. |
currency | Transaction currency. |
signature | Query 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.
13.4 Best Practices
- Store the original
orderNofrom 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
transType=subscribemerNotifyURL13.6 Stopping Recurring Payments
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.00per transaction. - Live test transactions should generally be kept to at least
$2.00to 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. |