Nuvei Payment Terminal

On-Premise Integration

  • Device Mode: USB – RS232 – WiFi – Ethernet
  • Host Modes: Direct API Device – App 2 App Inter-Link
API v1.3.26 QA_1.3.26 2026-08-22

REST API specification for integrating a third-party POS system with a 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. We integrated a payment gateway with a POS system according to PCI DSS and PA DSS standards.

The POS Adaptor 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
PurchasePOSTtransaction
Purchase CashPOSTtransaction
Cash OnlyPOSTtransaction
Refund AmountPOSTtransaction
MOTO PurchasePOSTtransaction
MOTO Refund AmountPOSTtransaction
Pre-authPOSTtransaction
Pre-auth CompletePOSTtransaction
Pre-auth IncrementPOSTtransaction
Pre-auth DelayedPOSTtransaction
ReprintPOSTreprint
Card VerificationPOSTquerycard
Card Enquiry (unattended only)POSTcardenquiry
Scan Code (unattended only)POSTscancode
Settlement EnquiryPOSTsettlement
Settlement CutoverPOSTsettlement
Manual Host LogonPOSTlogon
Search TransactionPOSTtransactionsearch
Cancel TransactionGET / POSTcanceltransaction
Health CheckGEThealthcheck
Bring App To ForegroundPOSTbringapptoforeground
Query TransactionGETquerytransaction
Query Stored TransactionPOSTquerystoredtransaction
Approve SignaturePOSTapprovesignature
Extended Pre-AuthPOSTtransaction
Pre-Auth ReversalPOSTtransaction
Shift TotalsPOSTshiftTotals
Voucher EntryPOSTvoucherEntry

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 unreachableNo 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 modetrue / 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, and DisablePrinting (transaction, card status, settlement, offline transmission), transaction flag fields (fAuthorized, fOffline, 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 OptionsHTTP Server SSL Enabled controls whether the payment app serves the POS Integration API over HTTPS, while Enable SSL Certificate Verification controls whether the POS client validates the server certificate. Set both to Yes for HTTPS with certificate validation. When HTTP Server SSL Enabled is No, connections use HTTP only and certificate verification is not applicable.

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, 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).
AmountlongOTransaction amount in cents. Required and greater than 0 for amount-based transaction types; optional for Extended Pre-Auth (PE).
TxnRefstring(64)OReference number attached to the transaction. Appears on the receipt.
OrderIDstring(52)OOrder identifier for later lookup via Query Stored Transaction.
EnableTipboolOWhether tip entry is offered. Default disabled.
AmtTiplongOAmtTip of the sale in 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.
CustomerReceiptPrintOptionintODefines the customer receipt printing option. See Table REQ-03.
MerchantReceiptPrintOptionintODefines the merchant receipt printing option. See Table REQ-03.

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.

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.
Table REQ-03 — Print Option (CustomerReceiptPrintOption / MerchantReceiptPrintOption)

Defines the receipt printing behaviour for customer and merchant during a transaction.

