REST API Specification

POS Integration API

API v1.3.19 WPAY QA_1.3.19

REST API specification for integrating a third-party POS system with a WPAY payment terminal over a local network. Covers all transaction types, receipt options, async mode, and signature approval flow.

Introduction

Payment gateway integration with a POS system enables customers to make purchases quickly and securely from their POS device to the payment terminal. Integrators are responsible for meeting applicable PCI DSS and PCI Software Security Framework requirements.

The POS Integration API is consumed by a POS or middleware system talking to a payment terminal on a local network. All requests and responses use JSON.

Technical Requirements
  • SessionId — valid GUID/UUID generated by the POS software; maximum 36 characters; must be globally unique for each transaction request.
  • Base endpoint — the IP address (local network) of the terminal which runs the Payment app.
  • X-API-KEY — required when the TMS-configured authorization key is set. Missing or wrong key returns an error response. The client may generate the key in any form (maximum 32 characters); the value configured in TMS and the value sent in X-API-KEY must be identical. Sample TMS key: 6B9F2A81D3E47C5A0B1F9E8D7C6B5A43.
Test Tool

Postman REST client. Send requests, inspect responses, and easily debug REST APIs.

Quick Start
  1. Configure the terminal IP address and port on the local network (the base endpoint of the Payment app).
  2. Generate a sessionId (UUID, max 36 characters) — unique for each transaction request.
  3. (Optional) Add the X-API-KEY header if TMS request authorization is configured.
  4. Construct the request URI and POST or GET to the appropriate endpoint — see API Requests below.

Sync vs Async Mode

Transaction requests support two communication modes. The default is synchronous (AsyncMode disabled). Set AsyncMode enabled to use async mode — the terminal returns an immediate status acknowledgement and the client polls querytransaction for the final result.

Synchronous — default (all endpoints)

The POS sends a request and blocks until the terminal returns the full HTTP response. Single request, single response.

Synchronous mode — all endpoints Synchronous mode — all endpoints POS client Payment terminal POST /v1/sessions/{{sessionId}}/{{endpoint}} (AsyncMode: disabled) terminal processes request... blocking 200 OK — full response body (SessionId + result) Response received SessionId + full result POS blocks until terminal responds — one request, one response

Summary

  • Default mode for all endpoints — transaction and non-transaction.
  • AsyncMode defaults to disabled.
  • POS waits and blocks until the HTTP response arrives.
  • Single request → single response.
Asynchronous — transaction endpoints only

Transactions in async mode allow the merchant to call the API to start the transaction and receive its status immediately, without waiting for the POS terminal to complete the transaction for a final response. The client retrieves the current status by calling querytransaction.

Async mode — transaction endpoints only (AsyncMode: enabled) Async mode — transaction endpoints only (AsyncMode: enabled) POS client Payment terminal POST /v1/sessions/{{sessionId}}/transaction (AsyncMode: enabled) Immediate — ResponseType: "querytransaction" Status: 2 (Initializing transaction) terminal processing card tap, PIN, approval... poll loop GET /v1/sessions/{{sessionId}}/querytransaction Status not 1 — keep polling (see Table ENUM-12) Status not 1 — keep polling (see Table ENUM-12) opt [ signature required ] GET /querytransaction Status: 11 — Waiting For Signature Confirmation From Client POST /approvesignature Approval: approve or reject Success: true — signature recorded continue polling querytransaction... GET /querytransaction Status: 1 — Transaction completed Full result available Transaction object in response sessionId must match: POST /transaction → GET /querytransaction → POST /approvesignature

Summary

  • Only available for transaction endpoints (POST /transaction with AsyncMode enabled).
  • Initial response ResponseType is always "querytransaction".
  • POS must poll GET /querytransaction repeatedly using the same sessionId as the original transaction URL.
  • When Status = 11 (WaitingForSignatureConfirmationFromClient) with DigitalSig present, call POST /approvesignature (same sessionId) then continue polling — see Table ENUM-12.
  • When Status = 1 (TransactionCompleted), the Transaction object contains the full result — see Table ENUM-12.
Table ENUM-12 — Status and StatusText field values

Enum table — colocated with Sync vs Async. Used by Query Transaction and async Status on transaction responses. Also in Table Index.

Here are some values for the Status and StatusText fields returned in async mode responses (ResponseType: "querytransaction").

Value of "Status" fieldValue of "StatusText" fieldDescribe
None = 0No active transaction stage.
TransactionCompleted = 1Transaction completedThe transaction has been completely processed. The Transaction object in the response contains the full result when status equals 1.
Initialize = 2Initializing transactionThe transaction is being initialized.
AwaitingUserInteraction = 3Awaiting user interactionWaiting for the user to complete required actions (signature, select account type ...)
WaitingForCard = 4Waiting for cardWaiting for the card to be presented.
CardProcessing = 5Card processingThe card is currently being processed.
TransactionProcessing = 6Transaction ProcessingThe transaction is being processed.
TransactionProcessed = 7Transaction ProcessedThe Transaction has been processed.
WaitingForCardRemove = 8Waiting For Card RemoveThe transaction requires selecting an waiting for card remove.
WaitingForMerchantCard = 9Waiting For Merchant CardThe transaction requires the user to swipe merchant card.
WaitingForSignatureConfirmation = 10Waiting For Signature ConfirmationThe payment app is auto-approving the signature without POS app interaction.
WaitingForSignatureConfirmationFromClient = 11Waiting For Signature Confirmation From ClientWaiting for the POS app to approve or reject the captured signature. Call Approve Signature (POST /approvesignature) with DigitalSig data, then continue polling.
GettingSignatureFromCustomer = 12Getting Signature From CustomerThe system is prompting the customer to provide a signature.
DCCSelecting = 13DCC SelectingThe system is presenting DCC (Dynamic Currency Conversion) options to the user.
SelectAccountType = 14Select Account TypeWaiting for the cardholder to select an account type.
EnterPin = 15Enter PINWaiting for the cardholder to enter a PIN.
WaitingForProductData = 16Waiting For Product DataWaiting for product/SKU data from the POS.

API Requests

Request URI

The request URI is made up of three parts: the base URL, a sessionId, and the type of request to make.

  • The base endpoint is the IP address (local network) of the terminal which runs the Payment app.
  • A sessionId is a valid UID that identifies the current third-party software request. This must be generated by the POS using standard GUID/UUID generating libraries — maximum 36 characters — and must be a standard, globally unique UUID value for each transaction request.
  • The request type portion of the path is the endpoint suffix for the function being called (see Request Types below).
  • An API Request object should be constructed and posted to the appropriate API endpoint.
URL Pattern
https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/{{endpoint}}
Example URIs
URI
https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/transaction
https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/querytransaction
https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/merchantlist
https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/settlement
https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/approvesignature
Request Authorization

This feature is not a default-enabled one, so resellers need to set the key from TMS to restrict clients' requests. After configuring this authorization value, clients need to add it as a header item to authorize requests (X-API-KEY). The Authorization Key set in TMS allows a maximum of 32 characters.

There is no required generation algorithm. The client may create the key in any format they choose (letters, digits, hex string, etc.), as long as the same value is configured on TMS and sent in the X-API-KEY request header.

Sample Authorization Key used as a TMS template default:

Sample TMS Authorization Key
6B9F2A81D3E47C5A0B1F9E8D7C6B5A43

If the header is missing or contains an incorrect key, the terminal returns an error response.

POS Integration Options screen showing Authorization Key field configured in TMS
POS Integration Options — the Authorization Key is configured on the terminal via TMS (maximum 32 characters). Clients must send the same value in the X-API-KEY request header when authorization is enabled. Sample key: 6B9F2A81D3E47C5A0B1F9E8D7C6B5A43.
Request Headers (all endpoints)

These headers apply to every API call in this document. They are not repeated in each endpoint example.

HeaderValueRequiredDescription
Content-Typeapplication/jsonMMust be set for all POST requests with a JSON body.
X-API-KEYstring(32)OAuthorization key configured in TMS (maximum 32 characters). Any client-generated format is accepted if it matches the TMS value. Sample: 6B9F2A81D3E47C5A0B1F9E8D7C6B5A43. Required only when TMS authorization is enabled.
Request Types

Here are the transaction types for each function type used in the URL request path:

Function TypeHTTP MethodTransaction Type
Get Merchant ListGET / POSTmerchantlist
Get Allowed TransactionsPOSTgetAllowedTransactions
Health CheckGEThealthcheck
Bring App To ForegroundPOSTbringapptoforeground
PurchasePOSTtransaction
Refund OnlyPOSTtransaction
VoidPOSTtransaction
Cash OutPOSTtransaction
Purchase CashPOSTtransaction
MOTO PurchasePOSTtransaction
MOTO RefundPOSTtransaction
Pre-authPOSTtransaction
Pre-auth CompletePOSTtransaction
Cancel Pre-AuthPOSTtransaction
Incremental Pre-AuthPOSTtransaction
Pre-auth PartialPOSTtransaction
Pre-Auth ReversalPOSTtransaction
Search TransactionPOSTtransactionsearch
APM Transaction (Alipay / WeChat / CentraPay)POSTtransaction
ReprintPOSTreprint
Card VerificationPOSTquerycard
Settlement EnquiryPOSTsettlement
Settlement CutoverPOSTsettlement
Manual Host LogonPOSTlogon
Print Stored TransactionsPOSTprintstoredtransactions
Print Pending TransactionsPOSTprintpendingtransaction
Cancel TransactionGET / POSTcanceltransaction
Query TransactionGETquerytransaction
Voucher EntryPOSTvoucherEntry
Shift ActionsPOSTshiftactions
ReportsPOSTreports
Transaction ListingPOSTtransactionlisting
Dump LogsPOSTdumplogs
Approve SignaturePOSTapprovesignature

API Responses

Every endpoint returns a JSON body with the same top-level shape. HTTP status and business outcome are separate: a 200 OK can still contain a declined transaction, and a non-2xx response uses the same envelope with error fields in Response. This section describes the shared wrapper and the three response types the API returns.

Common response envelope

All responses use this wrapper. Endpoint-specific fields live inside Response.

PropertyTypeM/ODescription
SessionIdstring(36)MEcho of the sessionId from the request URI.
ResponseTypestringMIdentifies the operation that produced this response (e.g. "transaction", "logon", "merchantlist"). Matches the endpoint function — see API Requests → Request Types.
ResponseobjectMPayload object. Shape depends on ResponseType and outcome — see sections below and each endpoint page.

Boolean encoding rules are documented in Boolean Type. Use that setting when interpreting Success values in this section.

Choosing the response path

After parsing the envelope, use the fields inside Response to decide which path applies:

  • Response.ErrMessage is present → API error / exception (HTTP is non-2xx). Read ErrMessage, Suggestion, and StatusCode. There is no Success field on this path.
  • Response.Success or Response.Transaction.Success is present → business outcome (HTTP is 200). Approved/completed vs declined/failed depends on the terminal's boolean encoding ("1"/"0" or true/false); read ResponseText on failure/decline.
  • Neither applies (e.g. merchantlist) → data payload only; HTTP 200 means the call succeeded.