Print OptionDescription
0No Printing
1AutoPrinting
2Prompt Printing

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.
fCardHolderStatesCVVnotOnCardboolMNo CVV due to "No CVV On Card".
fCardNotPresentboolMNo CVV due to "CVV Not Present".
fCardNotPresentMailboolMIf the transaction can not present mail.
fCardNotPresentPhoneboolMIf the transaction can not present phone.
fCanAdjustboolMIf the transaction can adjust.
fCanVoidboolMIf the transaction can be voided (Can be voided).
fCanPreAuthCompleteboolMIf the transaction can preauth complete.
fCanVoidPreAuthCompleteboolMIf the transaction can void preauth complete.
fCanGoOfflineboolMIf the transaction allows for offline stored and forward.
fOfflineboolMIndicates whether the transaction is from an EOV (or OFFLINE) case or an ONLINE case. If fOffline is true, the transaction is from an EOV (or OFFLINE) case; otherwise, the transaction is ONLINE.
lszCustomerReferencestringOCustomer reference number from the payment record.
szReferenceNumberstringORetrieval Reference Number (RRN) assigned to the transaction. This is different from lszCustomerReference, which contains the POS/customer transaction reference (TxnRef).
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.
lszSTANstringOThe Systems Trace Audit Number of the transaction.
TRVstring(15)OTransaction reference value.
IssuerRRNstring(15)OIssuer retrieval reference number.
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.
szMaskedCardNumberstringOMasked card number returned when available.
szCardTypestring(34)OCard type description string from the presented card (e.g. "Mastercard").
lServiceFeeslongOThe surcharge fee for the transaction. Only shown when it has a value.
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 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

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_INTERACTDEBIT = 8CARD_SPARE7 = 83
CARD_MAESTRODEBIT = 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_EBTASSIST = 147
CARD_DINERS = 73CARD_EBTSNAP = 148
CARD_DISCOVER = 74AllCards = 149
CARD_UNKNOWN = 150CARD_ZBIZTESTDEBIT = 151
CARD_ZBIZTEST = 152
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_IMPRINTER = 20
PAYMENT_TYPE_BALANCEINQUIRY = 5PAYMENT_TYPE_AUTHONLY = 60
PAYMENT_TYPE_DEPOSIT = 6PAYMENT_TYPE_REGISTER = 100
PAYMENT_TYPE_SETTLE = 7PAYMENT_TYPE_ACTIVATE = 101
PAYMENT_TYPE_INSTALLMENTSALE = 10PAYMENT_TYPE_DEACTIVATE = 102
PAYMENT_TYPE_LATEINTERESTINSTALLMENTSALE = 11PAYMENT_TYPE_RELOAD = 103
PAYMENT_TYPE_REDEEMED = 104
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
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",
      "szReferenceNumber": "000001013731",
      "lszSTAN": "000018",
      "lszEndCardNumber": "2955",
      "fOffline": "0",
      "szCardType": "Visa",
      "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 Amount 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 Amount).