HTTP status codes

The terminal sets the HTTP status on the wire. Response.StatusCode in the JSON body is the same value as a string (e.g. HTTP 403 → "StatusCode": "403").

HTTPWhenJSON Response shape
200Request accepted; operation finished or data returnedBusiness fields — Success, ResponseText, Transaction, etc.
400Invalid request data, bad TxnType, amount validation, malformed bodyErrMessage, StatusCode: "400"
401X-API-KEY missing or incorrect (when TMS authorization is enabled)ErrMessage, StatusCode: "401"
403Terminal not ready — logon required, merchant not ready, terminal busy, feature not supportedErrMessage, StatusCode: "403", often Suggestion
500Internal server errorMay have no JSON body; some async operations defer the response until processing completes
How to read a response

HTTP status

  • 200 — operation completed or data returned; check Success for approval vs decline.
  • 400 / 401 / 403 — request rejected before processing; read Response.ErrMessage and Suggestion.
  • No response — connection failure or timeout; terminal app may be unreachable.

Business fields (HTTP 200)

  • Response.Success — true = success, false = failure (encoding per Boolean Type); read ResponseText on failure.
  • Response.Transaction.Success — same rule on transaction endpoints.
  • Async mode — poll Status / StatusText; see Sync vs Async.
  • Sync mode — the HTTP connection stays open until the terminal finishes and returns the full body.
Response types

1. Success (HTTP 200)

The operation completed. Where Success is present and true, result fields are populated. ResponseType matches the endpoint called (e.g. "transaction").

Example — approved transaction
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "transaction",
  "Response": {
    "Transaction": {
      "TxnType": "P",
      "Success": "1",
      "lAmount": 100,
      "lszApprovalCode": "327710",
      "szAuthorizationResponseCode": "00"
    }
  }
}

2. Business failure (HTTP 200)

The terminal processed the request but the operation did not succeed (declined card, user cancel, host decline, etc.). HTTP status is still 200 — this is not an API error. Check Success is false and read ResponseText (or Transaction.ResponseText). Do not use ErrMessage on this path.

Example — declined transaction
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "transaction",
  "Response": {
    "Transaction": {
      "TxnType": "P",
      "Success": "0",
      "ResponseText": "Transaction Cancelled"
    }
  }
}

3. Error / exception (HTTP 400 / 401 / 403)

The request was rejected before or instead of normal processing — invalid data, bad API key, terminal not logged on, merchant not ready, or terminal busy. The envelope is unchanged; ResponseType matches the endpoint called (e.g. "transaction" for POST .../transaction). Response contains ErrMessage, StatusCode, and optionally Suggestion — never Success or ResponseText.

Error response fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request transaction.
ResponseTypestring(23)MEndpoint that was called (e.g. "transaction", "settlement", "logon").
Response.ErrMessagestringOError message — display to the operator.
Response.SuggestionstringORecommended next action (e.g. perform manual logon). Populated for merchant-validation failures.
Response.StatusCodestringOSame value as the HTTP status, as a string (e.g. "403").
Sample response — merchant not ready / logon required
{
  "SessionId": "2174267867",
  "ResponseType": "transaction",
  "Response": {
    "ErrMessage": "00986211 requires to Logon",
    "Suggestion": "Check your connection and process a Manual Logon to continue",
    "StatusCode": "403"
  }
}

Common error cases (HTTP 403 unless noted):

  • Logon required — merchant validation failed because the terminal is not logged on. ErrMessage and Suggestion come from the terminal. Call Manual Host Logon, then retry.
  • Merchant not ready — selected merchant cannot accept transactions. Check Mode via Get Merchant List — see Table ENUM-10.
  • Terminal busy — another operation is in progress, or auto-logon is running.
  • Invalid API key (401) — X-API-KEY header missing or wrong when TMS authorization is enabled.
  • Invalid request (400) — malformed JSON, invalid TxnType, or failed field validation.

Quick reference

CaseHTTPCheck
Approved transaction200Response.Transaction.Success = true
Declined transaction200Success = false; read ResponseText
Operation succeeded200Response.Success = true
Operation failed200Response.Success = false; read ResponseText
Logon / merchant not ready403ErrMessage, Suggestion, StatusCode: "403"
Terminal busy403ErrMessage, StatusCode: "403"
Invalid API key401ErrMessage, StatusCode: "401"
Invalid request400ErrMessage, StatusCode: "400"
Terminal unreachable—No HTTP response; use Health Check

Boolean Type

Boolean-like values are controlled by a TMS configuration.

The terminal uses one of two encodings for request and response bodies:

  • String mode — "1" / "0" (yes/no, enabled/disabled, approved/declined)
  • JSON boolean mode — true / false

Integrators must use the encoding that matches the terminal's TMS setting. Do not mix formats in a single request. Applies to Success, AsyncMode, WithReceiptImageData, DisablePrinting (transaction, APM, reprint, card status, settlement, offline transmission), transaction flag fields (fAuthorized, fCanVoid, etc.), and other boolean switches documented on each endpoint.

POS Integration Options screen showing Boolean data format type configured in TMS
POS Integration Options — the Boolean data format type is configured on the terminal via TMS. Choose String 1/0 for "1"/"0" encoding or Boolean for true/false encoding in request and response bodies.

JSON examples in this document may show one encoding (string or boolean) for illustration; always match the terminal TMS setting in live integrations.

Build a Server Validation Handler

When the terminal's HTTP server uses TLS, the POS client connects over https:// instead of http://. A custom server validation handler and ca.pem CA certificate are required only when HTTP Server SSL Enabled is set to Yes in TMS (POS Integration Options). If SSL is disabled (No), use plain HTTP to the configured port — no CA file or TLS handler is needed.

HTTP Server SSL (TMS)
POS Integration Options screen showing HTTP Server SSL Enabled set to Yes in TMS
POS Integration Options — HTTP Server SSL Enabled is configured on the terminal via TMS. When set to Yes, the payment app serves the POS Integration API over HTTPS and the client must validate the server certificate (see below). When No, connections use HTTP only.

When SSL is enabled, building a server validation handler ensures the client trusts the payment terminal by validating its certificate against a specific CA (Certificate Authority). This is typically required when:

  • A private CA signs the server's certificate.
  • Custom validation rules are required beyond default system certificate validation.
  • The handler replaces or supplements the system's default trusted Certificate Authorities with your custom CA.
Prerequisites

Apply the following only when HTTP Server SSL Enabled = Yes:

  • Store the provided ca.pem file in a secure and accessible location for the client.
  • Confirm the client can read and use the ca.pem file for validation.
Steps to implement the handler

When SSL is enabled on the terminal, follow these steps on the POS client:

Step 1 — Store the CA certificate
Save the ca.pem file in a secure location accessible by the client.

Step 2 — Implement the custom handler
Create a function or method that:

  • Reads the ca.pem file to load the CA certificate.
  • Configures a validation callback that reads the server's certificate chain during a TLS handshake.
  • Validates the server certificate against the loaded CA (ensure ca.pem matches the CA used to sign the server certificate).
  • Returns an object or structure for secure connections (e.g. HTTP clients).

Step 3 — Use the handler in connections
Use the custom handler when establishing HTTPS connections to the terminal so the server certificate is validated against your CA.

Get Merchant List

Retrieves the list of configured merchants from the terminal. This request has no request body — all parameters are passed via headers only.

Response Fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request transaction.
ResponseTypestringMAlways "merchantlist".
MerchantsarrayMArray of merchant objects, each containing Id, Name, and Mode.
Idstring(2)MMerchant identifier.
NamestringMMerchant display name.
ModestringMMerchant mode. Some possible values are mentioned in Table ENUM-10.
Table ENUM-10 — Mode field values

Enum table — colocated with Get Merchant List. Also in Table Index.

Here are some values for the Mode field.

Value of "Mode" field
None
LogOff
EOV
Online
RKIFail
Endpoint
GET/POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/merchantlist
No request body required
Response Example
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "merchantlist",
  "Response": {
    "Merchants": [
      {
        "Id": "1",
        "Name": "Main Merchant",
        "Mode": "Online"
      },
      {
        "Id": "2",
        "Name": "Second Merchant",
        "Mode": "LogOff"
      }
    ]
  }
}

Get Allowed Transactions

Returns the transaction types enabled for a merchant on this terminal (purchase, refund, pre-auth, APM wallets, etc.). Use this to build dynamic menus or validate TxnType before calling transaction.

Request Body Fields
Field NameType (Max Length)M/ODescription
Merchantstring(2)MMerchant to query. See Table REQ-01.
Response Fields
Field NameType (Max Length)M/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "getAllowedTransactions".
Merchantstring(2)MEcho of the requested merchant.
FunctionItemsarrayMList of allowed function entries for this merchant.
IdintMFunction identifier (on each FunctionItems element).
ParentIdintMParent function identifier (on each FunctionItems element).
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/getAllowedTransactions
Request Example
{
  "Merchant": "01"
}
Response Example
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "getAllowedTransactions",
  "Response": {
    "Merchant": "01",
    "FunctionItems": [
      { "Id": 1, "ParentId": 0 },
      { "Id": 42, "ParentId": 1 }
    ]
  }
}

Health Check

Verifies that the terminal's payment app server is alive and reachable. The POS can send this request in parallel with active transactions without interference.

A successful response returns HTTP 200. No response (connection refused/timeout) indicates the server is down.

Endpoint
GET https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/healthcheck
No request body required
Response
HTTP 200 OK
(empty body — server is alive)

Bring App To Foreground

This function allows moving the POS app to the foreground if the application is in the background.

The request to bring the application to the foreground uses the POST method and does not require a request body to perform this function.

Response Fields

Below is a list of fields that will appear in the 'Bring Application to Foreground' response. Fields labeled with 'M' (Mandatory) are those that will appear when the request is either successful or failed.

Field NameType (Max Length)M/ODescription
SessionIdstring(36)MSessionId of the request transaction.
ResponseTypestring(23)MResponseType is the TransactionType of the requested transaction ("bringapptoforeground").
SuccessboolMWhether the operation succeeded (true) or failed (false).
ResponseTextstringOText of Response. Commonly occurs when a transaction is declined.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/bringapptoforeground
No request body required
Success
Failed
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "bringapptoforeground",
  "Response": {
    "Success": "1",
    "ResponseText": "Application brought to the foreground"
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "bringapptoforeground",
  "Response": {
    "Success": "0",
    "ResponseText": "Application is not allowed to bring itself to the foreground"
  }
}

Transaction

All financial transaction types use POST /v1/sessions/{{sessionId}}/transaction with the same request and response structure. Set TxnType to identify the operation — see subsections below (Purchase, Refund, Pre-auth, etc.).

Fields marked with M (Mandatory) must be assigned values. The Amount must be greater than 0 where applicable. Numbered lookup tables are grouped under Request field logic, Response field logic, and Field Enums — or use the Table Index.

Common Request Fields

Field NameType (Max Length)M/ODescription
Merchantstring(2)OSpecify the merchant to execute the transaction. See Table REQ-01.
TxnTypestring(3)MType of transaction — value depends on operation (see subsections).
AmountlongMTransaction amount in cents. Must be greater than 0 (where applicable).
TxnRefstring(64)OReference number attached to the transaction. Appears on the receipt.
AccessCodestring(8)OOperator access code when the terminal requires it (e.g. Refund).
EnableTipboolOWhether tip entry is offered. Default disabled.
AmtTiplongOAmtTip of the sale in cents.
EnablePreEMVFeeboolOWhen present, POS Integration owns PreEMV fee settings for this request. Exact JSON key casing required. See EnablePreEMVFee behaviour.
fPurchaseFeePercentboolOIf true, PurchaseFee is a percentage; if false, a fixed amount in cents. Used when POS owns PreEMV fee.
PurchaseFeeushortOPurchase PreEMV fee value (percent or cents).
fCashOutFeePercentboolOIf true, CashOutFee is a percentage; if false, a fixed amount in cents. Used when POS owns PreEMV fee.
CashOutFeeushortOCash-out PreEMV fee value (percent or cents).
AsyncModeboolODefault disabled. Set enabled for async mode — see Sync vs Async.
WithReceiptImageDataboolOIf enabled, response includes ReceiptData and DigitalSig in base64 format.
DisablePrintingboolOIf enabled, disable receipt printing for this transaction.
ReceiptTypeintODefines the receipt format. See Table REQ-02.
PlainTextCharPerLineshortOPlain-text receipt width when ReceiptType is plain text.

EnableTip behaviour

  • If AmtTip > 0, the request is sent with the Tip value regardless of EnableTip.
  • If AmtTip is 0 and EnableTip is true and the payment app allows tip, a popup prompts the user to enter a Tip value.
  • If the payment app is not set up to allow tip, the request proceeds without a Tip value.

EnablePreEMVFee behaviour

  • Applies to TxnType P, C, and PC.
  • If EnablePreEMVFee is omitted, the terminal uses the merchant TMS PreEMV / PreSurcharge settings (standalone behaviour).
  • If EnablePreEMVFee is present (true or false), the request overrides TMS for this transaction: true enables PreEMV fee with the supplied fee fields; false disables PreEMV fee for the request.
  • JSON key must be exactly EnablePreEMVFee (capital EMV).

Reference — Request field logic

Lookup tables for common request fields — each table is linked from the matching row in Common Request Fields. See also Table Index.

Table REQ-01 — Merchant field logic
Merchant Field ValueSingle MerchantMulti Merchant
Not set or invalid (null, "0", "abc", etc.)Automatically select the default merchantReturn error – Merchant Id not found
Valid value (parsable to int)Use the provided select merchantUse the provided select merchant
Table REQ-02 — ReceiptType field logic (request)
ReceiptType ValueDescription
Not setUses TMS default.
0Do not return receipt data.
1Return receipt in HTML format.
2Return receipt in plain text format.
OthersTreated as 'Not Set' value.

Transaction Response

Below is a list of fields in the transaction response. Single-transaction responses use Response.Transaction; list responses (e.g. Search Transaction) use Response.Transactions array. Fields labeled M appear whether the transaction is approved or declined. The response structure is identical for all transaction types.

Field NameType (Max Length)M/ODescription
SessionIdstring(36)MSessionId of the request transaction.
ResponseTypestring(23)MResponseType is the TransactionType of the requested transaction ("transaction").
SuccessboolMWhether the transaction is approved (true) or declined (false).
ResponseTextstringOText of Response. Commonly occurs when a transaction is declined.
PrinterStatusstringOPrinter state text returned by the terminal when available.
ReceiptTypeintMIndicates the receipt format returned. See Table RES-01.
TransactionsarrayMIncludes a list of approved transactions corresponding to the FuncType on the terminal. Used in list responses; single transaction responses use Transaction object instead.
Merchantstring(2)OMerchant that executed the transaction.
TxnTypestring(9)MType of transaction (matches request TxnType).
IdShiftuintMShift's identifier.
IdShiftNameuintMShift Name's identifier.
lAmountlongMThe approved amount.
lTipAmountlongMThe approved tip amount.
lCashOutuintMThe approved cash amount.
lCashOutFeelongMThe cash out transaction fees.
lSurChargeTaxlongMThe Tax surcharge.
lDiscountlongMDiscount amount of the transaction.
lDiscountPercentlongMDiscount Percentage of the transaction.
iRewarduintMThe transaction reward.
lAuthorizedTotallongMThe total approved amount of the transaction.
lDonationAmountlongMThe total approved donation amount.
iEntryModeuintMEntry mode. See Table ENUM-04.
iCardTypeuintMType of card. See Table ENUM-03.
iCurrencyCodeuintMThe currency code.
fsModifyuintMThe current status of the payment record. See Table ENUM-01.
iPaymentTypeuintMThe Payment Type. See Table ENUM-05.
iCustomerLanguageuintMThe Customer Language. See Table ENUM-06.
fClosedshortMIf the transaction has been completed.
fBatchErrorshortMIf the batch is error.
fVoidedshortMIf the transaction has been voided (Voided).
fRefundedboolMIf the transaction has been refunded (Refunded).
fAuthorizedboolMIf payment record was processed to host.
fSignatureboolMIf it is a signature transaction.
iCVVStatusuintMCVV status. See Table ENUM-13.
iMotoOrderTypeuintMMOTO order type. See Table ENUM-14.
fCanAdjustboolMIf the transaction can adjust.
fCanVoidboolMIf the transaction can be voided (Can be voided).
fCanPreAuthTopUpboolMIf the transaction can pre-auth top up.
fCanPreAuthCompleteboolMIf the transaction can preauth complete.
fCanVoidPreAuthCompleteboolMIf the transaction can void preauth complete.
fCanGoOfflineboolMIf the transaction allows for offline stored and forward.
lszCustomerReferencestringOCustomer reference number from the payment record.
lszReferenceNumberKeystringOReference number search key.
lszApprovalCodeKeystringOApproval code search key.
lszSequenceNumberstringOSequence number from the payment record.
Datestring(8)OThe Date is used for searching. Formatted as YYYYMMDD.
Timestring(10)OThe Time is used for searching. Formatted as hh:mm:ss.
AuthorizationExpiryDatestring(8)OAuthorization expiry date. Formatted as YYYYMMDD.
szAuthorizationResponseCodestringMThe approval response code of the transaction.
lszApprovalCodestringOThe approval code of the transaction.
szReferenceNumberstringOReference number (RRN) from the host.
szTransactionIdstringOTransaction identifier from the host.
lszSTANstringOThe Systems Trace Audit Number of the transaction.
szIssuerIdstringOIssuer identifier.
szCardHolderNamestringOCardholder name.
szStreetstringOCardholder street address (MOTO).
szApartmentstringOCardholder apartment (MOTO).
szZipCodestringOCardholder postal code (MOTO).
iReversalReasonuintMThe reason for reversal. See Table ENUM-07.
szProcessedLaterNumberstringOProcessed-later reference number when applicable.
lszCardLogostringMCard Logo.
szQRCodestringOThe URL address storing the transaction receipt.
byPinTypebyteMPin Type. See Table ENUM-08.
byPinStatusbyteMPin Status. See Table ENUM-09.
iNoCVVOptionuintMThe reason of the no CVV.
byCDCVMbyteMThe cvm value of card.
iAccountTypeuintMThe account type of transaction. See Table ENUM-02.
lszEndCardNumberstringOThe last four digits of the card number used to perform this transaction.
szMaskedCardNumberstringOThe card number has been masked.
lServiceFeeslongOThe surcharge fee for the transaction. Only shown when it has a value.
lPreEMVPurchaseFeelongOApplied PreEMV purchase fee in cents. Only returned when greater than 0.
lPreEMVCashOutFeelongOApplied PreEMV cash-out fee in cents. Only returned when greater than 0.
lFeelongOThe fee for the transaction. Only shown when it has a value.
PIDuintOID of payment.
ReceiptDatastringOContains the receipt data of the transaction.
ReceiptLogostringOContains the logo to be printed on the receipt.
DigitalSigstringOContains the digital signature data to be printed on the receipt.

Reference — Response field logic

Lookup tables for response fields — linked from Transaction Response and reused by Search, Reprint, and Card Verification responses.

Table RES-01 — ReceiptType field logic (response)
ReceiptType ValueDescription
0Do not return receipt data.
1Return receipt in HTML format.
2Return receipt in plain text format.

Reference — Field Enums

Enum value tables for transaction response fields. Each table is linked from the matching row in Transaction Response. Jump: ENUM-01 · ENUM-02 · ENUM-03 · ENUM-04 · ENUM-05 · ENUM-06 · ENUM-07 · ENUM-08 · ENUM-09 · ENUM-13 · ENUM-14

Table ENUM-01 — fsModify field values
Value of "fsModify" field
PAYMENT_MODIFY_ADJUST = 0x00000001
PAYMENT_MODIFY_VOID = 0x00000002
PAYMENT_MODIFY_PARTIALVOID = 0x00000004
PAYMENT_MODIFY_REVERSED = 0x00000008
PAYMENT_MODIFY_STOREFORWARD = 0x00000010
PAYMENT_MODIFY_PENDING = 0x00000020
PAYMENT_MODIFY_OFFLINE = 0x00000100
PAYMENT_MODIFY_PARTIALPREAUTHCOMPLETE = 0x00000200
PAYMENT_MODIFY_PREAUTHCOMPLETE = 0x00000400
PAYMENT_MODIFY_DELAYEDPREAUTHCOMPLETE = 0x00000800
PAYMENT_MODIFY_EOV = 0x00001000
PAYMENT_MODIFY_PENDING_CANCELFAIL = 0x00002000
PAYMENT_MODIFY_EMV_ERROR = 0x40000000
PAYMENT_MODIFY_CANCELLED = 0x80000000
Table ENUM-02 — iAccountType field values
Value of "AccountType" field
ACCOUNT_TYPE_SAVINGS = "0"
ACCOUNT_TYPE_CHEQUE = "1"
ACCOUNT_TYPE_CREDIT = "2"
Table ENUM-03 — iCardType field values

Here are some values for the iCardType field.