AmountlongMRefund amount in cents. Must be greater than 0.
Request Example — Refund Amount
{
  "Merchant": "01",
  "TxnType": "R",
  "Amount": 1000,
  "TxnRef": "{{txnRef}}",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Cash Only TxnType: C

The cash-out transaction type allows the merchant to perform a cash-out 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 "C" (Cash Only).
AmountlongMCash amount in cents. Must be greater than 0.
Request Example — Cash Only
{
  "Merchant": "01",
  "TxnType": "C",
  "Amount": 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(3)OCard CVV/CVC.
CardNamestring(26)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 Amount 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 Amount).
AmountlongMRefund amount in cents. Must be greater than 0.
Panstring(20)OCard number.
DateExpirystring(4)OCard expiry in MMYY.
CardNamestring(26)OCardholder name.
CVVstring(3)OCard CVV.
Request Example — MOTO Refund Amount
{
  "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, RRN, and lszSTAN. Provide the original RRN and set lszSTAN to its last six characters. 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: PreAuthInquiry)
2bPTIncrement — increase the reserved amount.Original PA (FuncType: PreAuthInquiry)
2cPRReversal — reverse the open pre-auth.Original PA (FuncType: PreAuthInquiry)
2dPEExtended — extend the legacy pre-auth record.Original PA (FuncType: PreAuthInquiry)
3PDDelayed — optional adjustment after completion when extra goods/services are delivered.Original AC (FuncType: PreAuthCompleteInquiry)

Linking follow-up requests

Follow-up requests (AC, PT, PD, PE, PR) require lszApprovalCode, the original RRN, and lszSTAN set to the last six characters of the original RRN.

  • Option 1 — Search Transaction: Use the original RRN and approval code as AuthId with the correct FuncType, then select the matching record from Response.Transactions[].
  • Option 2 — POS-managed: Store lszApprovalCode, lszSTAN, and szReferenceNumber (RRN) from the original transaction response, then 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: "PreAuthInquiry" — look up an original pre-auth for Complete, Increment, Extended, or Reversal.
  • FuncType: "PreAuthCompleteInquiry" — look up a completed pre-auth for Delayed.

FuncType is mandatory. For either pre-auth inquiry type, both RRN and AuthId are mandatory; AuthId must equal the original transaction's lszApprovalCode. Stan is optional; when supplied, use the last six characters of RRN.

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.
IsMaxAmountboolOWhen enabled, use the maximum amount configured in MaxStore for the unattended pre-auth.
MaxStore maximum amount configuration for IsMaxAmount
MaxStore maximum amount configuration — replace this placeholder image with the actual configuration screenshot.

After approval

Save lszApprovalCode, lszSTAN, and szReferenceNumber (RRN) from Response.Transaction. Set lszSTAN to the last six characters of szReferenceNumber. Store these identifiers in your POS; Search Transaction uses the saved RRN and approval code (AuthId) to locate and confirm the matching record. Use PreAuthInquiry for Complete, Increment, Extended, or Reversal, and PreAuthCompleteInquiry for Delayed. 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.
RRNstring(12)MOriginal pre-auth retrieval reference. The last six characters are used as lszSTAN.
lszApprovalCodestringMApproval code from the original Pre-auth. Obtain via Search Transaction (FuncType: "PreAuthInquiry" with RRN and AuthId) or from the stored PA response.
lszSTANstringMLast six characters of the original RRN.

Linking to the original pre-auth

  • Option 1: Search with FuncType: "PreAuthInquiry", RRN, and AuthId; select the returned record and use its szReferenceNumber (RRN), lszApprovalCode, and lszSTAN.
  • Option 2: Pass RRN, lszApprovalCode, and lszSTAN saved from the original PA response.
Request Example — Pre-auth Complete
{
  "Merchant": "01",
  "TxnType": "AC",
  "Amount": 100,
  "RRN": "123456789012",
  "lszApprovalCode": "328958",
  "lszSTAN": "000030",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Pre-auth Increment TxnType: PT

A preauth increment transaction type enables the merchant to increase the amount of a preauth sale by adding a new amount to 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 "PT" (Pre-auth Increment).
AmountlongMAdditional amount in cents. Must be greater than 0.
RRNstring(12)MOriginal pre-auth retrieval reference. The last six characters are used as lszSTAN.
lszApprovalCodestringMApproval code from the original Pre-auth.
lszSTANstringMLast six characters of the original RRN.

Linking to the original pre-auth

  • Option 1: Search with FuncType: "PreAuthInquiry", RRN, and AuthId; select the returned record and use its szReferenceNumber (RRN), lszApprovalCode, and lszSTAN.
  • Option 2: Pass RRN, lszApprovalCode, and lszSTAN saved from the original PA response.
Request Example — Pre-auth Increment
{
  "Merchant": "01",
  "TxnType": "PT",
  "Amount": 100,
  "RRN": "123456789012",
  "lszApprovalCode": "328958",
  "lszSTAN": "000030",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Pre-auth Delayed TxnType: PD

A preauth delayed transaction type is an optional message that may be sent when additional goods or services have been delivered after the final completion has been processed.

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 "PD" (Pre-auth Delayed).
AmountlongMAmount in cents. Must be greater than 0.
RRNstring(12)MOriginal pre-auth retrieval reference. The last six characters are used as lszSTAN.
lszApprovalCodestringMApproval code from the original Pre-auth Complete (AC).
lszSTANstringMLast six characters of the original RRN.

Linking to the original pre-auth complete

  • Option 1: Search with FuncType: "PreAuthCompleteInquiry", RRN, and AuthId; select the returned completed pre-auth and use its szReferenceNumber (RRN), lszApprovalCode, and lszSTAN.
  • Option 2: Pass RRN, lszApprovalCode, and lszSTAN saved from the original AC response.

Unlike other follow-ups, Delayed references a completed pre-auth (AC), not the original authorization (PA).

Request Example — Pre-auth Delayed
{
  "Merchant": "01",
  "TxnType": "PD",
  "Amount": 100,
  "RRN": "123456789012",
  "lszApprovalCode": "328958",
  "lszSTAN": "000030",
  "AsyncMode": "0",
  "WithReceiptImageData": "1",
  "ReceiptType": 1
}

Extended Pre-Auth TxnType: PE

Extended Pre-Auth extends a legacy pre-auth record. An amount is not required for PE. The original record is identified by lszApprovalCode and RRN.

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

Type-Specific Request Fields
Field NameTypeM/ODescription
TxnTypestring(3)MMust be "PE".
lszApprovalCodestringMApproval code from the original pre-auth.
RRNstring(12)MRetrieval reference number from the original pre-auth.
lszSTANstringMLast six characters of the original RRN.

Linking to the original pre-auth

  • Option 1: Search with FuncType: "PreAuthInquiry", RRN, and AuthId; select the returned record and use its szReferenceNumber (RRN), lszApprovalCode, and lszSTAN.
  • Option 2: Pass RRN, lszApprovalCode, and lszSTAN saved from the original PA response.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/transaction
Request Example — Extended Pre-Auth
{
  "Merchant": "01",
  "TxnType": "PE",
  "lszApprovalCode": "328958",
  "RRN": "123456789012",
  "lszSTAN": "789012",
  "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).
AmountlongMReversal amount in cents. Pass the amount for the reversal transaction.
RRNstring(12)MRetrieval reference number from the original Pre-auth.
lszApprovalCodestringMApproval code from the original Pre-auth (PA).
lszSTANstringMLast six characters of the original RRN.

Linking to the original pre-auth

  • Option 1: Search with FuncType: "PreAuthInquiry", RRN, and AuthId; select the returned record and use its lszApprovalCode and szReferenceNumber (RRN).
  • Option 2: Pass values saved from the original PA response.
Request Example — Pre-Auth Reversal
{
  "Merchant": "01",
  "TxnType": "PR",
  "Amount": 1500,
  "lszApprovalCode": "328958",
  "RRN": "123456789012",
  "lszSTAN": "789012",
  "AsyncMode": "0"
}

Search Transaction

Search Transaction has two inquiry modes and one local-search mode. PreAuthInquiry and PreAuthCompleteInquiry send the supplied identifiers to the payment gateway to find the source pre-auth record; Reprint searches approved print jobs stored on the terminal. See Pre-auth Guide for how search fits into the pre-auth flow.

FuncType is mandatory for every search. RRN and AuthId are mandatory only for PreAuthInquiry and PreAuthCompleteInquiry; they are optional or not used for Reprint as shown below.

Request Body Fields
Field NameType (Max Length)M/ODescription
Merchantstring(2)OSpecify the merchant to execute the transaction. See Table REQ-01.
FuncTypestring(22)MType of stored records to retrieve. Controls which follow-up operations the results support — see Table ENUM-11.
RRNstring(12)M*Required for PreAuthInquiry and PreAuthCompleteInquiry; optional retrieval-reference filter for Reprint.
TRVstring(15)OOptional gateway filter for PreAuthInquiry and PreAuthCompleteInquiry; not used for Reprint.
AuthIdstring(6)M*Original transaction's lszApprovalCode. Required for PreAuthInquiry and PreAuthCompleteInquiry; omit for Reprint.
Stanstring(6)OOptional. Passed to the gateway for either pre-auth inquiry type; used as a database filter for Reprint.
Last4Digitsstring(4)OOptional last-four-card-digits database filter for Reprint; not used for either pre-auth inquiry type.
AmountlongOOptional amount database filter in cents for Reprint; not used for either pre-auth inquiry type.
ExAmountboolOAmount matching mode for the Reprint Amount filter; not used for either pre-auth inquiry type.
SearchAmountlongOOptional amount passed to the inquiry gateway, in cents; not used for Reprint.
IssuerRRNstring(15)OOptional issuer retrieval-reference gateway filter for either pre-auth inquiry type; not used for Reprint.
Field requirement by FuncType
FieldPreAuthInquiryPreAuthCompleteInquiryReprint
FuncTypeMMM
RRNMMO
AuthIdMMNot used
StanOOO
TRVOONot used
IssuerRRNOONot used
SearchAmountOONot used
AmountNot usedNot usedO
ExAmountNot usedNot usedO
Last4DigitsNot usedNot usedO
Table ENUM-11 — FuncType field values

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

Use FuncType to select the search purpose. For example, to find the original pre-auth before a Pre-auth Complete, set FuncType to "PreAuthInquiry" and send both RRN and AuthId.

FuncTypePurpose
PreAuthInquiryFind the original Pre-auth (PA) for Complete (AC), Increment (PT), Reversal (PR), or Extend (PE).
PreAuthCompleteInquiryFind the completed Pre-auth (AC) for Delayed (PD).
ReprintSearch approved print jobs stored on the terminal.

* Conditional mandatory field: both RRN and AuthId are M for PreAuthInquiry and PreAuthCompleteInquiry; for Reprint, RRN is O and AuthId is not used.

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. The transaction RRN is returned in szReferenceNumber. For a pre-auth follow-up, copy szReferenceNumber (RRN) and lszApprovalCode, then send lszSTAN as the last six characters of that RRN. 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 — look up a pre-auth for Complete, Increment, or Reversal
{
  "Merchant": "01",
  "FuncType": "PreAuthInquiry",
  "RRN": "000001013731",
  "AuthId": "328408",
  "IssuerRRN": "000001013731"
}
Response Example — matching pre-auth
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "transactionsearch",
  "Response": {
    "Transactions": [
      {
        "Merchant": "1",
        "TxnType": "PA",
        "Success": "1",
        "lAmount": 1500,
        "lAuthorizedTotal": 1500,
        "Date": "20240405",
        "Time": "22:19:22",
        "szReferenceNumber": "000001013731",
        "lszApprovalCode": "328408",
        "lszSTAN": "013731",
        "lszEndCardNumber": "2955",
        "PID": 8
      }
    ]
  }
}

Each object in Transactions[] follows the Transaction Response model. Use szReferenceNumber (RRN), lszApprovalCode, and lszSTAN in the follow-up request.

Reprint Receipt

Reprints the receipt of any approved transaction.

Uses the POST .../reprint endpoint. Use FuncType: "Reprint" in Search Transaction, then submit the selected transaction's szReferenceNumber as the reprint request RRN.

Reprint request fields
Field NameType (Max Length)M/ODescription
Merchantstring(2)OMerchant to execute the reprint. See Table REQ-01.
RRNstring(12)MRetrieval reference number. Native validation rejects an empty value.
WithReceiptImageDataboolOIf enabled, include receipt data in the response.
ReceiptTypeintOReceipt format. See Table REQ-02.
PlainTextCharPerLineshortOPlain-text receipt width.
DisablePrintingboolOIf enabled, disable physical receipt printing.
RunInBackgroundboolOIf enabled, run the reprint without displaying the transaction flow.

Reprint request note

The reprint request uses the last six characters of the selected szReferenceNumber (sent as RRN) to locate the stored print job. Reprint does not use the legacy pre-auth or print-control fields.

Reprint response fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "reprint".
MerchantnumberMMerchant identifier.
SuccessboolMWhether the operation succeeded.
ResponseTextstringMResponse description.
ReceiptDatastringOReceipt content when returned.
ReceiptLogostringOBase64-encoded receipt logo when returned.
DigitalSigstringODigital signature data when returned.
ReceiptTypeintMReceipt format returned.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/reprint
Request Example
{
  "Merchant": "01",
  "RRN": "123456789012",
  "ReceiptType": 1,
  "WithReceiptImageData": true
}
Response Example (Success)
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "reprint",
  "Response": { "Merchant": 1, "Success": true, "ResponseText": "Reprinted Successfully", "ReceiptData": "...", "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.
DisablePrintingboolOIf enabled, disable receipt printing.
Response Fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "querycard".
SuccessboolMWhether the transaction is approved (true) or declined (false).
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.
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
  }
}

Card Enquiry

Reads the presented card and returns a card hash without performing a financial transaction. This operation is available for unattended mode only.

Request Body Fields
PropertyTypeM/ODescription
Merchantstring(2)OSpecify the merchant for the card enquiry. See Table REQ-01.
Response Fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "cardenquiry".
ResponseTextstringOResponse description.
SuccessboolMWhether the card enquiry succeeded.
cardHashstringOHash of the presented card number when the card is read successfully.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/cardenquiry
Request Example
{
  "Merchant": "01"
}
Response Example
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "cardenquiry",
  "Response": {
    "Success": true,
    "ResponseText": "APPROVED",
    "cardHash": "..."
  }
}

Scan Code

Scans a QR code or barcode using the terminal scanner. This operation is available for unattended mode only.

Request Body Fields
PropertyTypeM/ODescription
CodeTypestringORequested code format.
TimeoutintOScanner timeout.
FlashOnboolOWhether to enable the scanner light.
Response Fields
PropertyTypeM/ODescription
SessionIdstring(36)MSessionId of the request.
ResponseTypestringMAlways "scancode".
SuccessboolMWhether a code was scanned successfully.
ResponseTextstringMResponse description.
CodeTypestringODetected code format.
CodeValuestringOScanned code value when successful.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/scancode
Request Example
{
  "CodeType": "QrCode",
  "Timeout": 30,
  "FlashOn": true
}
Response Example
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "scancode",
  "Response": {
    "Success": true,
    "ResponseText": "Scan successful",
    "CodeType": "QrCode",
    "CodeValue": "..."
  }
}

Settlement Enquiry

Settlement Enquiry retrieves current settlement subtotals without performing a settlement cutover.

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

Enquiry vs Cutover

OperationSettlementTypeRequest / response
Current settlement enquiry"E"Current settlement totals
Last-settlement enquiry"R"Last-settlement totals
Settlement Cutover"C"Batch cutover
Settlement request fields (shared)
PropertyTypeM/ODescription
Merchantstring(2)OSpecify the merchant to execute the transaction. See Table REQ-01.
SettlementTypestring(1)MEnquiry: "E" = current enquiry, "R" = last-settlement enquiry. Cutover: "C".
AccessCodestring(8)O/MAccess code when settlement access-code management is enabled.
ReceiptTypeintOReceipt format. See Table REQ-02.
WithReceiptImageDataboolOInclude receipt image data.
PlainTextCharPerLineshortOPlain-text receipt width.
DisablePrintingboolODisable receipt printing.
Settlement response fields (shared)

Identical response structure for Enquiry and Cutover — 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.
ReceiptTypeintOReturned receipt format.
ReceiptDatastringOSettlement receipt data.
ReceiptLogostringOReceipt logo.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/settlement
Request Example
{
  "Merchant": "01",
  "SettlementType": "E",
  "ReceiptType": 1,
  "WithReceiptImageData": true,
  "DisablePrinting": false
}
Success
Failed
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "settlement",
  "Response": {
    "Merchant": 1,
     "Success": true,
     "ReceiptType": 1,
     "ReceiptData": "..."
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "settlement",
  "Response": {
    "Merchant": 1,
     "Success": false,
     "ResponseText": "Transaction Cancelled",
     "ReceiptType": 1
  }
}

Settlement Cutover

Performs the end-of-day settlement cutover, closing the current batch and reconciling totals with the host.

Uses the same POST .../settlement endpoint and models as Settlement Enquiry. Set SettlementType to "C".

Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/settlement
Request Example
{
  "Merchant": "01",
  "SettlementType": "C",
  "ReceiptType": 1,
  "WithReceiptImageData": true,
  "DisablePrinting": false
}
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)OMerchant identifier.
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"
  }
}

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).
TransactionobjectOReturned as an object when the status equals 1 (TransactionCompleted); read the gateway RRN from Transaction.szReferenceNumber. It can be null while the transaction is pending — 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",
      "szReferenceNumber": "000001013731",
      "ReceiptType": 1
    }
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "querytransaction",
  "Response": {
    "Status": 2,
    "StatusText": "Initializing transaction",
    "IsCancelable": true,
    "PrinterStatus": "",
    "Transaction": null
  }
}