CardTypeCardType
CARD_NONE = 0CARD_UNIONPAY = 75
CARD_DEBIT = 1CARD_TROY = 76
CARD_VISADEBIT = 2CARD_SPARE1 = 77
CARD_DEBITMASTER = 3CARD_SPARE2 = 78
CARD_AMEXDEBIT = 4CARD_SPARE3 = 79
CARD_JCBDEBIT = 5CARD_SPARE4 = 80
CARD_DISCOVERDEBIT = 6CARD_SPARE5 = 81
CARD_UNIONPAYDEBIT = 7CARD_SPARE6 = 82
CARD_INTERACT = 8CARD_SPARE7 = 83
CARD_MAESTRO = 9CARD_SPARE8 = 84
CARD_TROYDEBIT = 10CARD_SPARE9 = 85
CARD_SPAREDEBIT1 = 11CARD_SPARE10 = 86
CARD_SPAREDEBIT2 = 12CARD_SPARE11 = 87
CARD_SPAREDEBIT3 = 13CARD_SPARE12 = 88
CARD_SPAREDEBIT4 = 14CARD_SPARE13 = 89
CARD_SPAREDEBIT5 = 15CARD_SPARE14 = 90
CARD_SPAREDEBIT6 = 16CARD_SPARE15 = 91
CARD_SPAREDEBIT7 = 17CARD_SPARE16 = 92
CARD_SPAREDEBIT8 = 18CARD_SPARE17 = 93
CARD_SPAREDEBIT9 = 19CARD_SPARE18 = 94
CARD_SPAREDEBIT10 = 20CARD_SPARE19 = 95
CARD_ALLIEDPDEBIT = 21CARD_SPARE20 = 96
CARD_ARBUCKLEDEBIT = 22CARD_ALLIEDP = 97
CARD_ASBPRVLBDEBIT = 23CARD_ARBUCKLE = 98
CARD_ATSDEBIT = 24CARD_ASBPRVLB = 99
CARD_BABYCITYDEBIT = 25CARD_ATS = 100
CARD_BARTRCRDDEBIT = 26CARD_BABYCITY = 101
CARD_CASHRWDSDEBIT = 27CARD_BARTRCRD = 102
CARD_CRTDEBIT = 28CARD_CASHRWDS = 103
CARD_CSLDEBIT = 29CARD_CRT = 104
CARD_DRIVEDEBIT = 30CARD_CSL = 105
CARD_EAZYCDDEBIT = 31CARD_DRIVE = 106
CARD_ECARDDEBIT = 32CARD_EAZYCD = 107
CARD_ECARDZGDEBIT = 33CARD_ECARD = 108
CARD_ECARDZLDEBIT = 34CARD_ECARDZG = 109
CARD_ECOM1DEBIT = 35CARD_ECARDZL = 110
CARD_EFTPOSDEBIT = 36CARD_ECOM1 = 111
CARD_ELOYALTYDEBIT = 37CARD_EFTPOS = 112
CARD_EZIPAYDEBIT = 38CARD_ELOYALTY = 113
CARD_FFCARDDEBIT = 39CARD_EZIPAY = 114
CARD_FLEETDEBIT = 40CARD_FFCARD = 115
CARD_FLYBUYDEBIT = 41CARD_FLEET = 116
CARD_FPFGIFTDEBIT = 42CARD_FLYBUY = 117
CARD_GENIEDEBIT = 43CARD_FPFGIFT = 118
CARD_GIFTSTNDEBIT = 44CARD_GENIE = 119
CARD_INDUEDEBIT = 45CARD_GIFTSTN = 120
CARD_INSIGHTDEBIT = 46CARD_INDUE = 121
CARD_LOYALTYDEBIT = 47CARD_INSIGHT = 122
CARD_MOBILDEBIT = 48CARD_MOBIL = 123
CARD_MTAGIFTDEBIT = 49CARD_MTAGIFT = 124
CARD_NPDDEBIT = 50CARD_NPD = 125
CARD_ONECARDDEBIT = 51CARD_ONECARD = 126
CARD_POSTIEDEBIT = 52CARD_POSTIE = 127
CARD_QCARDDEBIT = 53CARD_QCARD = 128
CARD_RD1DEBIT = 54CARD_RD1 = 129
CARD_ROCKGASDEBIT = 55CARD_ROCKGAS = 130
CARD_STARCARDDEBIT = 56CARD_STARCARD = 131
CARD_SWIPEGFTDEBIT = 57CARD_SWIPEGFT = 132
CARD_SWIPELOYDEBIT = 58CARD_SWIPELOY = 133
CARD_TRUREWRDDEBIT = 59CARD_TRUREWRD = 134
CARD_TTCRDSDEBIT = 60CARD_TTCRDS = 135
CARD_TTLSTOREDEBIT = 61CARD_TTLSTORE = 136
CARD_VIIDEBIT = 62CARD_VII = 137
CARD_WAPDEBIT = 63CARD_WAP = 138
CARD_WESTFLDDEBIT = 64CARD_WESTFLD = 139
CARD_WPGDEBIT = 65CARD_WPG = 140
CARD_ZBIZDEBIT = 66CARD_ZBIZ = 141
CARD_ZCARDDEBIT = 67CARD_ZCARD = 142
CARD_CREDIT = 68CARD_GIFT = 143
CARD_VISA = 69CARD_LOYALTY = 144
CARD_MASTER = 70CARD_CASH = 145
CARD_AMEX = 71CARD_CHEQUE = 146
CARD_JCB = 72CARD_EBTCASH = 147
CARD_DINERS = 73CARD_EBTSNAP = 148
CARD_DISCOVER = 74CARD_EBTWIC = 149
CARD_PREPAID_CLOSEDLOOP = 150CARD_ALTCNP_PAYPAL = 151
ALLCARDS = 152CARD_UNKNOWN = 153
Table ENUM-04 — EntryMode / iEntryMode field values

Used in Transaction Response (iEntryMode) and Card Verification response (EntryMode).

ValueName
0EM_NONE
1EM_POS
2EM_IMPRINT
3EM_MOTO
4EM_SWIPED
5EM_MANUAL
6EM_RFID
7EM_CONTACTLESS_ISO
8EM_CONTACTLESS_MAGSTRIPE
9EM_CONTACTLESS_DOMESTIC
10EM_CONTACTLESS_NFC
11EM_CONTACTLESS_VAS
12EM_SMC
13EM_ALIPAY
14EM_WECHAT
15EM_END
16EM_ECOMMERCE
17EM_CENTRAPAY
18EM_GIFT_REDEEM
19EM_DIRECTPAY
Table ENUM-05 — iPaymentType field values
Payment TypePayment Type
PAYMENT_TYPE_SALE = 0PAYMENT_TYPE_PREAUTHTOPUP = 12
PAYMENT_TYPE_REFUND = 1PAYMENT_TYPE_PREAUTHDELAY = 13
PAYMENT_TYPE_CASHADVANCE = 2PAYMENT_TYPE_PREAUTHPARTIAL = 14
PAYMENT_TYPE_PREAUTH = 3PAYMENT_TYPE_PREAUTHCANCEL = 15
PAYMENT_TYPE_PREAUTHCOMPLETE = 4PAYMENT_TYPE_TIP = 16
PAYMENT_TYPE_BALANCEINQUIRY = 5PAYMENT_TYPE_REFUNDBALANCE = 17
PAYMENT_TYPE_DEPOSIT = 6PAYMENT_TYPE_IMPRINTER = 20
PAYMENT_TYPE_SETTLE = 7PAYMENT_TYPE_AUTHONLY = 60
PAYMENT_TYPE_INSTALLMENTSALE = 10PAYMENT_TYPE_REGISTER = 100
PAYMENT_TYPE_LATEINTERESTINSTALLMENTSALE = 11PAYMENT_TYPE_ACTIVATE = 101
PAYMENT_TYPE_DEACTIVATE = 102PAYMENT_TYPE_RELOAD = 103
PAYMENT_TYPE_REDEEMED = 104PAYMENT_TYPE_GIFT_REVSERD = 105
PAYMENT_TYPE_GIFT_REDEEM_FUNDS = 106PAYMENT_TYPE_GIFT_SALE = 107
Table ENUM-06 — iCustomerLanguage field values

Locale code → language name → numeric value (payment app locale catalog; default supported locale is en_US = 1).

LocaleLanguageValue
en_USEnglish (US)1
de_DEGerman (Germany)2
zh_CNChinese (PRC)3
zh_TWChinese (Taiwan)4
cs_CZCzech (Czech Republic)5
nl_BEDutch (Netherlands)6
en_AUEnglish (Australia)7
en_GBEnglish (Britain)8
en_CAEnglish (Canada)9
en_NZEnglish (New Zealand)10
en_SGEnglish (Singapore)11
fr_BEFrench (Belgium)12
fr_CAFrench (Canada)13
fr_FRFrench (France)14
fr_CHFrench (Switzerland)15
de_ATGerman (Austria)16
de_LIGerman (Liechtenstein)17
de_CHGerman (Switzerland)18
it_ITItalian (Italy)19
it_CHItalian (Switzerland)20
ja_JPJapanese (Japan)21
ko_KRKorean (Korea)22
pl_PLPolish (Poland)23
ru_RURussian (Russia)24
es_ESSpanish (Spain)25
ar_EGArabic (Egypt)26
ar_ILArabic (Israel)27
bg_BGBulgarian (Bulgaria)28
ca_ESCatalan (Spain)29
hr_HRCroatian (Croatia)30
da_DKDanish (Denmark)31
en_INEnglish (India)32
fi_FIFinnish (Finland)33
en_IEEnglish (Ireland)34
en_ZAEnglish (South Africa)35
el_GRGreek (Greece)36
iw_ILHebrew (Israel)37
hi_INHindi (India)38
hu_HUHungarian (Hungary)39
in_IDIndonesian (Indonesia)40
lt_LTLithuanian (Lithuania)41
lv_LVLatvian (Latvia)42
nb_NONorwegian-Bokmol (Norway)43
pt_BRPortuguese (Brazil)44
sr_RSSerbian (Cyrillic,Serbia)45
sk_SKSlovak (Slovakia)46
sl_SISlovenian (Slovenia)47
es_USSpanish (US)48
Table ENUM-07 — iReversalReason field values
Value
AUTO_REVERSAL_POWERFAILURE = 1
AUTO_REVERSAL_SIGNATURE = 2
AUTO_REVERSAL_NETWORK = 3
AUTO_REVERSAL_MACVALIDATION = 4
AUTO_REVERSAL_MESSAGEVALIDATION = 5
AUTO_REVERSAL_INVALIDRESPONSECODE = 6
AUTO_REVERSAL_POWERLINKFAILURE = 7
AUTO_REVERSAL_TRANSACTIONVOID = 8
AUTO_REVERSAL_INTERNALDEVICEFAILURE = 9
AUTO_REVERSAL_CARDREMOVED = 10
AUTO_REVERSAL_CARDDECLINED = 11
Table ENUM-08 — byPinType field values
Value
PIN_TYPE_NO_PIN = 0
PIN_TYPE_ONLINE = 1
PIN_TYPE_OFFLINE_PLAINTEXT = 2
PIN_TYPE_OFFLINE_ENCRYPTED = 3
Table ENUM-09 — byPinStatus field values
Value
PIN_NOT_PROMPTED = 0
PIN_PROMPTED_AND_CANCELLED = 1
PIN_PROMPTED_AND_TIMEDOUT = 2
PIN_PROMPTED_AND_ENTERED = 3
PIN_PROMPTED_AND_BYPASSED = 4
Table ENUM-13 — iCVVStatus field values
ValueName
0None
1CardNotPresent
2Unreadable
3CardHolderStatesCVVnotOnCard
Table ENUM-14 — iMotoOrderType field values
ValueName
0UnknownOrNotApplicable
1MailOrder
2TelephoneOrder
3InternetOrder
Endpoint (all transaction types)
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/transaction
Generic Request Example (Purchase)
{
  "Merchant": "01",
  "TxnType": "P",
  "EnableTip": 1,
  "AmtTip": 100,
  "Amount": 200,
  "TxnRef": "12345567890",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}