Query Stored Transaction

Retrieves a previously stored transaction result from the terminal database. The stored record is located by OrderID in the request body. Use the same OrderID on the original request and the lookup request when an exact stored record is required.

On success, the response contains a full Transaction object — same field model as Transaction Response.

Request Body Fields
Field NameType (Max Length)M/ODescription
OrderIDstring(52)OOrder identifier used to locate the stored transaction. An exact lookup requires the same order identifier to have been stored on the original request.
ReceiptTypeintOReceipt format for returned receipt data. See Table REQ-02.
PlainTextCharPerLineshortOPlain-text receipt width when plain-text receipt output is requested.
Response

Same envelope as a financial transaction — Response.Transaction uses the field model in Transaction Response. The response type is "querytransaction". If no matching record exists, the terminal returns an error response or a failed business outcome.

Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/querystoredtransaction
Request Example
{
  "OrderID": "order-20260806-001",
  "ReceiptType": 1,
  "PlainTextCharPerLine": 32
}
Response Example
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "querytransaction",
  "Response": {
    "Transaction": {
      "TxnType": "P",
      "Success": "1",
      "ResponseText": "APPROVED",
      "lAmount": 1500,
      "lszApprovalCode": "328408",
      "lszSTAN": "000044",
      "ReceiptType": 1
    }
  }
}

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"
  }
}

Shift Totals

Returns the shift-total result.

FieldTypeM/ODescription
MerchantstringOMerchant identifier.
IsStartNewShiftboolOWhether to start a new shift.
SuccessboolMWhether the operation succeeded.
ResponseTextstringMOperation result text.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/shiftTotals
Request Example — print current shift
{
  "Merchant": "01",
  "IsStartNewShift": false
}

Set IsStartNewShift to true to start a new shift.

Success
Failed
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "shiftTotals",
  "Response": {
    "Success": true,
    "ResponseText": "Transaction Successful"
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "shiftTotals",
  "Response": {
    "Success": false,
    "ResponseText": "Transaction Cancelled"
  }
}

Voucher Entry

Starts the voucher-entry operation.

FieldTypeM/ODescription
MerchantstringOMerchant identifier.
ReceiptTypeintOReceipt output mode. The POS client defaults to 2 (plain text).
PlainTextCharPerLineintONumber of characters per line when plain-text receipt output is requested. The POS client default is 30.
DisablePrintingboolOWhether receipt printing is disabled.
SuccessboolMWhether the operation succeeded.
ResponseTextstringMOperation result text.
TransmissionDatestringOTransmission date when returned.
TransmissionTimestringOTransmission time when returned.
ReceiptDatastringOReceipt data when returned.
ReceiptLogostringOReceipt logo when returned.
DigitalSigstringODigital signature when returned.
Endpoint
POST https://{{pos-server}}:{{pos-port}}/v1/sessions/{{sessionId}}/voucherEntry
Request Example
{
  "Merchant": "01",
  "ReceiptType": 2,
  "PlainTextCharPerLine": 30,
  "DisablePrinting": false
}
Success
Failed
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "voucherEntry",
  "Response": {
    "Success": true,
    "ResponseText": "Transmission Complete",
    "TransmissionDate": "20240806",
    "TransmissionTime": "09:30:00",
    "ReceiptData": "...",
    "ReceiptLogo": "...",
    "DigitalSig": "..."
  }
}
{
  "SessionId": "{{sessionId}}",
  "ResponseType": "voucherEntry",
  "Response": {
    "Success": false,
    "ResponseText": "Upload Failed",
    "TransmissionDate": "20240806",
    "TransmissionTime": "09:30:00"
  }
}

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
REQ-03Print OptionCustomerReceiptPrintOption, MerchantReceiptPrintOption
Transaction — response field logic
TableTitleUsed by
RES-01ReceiptType field logic (response)ReceiptType in transaction/search responses
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 ListMode
ENUM-11FuncType field valuesSearch TransactionFuncType
ENUM-12Status and StatusText field valuesSync vs Async, Query Transaction

Changelog

Version history for the POS Integration API specification.

QA_1.3.262026/08/22by Lien Le
NEWAdd unattended-only Card Enquiry (cardenquiry) and Scan Code (scancode) endpoints with their request and response fields.CHANGEDAdd IsMaxAmount to Pre-auth; the flag uses the maximum amount configured in MaxStore.CHANGEDAdd RunInBackground to Reprint.
QA_1.3.252026/08/07by Lien Le
CHANGEDAlign the API reference with the request/response fields, receipt controls, and logon request.CHANGEDAlign user-facing function names, including Pre-auth Increment, Refund Amount, Cash Only, Card Verification, and Query Stored Transaction.REMOVEDRemove the pre-auth-specific reprint entry; retain Reprint Receipt only.REMOVEDRemove Date and Time from the Search Transaction request.REMOVEDRemove the duplicate AuthCode alias from the Search Transaction request.
QA_1.3.242026/07/23by Lien Le
NEWPort the legacy POS Integration endpoint and field reference.