Approved
Declined
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "transaction",
  "Response": {
    "Transaction": {
      "Merchant": "1",
      "TxnType": "P",
      "Success": "1",
      "IdShift": 1,
      "IdShiftName": 0,
      "lAmount": 100,
      "lTipAmount": 0,
      "lCashOut": 0,
      "lAuthorizedTotal": 100,
      "iEntryMode": 7,
      "iCardType": 69,
      "iAccountType": 2,
      "szAuthorizationResponseCode": "00",
      "lszApprovalCode": "327710",
      "lszSTAN": "000018",
      "lszEndCardNumber": "2955",
      "szMaskedCardNumber": "**** ***** **** 2955",
      "PID": 8,
      "Date": "20240404",
      "Time": "15:14:02",
      "ReceiptType": 1
    }
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "transaction",
  "Response": {
    "Transaction": {
      "TxnType": "P",
      "Success": "0",
      "ResponseText": "Transaction Cancelled",
      "lAmount": 0,
      "lAuthorizedTotal": 0,
      "ReceiptType": 1
    }
  }
}

Response examples apply to all transaction types. Only TxnType and populated fields differ.

Transaction Types

Purchase TxnType: P

The purchase transaction type allows the merchant to perform a sale, it uses the transaction request format.

Also uses all common request fields. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "P" (Purchase).
AmountlongMAmount of sale in cents. Must be greater than 0.
EnableTipboolOIndicates could Tip or not. Default '0' (Disabled Tip). See EnableTip notes.
AmtTiplongOAmtTip of the sale in cents.
Request Example — Purchase
{
  "Merchant": "01",
  "TxnType": "P",
  "EnableTip": 1,
  "AmtTip": 100,
  "Amount": 200,
  "TxnRef": "12345567890",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Refund TxnType: R

A refund transaction type allows the merchant to refund a sale, it uses the transaction request format.

Also uses all common request fields. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "R" (Refund).
AmountlongMRefund amount in cents. Must be greater than 0.
AccessCodestring(8)OOperator access code when the terminal requires it for refund.
Request Example — Refund
{
  "Merchant": "01",
  "TxnType": "R",
  "Amount": 1000,
  "TxnRef": "{{txnRef}}",
  "AccessCode": "0000",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Void TxnType: V

Voids an approved transaction. Uses POST .../transaction with TxnType: "V". Amount is not required — the terminal voids the full original amount. Requires lszApprovalCode and lszSTAN from the original transaction (same pattern as Cancel Pre-Auth).

Also uses all common request fields. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "V" (Void).
lszApprovalCodestringMApproval code from the original transaction. See linking options below.
lszSTANstringMSTAN from the original transaction.
Merchantstring(2)OMerchant that owns the original transaction. See Table REQ-01.

Linking to the original transaction

  • Option 1: Call Search Transaction (typically FuncType: "Purchase"), select a voidable record, copy lszApprovalCode and lszSTAN.
  • Option 2: Pass AuthCode and STAN saved from the original approved response.
  • Amount is not required for Void (full original amount).
Request Example — Void
{
  "Merchant": "01",
  "TxnType": "V",
  "lszApprovalCode": "327710",
  "lszSTAN": "000018",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Cash Out TxnType: C

The cash-out transaction type allows the merchant to perform a cash-out transaction, it uses the transaction request format.

Also uses the applicable common request fields. For Cash Out, send the cash amount in AmtCash instead of the common Amount field. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "C" (Cash Out).
AmtCashlongMCash-out amount in cents. Must be greater than 0. Do not send this value in Amount.
Request Example — Cash Out
{
  "Merchant": "01",
  "TxnType": "C",
  "AmtCash": 10000,
  "TxnRef": "{{txnRef}}",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Purchase & Cash TxnType: PC

The purchase & cash transaction type allows the merchant to perform a sale and also withdraw cash, it uses the transaction request format.

Also uses all common request fields. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "PC" (Purchase & Cash).
AmountlongMPurchase amount in cents. Must be greater than 0.
AmtCashlongMCash-out amount in cents. Must be greater than 0.
Request Example — Purchase & Cash
{
  "Merchant": "01",
  "TxnType": "PC",
  "Amount": 1000,
  "AmtCash": 2000,
  "TxnRef": "{{txnRef}}",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

MOTO Purchase TxnType: MP

The moto purchase transaction type allows the merchant to perform a sale with a manually entered transaction that has been generated from a mail order or a telephone order, it uses the transaction request format.

Also uses all common request fields. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "MP" (MOTO Purchase).
AmountlongMAmount in cents. Must be greater than 0.
EnableTipboolOWhether tip entry is offered. Default disabled.
AmtTiplongOAmtTip of the sale in cents.
Panstring(20)OCard number. If omitted, operator enters on terminal.
DateExpirystring(4)OCard expiry in MMYY format.
CVVstring(4)OCard CVV/CVC.
CardNamestring(16)OCardholder name.
Request Example — MOTO Purchase
{
  "Merchant": "01",
  "TxnType": "MP",
  "TxnRef": "{{txnRef}}",
  "EnableTip": 1,
  "AmtTip": 200,
  "Amount": 2000,
  "Pan": "6367172100001111",
  "DateExpiry": "1249",
  "CVV": "120",
  "CardName": "Paymark Test",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

MOTO Refund TxnType: MR

A moto refund transaction type allows the merchant to refund a sale with a manually entered transaction, it uses the transaction request format.

Also uses all common request fields. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "MR" (MOTO Refund).
AmountlongMRefund amount in cents. Must be greater than 0.
Panstring(20)OCard number.
DateExpirystring(4)OCard expiry in MMYY.
CardNamestring(16)OCardholder name.
CVVstring(4)OCard CVV.
Request Example — MOTO Refund
{
  "Merchant": "00",
  "TxnType": "MR",
  "Amount": 100,
  "TxnRef": "{{txnRef}}",
  "Pan": "6367172100001111",
  "DateExpiry": "1249",
  "CardName": "Paymark Test",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}
Pre-auth Family

Pre-auth Family — Developer Guide

Pre-auth reserves funds on the card without capturing the final amount. Follow-up operations reference the original authorization using lszApprovalCode and lszSTAN. All pre-auth transactions use the same transaction request format and share the transaction response structure.

Typical flow
StepTxnTypeWhat it doesSource record
1PAAuthorize — reserve funds on the card.—
2aACComplete — capture the final amount.Original PA (FuncType: PreAuth)
2bPACCancel Pre-Auth — release the reserved funds.Original PA (FuncType: PreAuth)
2cPTIncremental Pre-Auth — increase the reserved amount.Original PA (FuncType: PreAuth)
2dPPPartial — capture part of the reserved amount.Original PA (FuncType: PreAuth)
2ePRPre-Auth Reversal — reverse an open pre-auth.Original PA (FuncType: PreAuth)

Linking follow-up requests

Follow-up types (AC, PAC, PT, PP, PR) require lszApprovalCode and lszSTAN in the request. Two ways to obtain them:

  • Option 1 — Search Transaction: Call Search Transaction with the correct FuncType, pick a record from Response.Transactions[], and copy lszApprovalCode / lszSTAN.
  • Option 2 — POS-managed: Store AuthCode and STAN from the original transaction response in your POS database and pass them in the follow-up request.

Search Transaction ↔ Pre-auth

Use Search Transaction to list approved records on the terminal before performing a follow-up:

  • FuncType: "PreAuth" — find original pre-auths for Complete, Cancel Pre-Auth, Incremental Pre-Auth, Partial, Pre-Auth Reversal, or Pre-Auth Inquiry.
  • FuncType: "PreAuthComplete" — Pre-Auth Complete Inquiry search.

Search filters are optional, including FuncType.

Pre-auth TxnType: PA

A pre-auth transaction type allows the merchant to pre-auth a sale, it uses the transaction request format.

Also uses all common request fields. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "PA" (Pre-auth).
AmountlongMPre-auth amount in cents. Must be greater than 0.

After approval

Save lszApprovalCode and lszSTAN from Response.Transaction. You need them for Complete, Cancel, Top Up, or Partial — either stored in your POS (Option 2) or retrieved later via Search Transaction with FuncType: "PreAuth" (Option 1). See Pre-auth Guide.

Request Example — Pre-auth
{
  "Merchant": "01",
  "TxnType": "PA",
  "Amount": 1500,
  "TxnRef": "123415890",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Pre-auth Complete TxnType: AC

A preauth complete transaction type allows the merchant to complete a preauth sale.

Also uses all common request fields. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "AC" (Pre-auth Complete).
AmountlongMFinal charge amount in cents. Must be greater than 0.
lszApprovalCodestringMApproval code from the original Pre-auth. Obtain via Search Transaction (FuncType: "PreAuth") or from the stored PA response.
lszSTANstringMSTAN from the original Pre-auth. Obtain via Search Transaction (FuncType: "PreAuth") or from the stored PA response.

Linking to the original pre-auth

  • Option 1: Search with FuncType: "PreAuth", select a record from Response.Transactions[], use its lszApprovalCode and lszSTAN.
  • Option 2: Pass AuthCode and STAN you saved from the original PA response.
Request Example — Pre-auth Complete
{
  "Merchant": "01",
  "TxnType": "AC",
  "Amount": 100,
  "lszApprovalCode": "328958",
  "lszSTAN": "000030",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Cancel Pre-Auth TxnType: PAC

Cancel Pre-Auth releases the reserved funds from an open pre-auth.

Also uses all common request fields. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "PAC" (Cancel Pre-Auth).
lszApprovalCodestringMApproval code from the original Pre-auth. See linking options below.
lszSTANstringMSTAN from the original Pre-auth. Search with FuncType: "PreAuth" or use stored PA response values.

Linking to the original pre-auth

  • Option 1: Search with FuncType: "PreAuth", select a record, use its lszApprovalCode and lszSTAN.
  • Option 2: Pass AuthCode and STAN saved from the original PA response.
Request Example — Cancel Pre-Auth
{
  "Merchant": "01",
  "TxnType": "PAC",
  "lszApprovalCode": "328958",
  "lszSTAN": "000030",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Incremental Pre-Auth TxnType: PT

An Incremental Pre-Auth increases the reserved amount of an open pre-auth by adding a new amount to the previous authorization.

Also uses all common request fields. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "PT" (Incremental Pre-Auth).
AmountlongMAdditional amount in cents. Must be greater than 0.
lszApprovalCodestringMApproval code from the original Pre-auth.
lszSTANstringMSTAN from the original Pre-auth. Search with FuncType: "PreAuth" or use stored PA response values.

Linking to the original pre-auth

  • Option 1: Search with FuncType: "PreAuth", select a record, use its lszApprovalCode and lszSTAN.
  • Option 2: Pass AuthCode and STAN saved from the original PA response.
Request Example — Incremental Pre-Auth
{
  "Merchant": "01",
  "TxnType": "PT",
  "Amount": 100,
  "lszApprovalCode": "328958",
  "lszSTAN": "000030",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Pre-auth Partial TxnType: PP

A preauth partial transaction type allows the merchant to make a partial payment towards the previous preauth.

Also uses all common request fields. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "PP" (Pre-auth Partial).
AmountlongMPartial amount in cents. Must be greater than 0.
lszApprovalCodestringMApproval code from the original Pre-auth.
lszSTANstringMSTAN from the original Pre-auth. Search with FuncType: "PreAuth" or use stored PA response values.

Linking to the original pre-auth

  • Option 1: Search with FuncType: "PreAuth", select a record, use its lszApprovalCode and lszSTAN.
  • Option 2: Pass AuthCode and STAN saved from the original PA response.
Request Example — Pre-auth Partial
{
  "Merchant": "01",
  "TxnType": "PP",
  "Amount": 100,
  "lszApprovalCode": "328958",
  "lszSTAN": "000030",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Pre-Auth Reversal TxnType: PR

Pre-Auth Reversal reverses an open pre-auth. Uses POST .../transaction with TxnType: "PR".

Also uses all common request fields. Response structure is defined in Transaction Response.

Type-Specific Request Fields
Field NameType (Max Length)M/ODescription
TxnTypestring(3)MMust be "PR" (Pre-Auth Reversal).
lszApprovalCodestringMApproval code from the original Pre-auth (PA).
lszSTANstringMSTAN from the original Pre-auth. Search with FuncType: "PreAuth" or use stored PA response values.

Linking to the original pre-auth

  • Option 1: Search with FuncType: "PreAuth", select a record, use its lszApprovalCode and lszSTAN.
  • Option 2: Pass values saved from the original PA response.
Request Example — Pre-Auth Reversal
{
  "Merchant": "01",
  "TxnType": "PR",
  "lszApprovalCode": "328958",
  "lszSTAN": "000030",
  "AsyncMode": "0"
}

Search Transaction

This request searches for approved transactions stored on the terminal for different purposes — most commonly to find a pre-auth record before performing Complete, Cancel, Top Up, Partial, or Reversal. See Pre-auth Guide for how search fits into the pre-auth flow.

All search filter fields are optional and may be left empty, including FuncType, AuthCode, and Stan.

Request Body Fields
Field NameType (Max Length)M/ODescription
Merchantstring(2)OSpecify the merchant to execute the transaction. See Table REQ-01.
FuncTypestring(24)OType of stored records to retrieve. Controls which follow-up operations the results support — see Table ENUM-11.
TxnRefstring(64)OFilter by transaction reference number.
AuthCodestring(6)OFilter by authorization (approval) code. Maps to the payment approval-code search key.
RRNstringOFilter by Retrieval Reference Number.
Datestring(8)OFilter by transaction date. Format YYYYMMDD.
Timestring(10)OFilter by transaction time. Format hh:mm:ss.
Stanstring(6)OFilter by STAN (Systems Trace Audit Number).
Last4Digitsstring(4)OFilter by last four digits of the card number.
AmountlongOFilter by approved amount in cents.
ExAmountboolOAmount matching mode when filtering by Amount. True = exact match; false = same-dollar range match. See note below.

ExAmount behaviour

If the amount you want to search is 1050 (i.e. $10.50):

  • ExAmount: "0" — returns approved transactions with amounts from 1000 to 1099 (same dollar range).
  • ExAmount: "1" — returns only transactions with amount exactly 1050.
Table ENUM-11 — FuncType field values

Enum table — colocated with Search Transaction. Also in Table Index.

Use FuncType to search for historical results on the terminal. For example, to find pre-auths before performing a Pre-auth Complete, set FuncType to "PreAuth".

FuncTypeUsed to search for the below transactions
PreAuthPre-auth Complete Transaction.
PreAuthCancel Pre-Auth Transaction.
PreAuthIncremental Pre-Auth Transaction.
PreAuthPre-auth Partial Transaction.
PreAuthPre-Auth Reversal Transaction.
PreAuthPre-Auth Inquiry.
PreAuthCompletePre-Auth Complete Inquiry.
ReprintReprint Transaction.
Transaction Search Response

The search response uses the same transaction response model as a financial transaction — each item in the result set has the same fields as Response.Transaction in Transaction Response. The only difference is cardinality: a normal transaction returns one object; search returns zero or more matching records in Response.Transactions[].

Single transaction vs search

OperationResponseTypePayload shape
Purchase, Pre-auth, etc."transaction"Response.Transaction — one transaction object
Search Transaction"transactionsearch"Response.Transactions — array of transaction objects (same field model per item)

Each element in Transactions[] is an approved payment record. Copy lszApprovalCode and lszSTAN from the selected item for follow-up requests. See Transaction Response for the full field list and enum references.

Search-specific response envelope
Field NameType (Max Length)M/ODescription
SessionIdstring(36)MSessionId of the search request.
ResponseTypestring(23)MAlways "transactionsearch" (not "transaction").
TransactionsarrayMArray of transaction objects. Each item uses the Transaction Response field model. May contain 0, 1, or many records.

Do not duplicate-parse a separate schema — treat every Transactions[n] entry as a standard transaction response body (minus the outer SessionId / ResponseType wrapper). Enum values for response fields are in Transaction Response → Reference — Field Enums (Tables 12.5.2–12.5.6).

Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/transactionsearch
Request Example — search pre-auths
{
  "Merchant": "01",
  "FuncType": "PreAuth",
  "Amount": 1500,
  "ExAmount": false
}
Response Example — multiple matches
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "transactionsearch",
  "Response": {
    "Transactions": [
      {
        "Merchant": "1",
        "TxnType": "PA",
        "Success": "1",
        "lAmount": 1500,
        "lAuthorizedTotal": 1500,
        "Date": "20240405",
        "Time": "22:19:22",
        "lszApprovalCode": "328408",
        "lszSTAN": "000044",
        "lszEndCardNumber": "2955",
        "PID": 8
      },
      {
        "Merchant": "1",
        "TxnType": "PA",
        "Success": "1",
        "lAmount": 2000,
        "lAuthorizedTotal": 2000,
        "Date": "20240406",
        "Time": "10:05:11",
        "lszApprovalCode": "328958",
        "lszSTAN": "000030",
        "lszEndCardNumber": "1111",
        "PID": 9
      }
    ]
  }
}

Each object in Transactions[] follows the Transaction Response model. Pick one item and use its lszApprovalCode / lszSTAN in follow-up requests.

APM Transaction

Alternative payment methods (Alipay, WeChat Pay, CentraPay) use the same POST .../transaction endpoint as card transactions. Set an APM-specific TxnType (below). Refunds require TxnRef; Alipay/WeChat refunds also require OriginalAmount.

The response uses the same model as card transactions — see Transaction Response. ResponseType is always "transaction".

APM request fields
Field NameType (Max Length)M/ODescription
Merchantstring(2)OSpecify the merchant. See Table REQ-01.
TxnTypestring(9)MAPM transaction type — see table below (not the card P/R codes).
AmountlongMTransaction amount in cents. Must be greater than 0 for purchase types.
OriginalAmountlongCOriginal purchase amount in cents. Mandatory for ALIREF and WEREF. Not used for QRREF.
TxnRefstring(64)CReference number on the receipt. Mandatory for ALIREF, WEREF, and QRREF.
AsyncModeboolODefault disabled. Enable async mode — see Sync vs Async.
WithReceiptImageDataboolOIf enabled, response includes ReceiptData and DigitalSig.
DisablePrintingboolOIf enabled, disable receipt printing for this transaction.
ReceiptTypeintOReceipt format. See Table REQ-02.
PlainTextCharPerLineshortOPlain-text receipt width when ReceiptType is plain text.
TxnType values (APM)
TxnTypeOperation
ALIPURAlipay purchase
WEPURWeChat Pay purchase
QRPURCentraPay purchase
ALIREFAlipay refund
WEREFWeChat Pay refund
QRREFCentraPay refund

Response fields — same as Transaction Response. Poll with Query Transaction when AsyncMode is enabled.

Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/transaction
CentraPay purchase
Alipay refund
{
  "Merchant": "01",
  "TxnType": "QRPUR",
  "Amount": 1500,
  "TxnRef": "APM-001",
  "AsyncMode": false,
  "WithReceiptImageData": true,
  "ReceiptType": 1
}
{
  "Merchant": "01",
  "TxnType": "ALIREF",
  "Amount": 1500,
  "OriginalAmount": 1500,
  "TxnRef": "APM-001",
  "AsyncMode": false,
  "WithReceiptImageData": true,
  "ReceiptType": 1
}
Approved
Declined
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "transaction",
  "Response": {
    "Transaction": {
      "Merchant": "1",
      "TxnType": "QRPUR",
      "Success": true,
      "IdShift": 1,
      "IdShiftName": 0,
      "lAmount": 1500,
      "lTipAmount": 0,
      "lCashOut": 0,
      "lAuthorizedTotal": 1500,
      "iEntryMode": 17,
      "szAuthorizationResponseCode": "00",
      "lszApprovalCode": "327710",
      "lszSTAN": "000018",
      "PID": 8,
      "Date": "20240404",
      "Time": "15:14:02",
      "ReceiptType": 1
    }
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "transaction",
  "Response": {
    "Transaction": {
      "TxnType": "QRPUR",
      "Success": false,
      "ResponseText": "Transaction Cancelled",
      "lAmount": 0,
      "lAuthorizedTotal": 0,
      "ReceiptType": 1
    }
  }
}

Reprint

Finds and reprints a stored receipt using the transaction RRN. The terminal searches reprint records with FunctionType.Reprint.

Request Body Fields
Field NameType (Max Length)M/ODescription
Merchantstring(2)OMerchant to execute the reprint. See Table REQ-01.
RRNstring(6)MLast 6 digits of the transaction Retrieval Reference Number. The terminal searches for a stored receipt whose reference number ends with these digits.
WithReceiptImageDataboolOIf enabled, include ReceiptData and ReceiptLogo in the response.
ReceiptTypeintOReceipt format. See Table REQ-02.
PlainTextCharPerLineshortOPlain-text receipt width when ReceiptType is plain text.
DisablePrintingboolOIf enabled, disable receipt printing.

RRN lookup

  • Send exactly the last 6 digits of the RRN returned for the original transaction.
  • If more than one stored receipt matches, the most recent matching receipt is reprinted.
  • A missing or shorter RRN returns an invalid-RRN error; no match returns an RRN-not-found error.
Response Fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "reprint".
MerchantnumberOMerchant identifier.
SuccessboolMWhether the operation succeeded (true) or failed (false).
ResponseTextstringMResponse description (e.g. "Reprinted Successfully").
ReceiptDatastringOReceipt content.
ReceiptLogostringOBase64-encoded receipt logo.
DigitalSigstringOBase64-encoded digital signature when returned.
ReceiptTypeintMReceipt format returned. See Table RES-01.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/reprint
Request Example
{
  "RRN": "123456"
}
Response Example (Success)
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "reprint",
  "Response": {
    "Merchant": 1,
    "Success": true,
    "ResponseText": "Reprinted Successfully",
    "ReceiptData": "...",
    "ReceiptLogo": "iVBORw0KGgoAAAANSUhEUg...",
    "ReceiptType": 1
  }
}

Card Verification

Verifies the validity of a card without performing a financial transaction. The cardholder presents or inserts/taps their card; the terminal returns card details and authorization status.

Request Body Fields
PropertyTypeM/ODescription
Merchantstring(2)OSpecify the merchant to execute the transaction. See Table REQ-01.
ReceiptTypeintOReceipt format. See Table REQ-02.
WithReceiptImageDataboolOIf enabled, response includes ReceiptData and ReceiptLogo.
PlainTextCharPerLineshortOPlain-text receipt width when ReceiptType is plain text.
DisablePrintingboolOIf enabled, disable receipt printing.
Response Fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "querycard".
Merchantstring(2)OMerchant identifier.
SuccessboolMWhether the transaction is approved (true) or declined (false).
ResponseCodestringOResponse code from the terminal.
ResponseTextstringMResponse description.
CardTypeuintOCard type code.
CardNamestringOCardholder name.
AccountTypestring(2)OAccount type.
Panstring(32)OMasked card number.
AuthCodestring(6)OAuthorization code.
EntryModeuintOEntry mode. See Table ENUM-04.
ReceiptDatastringOContains the receipt data of the transaction.
ReceiptLogostringOContains the logo to be printed on the receipt.
DigitalSigstringOBase64-encoded digital signature when returned.
ReceiptTypeintMReceipt format returned. See Table RES-01.

EntryMode values — see Table ENUM-04 under Transaction → Field Enums.

Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/querycard
Request Example
{
  "Merchant": "01",
  "ReceiptType": 1,}
Approved
Declined
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "querycard",
  "Response": {
    "Success": "1",
    "ResponseText": "APPROVED",
    "AccountType": "2",
    "Pan": "**** ***** **** 1111",
    "CardType": 1,
    "EntryMode": 4,
    "AuthCode": "329514",
    "ReceiptData": "...",
    "ReceiptLogo": "iVBORw0KGgoAAAANSUhEUg...",
    "ReceiptType": 1
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "querycard",
  "Response": {
    "Success": "0",
    "ResponseText": "Declined",
    "ReceiptType": 1
  }
}

Settlement Enquiry

Retrieves settlement subtotals without performing an actual settlement cutover. Use "E" for current / pre-settlement totals, "L" for last settlement (or other-date enquiry with SettlementDate), and "C" for cutover.

Settlement Enquiry and Settlement Cutover share the same POST .../settlement endpoint, request body, and response model. The only request difference is SettlementType.

Settlement types

OperationSettlementTypeRequest / response
Settlement Enquiry (Pre)"E"Same — see request and response below
Last Settlement Enquiry / Other Date"L"
Settlement Cutover"C"
Settlement request fields (shared)
PropertyTypeM/ODescription
Merchantstring(2)OSpecify the merchant to execute the transaction. See Table REQ-01.
SettlementTypestring(1)M"E" = Enquiry (Pre), "L" = Last Settlement / Other Date, "C" = Cutover.
SettlementDatestring(12)OSettlement date for enquiry. Format dd/MM/yyyy. If omitted on enquiry, the terminal uses today's date.
AccessCodestring(8)OOperator access code when the terminal requires it for settlement.
WithReceiptImageDataboolOIf enabled, include ReceiptData and ReceiptLogo in the response.
ReceiptTypeintOReceipt format. See Table REQ-02.
PlainTextCharPerLineshortOPlain-text receipt width when ReceiptType is plain text.
DisablePrintingboolOIf enabled, disable receipt printing.
Settlement response fields (shared)

Identical response structure for all settlement types — ResponseType is always "settlement".

PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "settlement".
SuccessboolMWhether the transaction is approved (true) or declined (false).
ResponseTextstringOText of response. Commonly occurs when a transaction is declined.
MerchantnumberMMerchant identifier.
ReceiptDatastringOSettlement receipt content.
ReceiptLogostringOBase64-encoded logo.
DigitalSigstringOBase64-encoded digital signature when returned.
ReceiptTypeintMReceipt format returned.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/settlement
Request Example
{
  "Merchant": "01",
  "SettlementType": "E",
  "AccessCode": "0000",
  "DisablePrinting": false,
  "WithReceiptImageData": true,
  "ReceiptType": 1
}
Success
Failed
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "settlement",
  "Response": {
    "Merchant": 1,
    "Success": true,
    "ReceiptData": "...",
    "ReceiptType": 1
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "settlement",
  "Response": {
    "Merchant": 1,
    "Success": false,
    "ResponseText": "Transaction Cancelled",
    "ReceiptType": 1
  }
}

Settlement Cutover

Performs an end-of-day settlement cutover, closing the current batch and reconciling totals with the host. Unlike Enquiry, this is a permanent settlement action.

Uses the same POST .../settlement endpoint and models as Settlement Enquiry — see Settlement request fields and Settlement response fields. Set SettlementType to "C".

Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/settlement
Request Example
{
  "Merchant": "01",
  "SettlementType": "C",
  "AccessCode": "0000",
  "DisablePrinting": false,
  "WithReceiptImageData": true,
  "ReceiptType": 1
}
Success
Failed
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "settlement",
  "Response": {
    "Merchant": 1,
    "Success": true,
    "ReceiptData": "...",
    "ReceiptType": 1
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "settlement",
  "Response": {
    "Merchant": 1,
    "Success": false,
    "ResponseText": "Cannot Complete",
    "ReceiptType": 1
  }
}

Manual Host Logon

Initiates a manual host logon. Typically required at the start of the business day or after a network issue. The terminal must be logged on before processing financial transactions.

Request Body Fields
PropertyTypeM/ODescription
Merchantstring(2)OSpecify the merchant to execute the transaction. See Table REQ-01.
Response Fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "logon".
SuccessboolMWhether the operation succeeded (true) or failed (false).
ResponseTextstringOError description on failure.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/logon
Request Example
{
  "Merchant": "01"
}
Success
Failed
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "logon",
  "Response": {
    "Success": "1"
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "logon",
  "Response": {
    "Success": "0",
    "ResponseText": "LOGON FAILED\nTRANSMISSION ERROR"
  }
}

Print Stored Transactions

Triggers the terminal to print a report of stored (offline/EOV) transactions. The response contains summary counts and totals by entry method.

Request Body Fields
PropertyTypeM/ODescription
Merchantstring(2)OSpecify the merchant to execute the transaction. See Table REQ-01.
Response Fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "printstoredtransactions".
IdProcessoruintMProcessor ID.
EOVCountuintMCount of EOV (end-of-visit) transactions.
EOVTotaluintMTotal value of EOV transactions.
CTLSCountuintMCount of contactless transactions.
CTLSTotaluintMTotal value of contactless transactions.
ContactCountuintMCount of contact (insert) transactions.
ContactTotaluintMTotal value of contact transactions.
CurrencyCodeuintMISO currency code.
CountryCodeuintMISO country code.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/printstoredtransactions
Request Example
{
  "Merchant": "01"
}
Response Example
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "printstoredtransactions",
  "Response": {
    "IdProcessor": 1,
    "EOVCount": 0,
    "EOVTotal": 0,
    "CTLSCount": 3,
    "CTLSTotal": 5500,
    "ContactCount": 1,
    "ContactTotal": 1200,
    "CurrencyCode": 554,
    "CountryCode": 554
  }
}

Print Pending Transactions

Triggers the terminal to print a report of pending transactions (transactions initiated but not yet settled or confirmed).

Request Body Fields
PropertyTypeM/ODescription
Merchantstring(2)OSpecify the merchant to execute the transaction. See Table REQ-01.
Response Fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "printpendingtransaction".
PendingCountuintMNumber of pending transactions.
OutstandingCountuintMNumber of outstanding transactions.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/printpendingtransaction
Request Example
{
  "Merchant": "01"
}
Response Example
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "printpendingtransaction",
  "Response": {
    "PendingCount": 0,
    "OutstandingCount": 0
  }
}

Cancel Transaction

Cancels a transaction that is currently in progress on the terminal. The sessionId in the URL must match the sessionId of the transaction you want to cancel.

If the transaction has already passed the point of no return (e.g. processing at the host), the cancellation will be declined.

Response Fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the transaction being cancelled.
ResponseTypestringMAlways "canceltransaction".
SuccessboolMTrue = cancelled; false = cancellation declined.
ResponseTextstringMResponse description.
Endpoint
GET/POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/canceltransaction
No request body required
Cancelled
Declined
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "canceltransaction",
  "Response": {
    "Success": "1",
    "ResponseText": "Transaction Cancelled"
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "canceltransaction",
  "Response": {
    "Success": "0",
    "ResponseText": "Cannot Cancel Transaction"
  }
}

Query Transaction

Polls the current status of a transaction initiated in async mode. The sessionId in the URL must match the original transaction's sessionId.

When Status = 11 (WaitingForSignatureConfirmationFromClient) and DigitalSig is present in the response, call Approve Signature with the same sessionId — see Table ENUM-12.

Response Fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the transaction.
ResponseTypestringMAlways "querytransaction".
StatusintMTransaction status code. Possible values are listed in Table ENUM-12.
StatusTextstringMText of status of transaction. See Table ENUM-12.
IsCancelableboolOWhether the current async flow can be canceled at this stage.
PrinterStatusstringOPrinter state text returned by the terminal when available (for example out-of-paper / ready).
TransactionobjectMIncludes the response transactions corresponding to the FuncType on the terminal. This field has a value only when the status of the transaction equals 1 (TransactionCompleted) — see Table ENUM-12.
Endpoint
GET https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/querytransaction
No request body required
Completed
In Progress
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "querytransaction",
  "Response": {
    "Status": 1,
    "StatusText": "Transaction completed",
    "IsCancelable": false,
    "PrinterStatus": "Printer Ready",
    "Transaction": {
      "TxnType": "P",
      "Success": "1",
      "lAmount": 2000,
      "lAuthorizedTotal": 2000,
      "szAuthorizationResponseCode": "00",
      "lszApprovalCode": "327710",
      "ReceiptType": 1
    }
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "querytransaction",
  "Response": {
    "Status": 2,
    "StatusText": "Initializing transaction",
    "IsCancelable": true,
    "PrinterStatus": "",
    "Transaction": null
  }
}

Voucher Entry

Uploads stored offline (voucher) transactions from the terminal to the host. POSClient labels this Voucher Entry. Path is POST .../voucherEntry.

Request Body Fields
Field NameType (Max Length)M/ODescription
Merchantstring(2)MSpecify the merchant to execute the transmission. See Table REQ-01.
ReceiptTypeintOReceipt format for any receipt data returned. See Table REQ-02.
PlainTextCharPerLineshortOPlain-text receipt width when ReceiptType is plain text.
DisablePrintingboolOIf enabled, disable receipt printing.
Response Fields
Field NameType (Max Length)M/ODescription
SessionIdstring(36)MSessionId of the request transaction.
ResponseTypestring(23)MAlways "voucherEntry".
SuccessboolMWhether the transmission succeeded (true) or failed (false).
ResponseTextstring(64)MResponse description (e.g. TRANSMISSION COMPLETE, No Offline Trans To Upload).
TransmissionDatestringMDate used for searching. Format: YYYYMMDD.
TransmissionTimestringMTime used for searching. Format: hh:mm:ss.
ReceiptDatastringOReceipt content when returned by the terminal.
ReceiptLogostringOBase64-encoded receipt logo.
DigitalSigstringODigital signature image data when applicable.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/voucherEntry
Request Example
{
  "Merchant": "01"
}
Success
No records
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "voucherEntry",
  "Response": {
    "Success": true,
    "ResponseText": "TRANSMISSION COMPLETE",
    "TransmissionDate": "10112024",
    "TransmissionTime": "10:10:00"
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "voucherEntry",
  "Response": {
    "Success": true,
    "ResponseText": "No Offline Trans To Upload",
    "TransmissionDate": "10112024",
    "TransmissionTime": "10:10:00"
  }
}

Shift Actions

Runs shift operations on the terminal (start a new shift, print current shift summary, or open shift setup). Path is POST .../shiftactions. Response type is "shiftactions".

Request Body Fields
Field NameType (Max Length)M/ODescription
Merchantstring(2)OMerchant for the shift action. See Table REQ-01.
FunctionTypestring(24)MShift action discriminator — see FunctionType values below. Invalid or missing values return Invalid Request Data.
FunctionType values
FunctionTypeDescription
StartNewShiftStart a new shift.
CurrentShiftSummaryPrint / return the current shift summary (shift totals).
ShiftSetupOpen the shift setup menu on the terminal.
Response Fields
Field NameType (Max Length)M/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "shiftactions".
SuccessboolMWhether the shift action succeeded (true) or failed (false).
ResponseTextstringOResponse description.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/shiftactions
Request Example — CurrentShiftSummary
{
  "Merchant": "01",
  "FunctionType": "CurrentShiftSummary"
}
Response Example
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "shiftactions",
  "Response": {
    "Success": true,
    "ResponseText": "APPROVED"
  }
}

Reports

Prints terminal reports (sales, shifts, diagnostic, SAF). Path is POST .../reports.

Request Body Fields
Field NameType (Max Length)M/ODescription
Merchantstring(2)MMerchant to run the report for. See Table REQ-01.
FunctionTypestringMReport type — see FunctionType values table below.
PaymentMethodstringOPayment method filter. See Accepted Values below.
TransactionTypestringOTransaction type filter. See Accepted Values below.
ReportTypestringOReport grouping. See Accepted Values below.
StartDatestring(8)OStart date filter. Format YYYYMMDD.
EndDatestring(8)OEnd date filter. Format YYYYMMDD.
AccessCodestring(8)OOperator access code when the terminal requires it for reports.
Accepted Values
  • PaymentMethod — None, EftPayment, AliPay, WeChat, Other.
  • TransactionType — All, Purchase, Refund, PurchaseCash, CashOut, PreAuth, PreAuthComplete. For AliPay/WeChat PaymentMethod the terminal overrides this internally.
  • ReportType — DETAIL, SUMMARY, DATETIME, ISSUER, EMPLOYEE, BYCARDTYPE. NONE is rejected.
FunctionType values
FunctionTypeDescriptionRequired fields (beyond Merchant)
DiagnosticDiagnostic report.—
CurrentSaleCurrent sales report.PaymentMethod, TransactionType, ReportType
PreviousSalesPrevious sales report.PaymentMethod, TransactionType, ReportType
HistorySalesHistory sales report (date range).PaymentMethod, TransactionType, ReportType, StartDate, EndDate
DeleteSalesDelete sales report (date range).StartDate, EndDate
PrintAndClearSAFPrint and clear SAF.—
CurrentShiftCurrent shift report.—
PreviousShiftsPrevious shifts report.—
HistoryShiftsHistory shifts report (date range).StartDate, EndDate
Response Fields
Field NameType (Max Length)M/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "reports".
SuccessboolMWhether the report succeeded (true) or failed (false).
ResponseTextstringMResponse description.
ReceiptDatastringOReport receipt content when returned.
ReceiptLogostringOBase64-encoded receipt logo when returned.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/reports
Request Example — CurrentSale
{
  "Merchant": "01",
  "FunctionType": "CurrentSale",
  "PaymentMethod": "EftPayment",
  "TransactionType": "All",
  "ReportType": "DATETIME",
  "AccessCode": "0000"
}
Response Example
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "reports",
  "Response": {
    "Success": true,
    "ResponseText": "APPROVED",
    "ReceiptData": ""
  }
}

Transaction Listing

Prints the transaction listing for the selected merchant. Path is POST .../transactionlisting.

Only the main Transaction Listing operation is supported. Memory Full, Host Forced Settlement Listing, and Settlement Initiated Listing are not exposed on this API.

Request Body Fields
Field NameType (Max Length)M/ODescription
Merchantstring(2)MMerchant to list transactions for. See Table REQ-01.
Response Fields
Field NameType (Max Length)M/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "transactionListing".
SuccessboolMWhether the listing succeeded (true) or failed (false).
ResponseTextstringMResponse description.
ReceiptDatastringOListing receipt content when returned.
ReceiptLogostringOBase64-encoded receipt logo when returned.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/transactionlisting
Request Example
{
  "Merchant": "01"
}
Response Example
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "transactionListing",
  "Response": {
    "Success": true,
    "ResponseText": "APPROVED",
    "ReceiptData": ""
  }
}

Dump Logs

Dumps the payment app's log to a text file for debugging. The request uses POST and does not require a request body.

Response Fields
Field NameType (Max Length)M/ODescription
SessionIdstring(36)MSessionId of the request transaction.
ResponseTypestring(23)MAlways "dumplogs".
SuccessboolMWhether log dump succeeded (true) or failed (false).
ResponseTextstring(30)MResponse description.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/dumplogs
No request body required
Success
Failed
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "dumplogs",
  "Response": {
    "Success": true,
    "ResponseText": "Logs Dumped Successfully"
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "dumplogs",
  "Response": {
    "Success": false,
    "ResponseText": "Logs Dump Failed"
  }
}

Approve Signature

This function enables customers to approve signature-required transactions through the client app, provided that AsyncMode is enabled. Call this endpoint when querytransaction returns Status = 11 (WaitingForSignatureConfirmationFromClient) with a DigitalSig field — see Table ENUM-12.

Flow: POS submits transaction (AsyncMode enabled) → polls querytransaction → when Status=11 and DigitalSig present, call approvesignature (same sessionId) with Approval approve/reject → continue polling until Status=1.

Request Body Fields
PropertyTypeM/ODescription
ApprovalboolMTrue = approve the signature; false = reject the signature.
Response Fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "approvesignature".
SuccessboolMTrue = updated; false = failed.
ResponseTextstring(30)MResponse description.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/approvesignature
Request Example
{
  "Approval": "1"
}
Success
Failed
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "approvesignature",
  "Response": {
    "Success": "1",
    "ResponseText": "Update Successfully"
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "approvesignature",
  "Response": {
    "Success": "0",
    "ResponseText": "Update Failed"
  }
}

Device mode

Device-mode indicates whether the client and payment app run on the same device.

ValueDescription
onSame device
offSeparate devices

The device-mode query parameter is optional and applies to all API endpoints that end with /transaction. If you don't include it in the request URL, the system assumes device-mode=off by default, meaning the client and the device are running on separate devices.

Device-mode api request

Devices-mode request looks like this.

https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/transaction?device-mode=on

Reference Table Index

All lookup tables use a consistent ID format — not the legacy Word section numbers. Prefix indicates the table group; the number is sequential within that group.

Placement rule: REQ / RES tables and the main ENUM set live under Transaction. ENUM tables for a single endpoint may sit next to that endpoint — the ENUM prefix still applies because the content is a value list.

Transaction — request field logic
TableTitleUsed by
REQ-01Merchant field logicMerchant on transaction and other requests
REQ-02ReceiptType field logic (request)ReceiptType request field
Transaction — response field logic
TableTitleUsed by
RES-01ReceiptType field logic (response)ReceiptType in transaction/search/reprint responses
Transaction — structured receipt
SectionTitleUsed by
Transaction — field enums
TableTitleField
ENUM-01fsModify field valuesfsModify
ENUM-02iAccountType field valuesiAccountType
ENUM-03iCardType field valuesiCardType
ENUM-04EntryMode / iEntryMode field valuesiEntryMode, Card Verification EntryMode
ENUM-05iPaymentType field valuesiPaymentType
ENUM-06iCustomerLanguage field valuesiCustomerLanguage
ENUM-07iReversalReason field valuesiReversalReason
ENUM-08byPinType field valuesbyPinType
ENUM-09byPinStatus field valuesbyPinStatus
ENUM-10Mode field valuesGet Merchant List → Mode
ENUM-11FuncType field valuesSearch Transaction → FuncType
ENUM-12Status and StatusText field valuesSync vs Async, Query Transaction
ENUM-13iCVVStatus valuesTransaction Response
ENUM-14iMotoOrderType valuesTransaction Response

Changelog

Version history for the POS Integration API specification.

QA_1.3.19 2026/07/31 by Lien Le
NEWVoid (TxnType: "V") and Shift Actions (/shiftactions) CHANGEDSettlementType last enquiry "R" → "L"; document SettlementDate NEWPreEMVFee request/response fields for POS Integration (EnablePreEMVFee, fee flags/amounts, lPreEMVPurchaseFee, lPreEMVCashOutFee) CHANGEDCash Out (TxnType: "C") request amount field from Amount to AmtCash
QA_1.3.18 2026/07/22 by Lien Le
NEWAPI v1.3.18 developer doc for WPAY