Virtual Terminal API Sample Responses

Provides example success and error responses to help understand the virtual terminal API response structure and handling.

Sale API

Process a card sale transaction.


Response — 200 OK (Approved)

{
  "error_no": "S00",
  "success_url": true,
  "error_code": "00",
  "amount": "10.12",
  "tax": "0",
  "customfee": "0.2",
  "msg": "APPROVED",
  "desc": "APPROVAL TAS827",
  "additional_info": null,
  "clerk_id": null,
  "clerk_name": null,
  "clerk_label": null,
  "additionalKeyOne": null,
  "additionalKeyTwo": null,
  "additionalValueOne": null,
  "additionalValueTwo": null,
  "approval_code": "TAS827",
  "rrn": "611809502890",
  "txnid": "10333392",
  "created_date": "28/04/2026",
  "created_time": "05:56:08",
  "tran_no": 1,
  "stan": 712091,
  "batch_no": 211,
  "is_partial_approve": 0,
  "partial_amount": "000000001012",
  "pan": "XXXX1111",
  "card_type": null,
  "phone_number": null,
  "email_id": null,
  "zip": null,
  "card_holder_name": null,
  "expiry_date": "12/36",
  "address": null,
  "epi": "2319916062",
  "channel": "VT",
  "orderdescription": null,
  "invoicenumber": null,
  "token": "64E357AB********F2C5F6D4",
  "card_brand": "Visa",
  "netamt": 10.31
}

Response fields

FieldTypeDescription
error_nostringS00 indicates a successful transaction
success_urlbooleantrue when the transaction is approved
error_codestringGateway error code. 00 = no error
amountstringCharged amount in decimal format
taxstringTax amount applied
customfeestringCustom fee applied to the transaction
msgstringResult (e.g. APPROVED)
descstringDetailed description including the approval code
additional_infostring | nullReserved for additional metadata
clerk_idstring | nullClerk identifier, if provided
clerk_namestring | nullClerk name, if provided
clerk_labelstring | nullClerk label, if provided
additionalKeyOnestring | nullCustom key field 1
additionalKeyTwostring | nullCustom key field 2
additionalValueOnestring | nullCustom value field 1
additionalValueTwostring | nullCustom value field 2
approval_codestringIssuer-returned authorization code
rrnstringRetrieval reference number for reconciliation
txnidstringUnique transaction identifier
created_datestringTransaction date in DD/MM/YYYY format
created_timestringTransaction time in HH:MM:SS format
tran_nointegerSequential transaction number within the batch
stanintegerSystem trace audit number
batch_nointegerSettlement batch identifier
is_partial_approveinteger1 if partially approved; 0 for full approval
partial_amountstringApproved amount in zero-padded 12-digit format
panstringMasked card number — last 4 digits shown (e.g. XXXX1111)
card_typestring | nullCard type, if returned by the issuer
phone_numberstring | nullCardholder phone number, if provided
email_idstring | nullCardholder email address, if provided
zipstring | nullBilling ZIP code, if provided
card_holder_namestring | nullName on card, if provided
expiry_datestringCard expiry in MM/YY format
addressstring | nullBilling address, if provided
epistringMerchant terminal / EPI identifier
channelstringTransaction channel (e.g. VT, ECOMM)
orderdescriptionstring | nullItem or order description, if provided
invoicenumberstring | nullMerchant-supplied invoice reference, if provided
tokenstringPartially masked card token for future use
card_brandstringCard network (e.g. Visa, Mastercard)
netamtnumberNet amount charged including fees

Response — 400 (Processing Error)

{
  "error_no": "E26",
  "mesg": "PROCESSING ERROR",
  "msg": "PROCESSING ERROR",
  "desc": "AUTHENTICATION FAILED"
}

Response fields

FieldTypeDescription
error_nostringE26 indicates an authentication failure
mesgstringError message
msgstringError message
descstringDetailed description of the error cause

Response — 400 (Declined)

{
  "error_no": "E98",
  "error_code": "96",
  "success_url": false,
  "txnid": "10333383",
  "batch_no": 0,
  "switch_error_code": "V0417",
  "mesg": "Merchant Not Active",
  "desc": "Error code :96",
  "msg": "Merchant Not Active",
  "isFlexSendOrNot": "V0417"
}

Response fields

FieldTypeDescription
error_nostringE98 indicates a declined transaction
error_codestringDecline code (e.g. 96 = merchant not active)
success_urlbooleanAlways false for declined transactions
txnidstringTransaction identifier (assigned even on decline)
batch_nointegerSettlement batch identifier. Returns 0 when the merchant is inactive
switch_error_codestringSwitch-level error code returned by the network
mesgstringError message
msgstringError message
descstringDetailed error description
isFlexSendOrNotstringFlex routing indicator; mirrors switch_error_code

Error code reference

error_noMeaningTypical cause
S00ApprovedTransaction successful
E26Processing errorAuthentication credentials are invalid
E98DeclinedMerchant account is not active

Capture API

Capture a previously authorized (pre-auth) transaction and move it to the open batch for settlement.


Response — 200 OK (Approved)

{
  "error_no": "S00",
  "success_url": true,
  "error_code": "00",
  "amount": "0.67",
  "tax": "0",
  "customfee": "14",
  "msg": "APPROVED",
  "desc": "APPROVAL TAS846",
  "additional_info": null,
  "clerk_id": null,
  "clerk_name": null,
  "clerk_label": null,
  "additionalKeyOne": null,
  "additionalKeyTwo": null,
  "additionalValueOne": null,
  "additionalValueTwo": null,
  "approval_code": "TAS846",
  "rrn": "611809502918",
  "txnid": "10333404",
  "created_date": "28/04/2026",
  "created_time": "05:59:06",
  "tran_no": 3,
  "stan": 712108,
  "batch_no": 211,
  "is_partial_approve": 0,
  "partial_amount": "000000000067",
  "pan": "XXXX",
  "card_type": null,
  "phone_number": null,
  "email_id": null,
  "zip": null,
  "card_holder_name": null,
  "expiry_date": "/",
  "address": null,
  "epi": "2319916062",
  "channel": "VT",
  "orderdescription": null,
  "invoicenumber": null,
  "token": null,
  "card_brand": null,
  "netamt": 0.81
}

Response fields

FieldTypeDescription
error_nostringS00 indicates a successful capture
success_urlbooleantrue when the capture is approved
error_codestringGateway error code. 00 = no error
amountstringCaptured amount in decimal format
taxstringTax amount
customfeestringCustom fee applied
msgstringResult (e.g. APPROVED)
descstringDetailed description including the approval code
approval_codestringIssuer-returned authorization code
rrnstringRetrieval reference number
txnidstringUnique transaction identifier for the capture
created_datestringCapture date in DD/MM/YYYY format
created_timestringCapture time in HH:MM:SS format
tran_nointegerSequential transaction number within the batch
stanintegerSystem trace audit number
batch_nointegerSettlement batch identifier
is_partial_approveinteger1 if partially approved; 0 for full capture
partial_amountstringCaptured amount in zero-padded 12-digit format
panstringMasked card number. Returns XXXX when full PAN is not stored
expiry_datestringCard expiry. Returns "/" when not stored with the original auth
epistringMerchant terminal / EPI identifier
channelstringTransaction channel
tokenstring | nullCard token; null when not available for this capture type
card_brandstring | nullCard network; null when not available for this capture type
netamtnumberNet captured amount including fees

Response — 400 (Declined)

{
  "error_no": "E98",
  "error_code": "V5",
  "success_url": false,
  "txnid": "10333407",
  "batch_no": 211,
  "switch_error_code": "V0622",
  "mesg": "Capture/Ticket Transaction has already been performed",
  "desc": "Error code :V5",
  "msg": "Capture/Ticket Transaction has already been performed",
  "isFlexSendOrNot": "V0622"
}

Response fields

FieldTypeDescription
error_nostringE98 indicates a declined capture
error_codestringDecline code (e.g. V5 = already captured)
success_urlbooleanAlways false for declined operations
txnidstringTransaction identifier
batch_nointegerSettlement batch identifier
switch_error_codestringSwitch-level error code
mesgstringError message
msgstringError message
descstringDetailed error description
isFlexSendOrNotstringFlex routing indicator; mirrors switch_error_code

Response — 400 (Processing Error)

{
  "error_no": "E16",
  "mesg": "PROCESSING ERROR",
  "msg": "PROCESSING ERROR",
  "desc": "INVALID TRAN NO"
}

Response fields

FieldTypeDescription
error_nostringE16 indicates the transaction number is invalid
mesgstringError message
msgstringError message
descstringDetailed description of the error cause

Error code reference

error_noMeaningTypical cause
S00ApprovedCapture successful
E98DeclinedCapture already performed on this transaction
E16Processing errorInvalid or unrecognised transaction number (tran_no)

Void API

Void an unsettled transaction to prevent it from being settled.


Response — 200 OK (Approved)

{
  "error_no": "S00",
  "error_code": "00",
  "amount": "10.00",
  "tax": "0",
  "customfee": "0",
  "msg": "APPROVED",
  "txnid": "10333425",
  "desc": "APPROVAL TAS905",
  "additional_info": null,
  "epi": "2319916062",
  "channel": "ECOMM",
  "created_date": "28/04/2026",
  "created_time": "06:02:37",
  "rrn": "611810502972"
}

Response fields

FieldTypeDescription
error_nostringS00 indicates the void was successful
error_codestringGateway error code. 00 = no error
amountstringAmount of the voided transaction
taxstringTax amount on the voided transaction
customfeestringCustom fee on the voided transaction
msgstringResult (e.g. APPROVED)
txnidstringTransaction identifier of the void
descstringDetailed description including the approval code
additional_infostring | nullReserved for additional metadata
epistringMerchant terminal / EPI identifier
channelstringTransaction channel
created_datestringVoid date in DD/MM/YYYY format
created_timestringVoid time in HH:MM:SS format
rrnstringRetrieval reference number

Response — 400 (Declined)

{
  "error_no": "E98",
  "error_code": "12",
  "success_url": false,
  "txnid": "10333419",
  "batch_no": 211,
  "switch_error_code": "V0543",
  "mesg": "Original transaction not found",
  "desc": "Error code :12",
  "msg": "Original transaction not found",
  "isFlexSendOrNot": "V0543"
}

Response fields

FieldTypeDescription
error_nostringE98 indicates a declined void
error_codestringDecline code (e.g. 12 = original transaction not found)
success_urlbooleanAlways false for declined operations
txnidstringTransaction identifier
batch_nointegerSettlement batch identifier
switch_error_codestringSwitch-level error code
mesgstringError message
msgstringError message
descstringDetailed error description
isFlexSendOrNotstringFlex routing indicator; mirrors switch_error_code

Response — 400 (Processing Error)

{
  "error_no": "E17",
  "mesg": "PROCESSING ERROR",
  "msg": "PROCESSING ERROR",
  "desc": "INVALID RRN"
}

Response fields

FieldTypeDescription
error_nostringE17 indicates the RRN is invalid
mesgstringError message
msgstringError message
descstringDetailed description of the error cause

Error code reference

error_noMeaningTypical cause
S00ApprovedTransaction voided successfully
E98DeclinedOriginal transaction not found or already settled
E17Processing errorRRN (retrieval reference number) is invalid

2FA Request

Initiate a two-factor authentication (2FA) challenge for a sensitive operation such as a refund. The customer will receive a verification code by email or SMS.


Response — 200 OK

{
  "status": 1,
  "error_code": "S00",
  "error_desc": "Success",
  "response": {
    "uuid": "nP4Pq*******GVnoTBt",
    "epi_id": "2203082193",
    "action": "ecomm_refund",
    "is_enable_2fa": 1,
    "reference_no": "4515201248",
    "emailId": "test********.com",
    "phoneNumber": "******2164",
    "operator mailId": "",
    "operator phoneNo": "",
    "expire_on": "2026-04-28 10:05:21",
    "created_on": "2026-04-28 10:03:21"
  }
}

Response fields — top level

FieldTypeDescription
statusinteger1 on success
error_codestringS00 indicates the 2FA challenge was issued successfully
error_descstringSuccess on success
responseobject2FA challenge details (see below)

response object fields

FieldTypeDescription
uuidstringPartially masked unique identifier for this 2FA session. Required when submitting the verification code
epi_idstringTerminal EPI identifier associated with the action
actionstringThe action requiring 2FA verification (e.g. ecomm_refund)
is_enable_2fainteger1 if 2FA is enabled for this terminal/action
reference_nostringReference number for this 2FA session
emailIdstringPartially masked email address the verification code was sent to
phoneNumberstringPartially masked phone number the verification code was sent to
operator mailIdstringOperator email, if applicable
operator phoneNostringOperator phone number, if applicable
expire_onstringTimestamp when the 2FA code will expire in YYYY-MM-DD HH:MM:SS format
created_onstringTimestamp when the 2FA challenge was created in YYYY-MM-DD HH:MM:SS format

Response — 400 (Processing Error)

{
  "error_no": "E26",
  "mesg": "PROCESSING ERROR",
  "msg": "PROCESSING ERROR",
  "desc": "AUTHENTICATION FAILED"
}

Response fields

FieldTypeDescription
error_nostringE26 indicates an authentication failure
mesgstringError message
msgstringError message
descstringDetailed description of the error cause

Error code reference

error_code / error_noMeaningTypical cause
S00Success2FA challenge issued
E26Processing errorAuthentication credentials are invalid

Refund API

Issue a refund against a previously processed transaction.


Response — 200 OK (Approved)

{
  "error_no": "S00",
  "error_code": "00",
  "amount": "100.00",
  "tax": "",
  "customfee": "",
  "msg": "APPROVED",
  "txnid": "10333452",
  "desc": "APPROVAL TAS264",
  "additional_info": null,
  "epi": "2319916062",
  "channel": "VT",
  "created_date": "28/04/2026",
  "created_time": "06:08:27",
  "rrn": "611810500407"
}

Response fields

FieldTypeDescription
error_nostringS00 indicates a successful refund
error_codestringGateway error code. 00 = no error
amountstringRefunded amount in decimal format
taxstringTax amount, if applicable
customfeestringCustom fee, if applicable
msgstringResult (e.g. APPROVED)
txnidstringUnique transaction identifier for the refund
descstringDetailed description including the approval code
additional_infostring | nullReserved for additional metadata
epistringMerchant terminal / EPI identifier
channelstringTransaction channel
created_datestringRefund date in DD/MM/YYYY format
created_timestringRefund time in HH:MM:SS format
rrnstringRetrieval reference number for reconciliation

Response — 400 (Declined)

{
  "error_no": "E98",
  "error_code": "54",
  "success_url": false,
  "txnid": "10333440",
  "batch_no": 846,
  "switch_error_code": "V0548",
  "mesg": "Card expired",
  "desc": "Error code :54",
  "msg": "Card expired",
  "isFlexSendOrNot": "V0548"
}

Response fields

FieldTypeDescription
error_nostringE98 indicates a declined refund
error_codestringDecline code (e.g. 54 = card expired)
success_urlbooleanAlways false for declined transactions
txnidstringTransaction identifier assigned to the failed refund attempt
batch_nointegerSettlement batch identifier
switch_error_codestringSwitch-level error code
mesgstringError message
msgstringError message
descstringDetailed error description
isFlexSendOrNotstringFlex routing indicator; mirrors switch_error_code

Response — 400 (Processing Error)

{
  "error_no": "E26",
  "mesg": "PROCESSING ERROR",
  "msg": "PROCESSING ERROR",
  "desc": "AUTHENTICATION FAILED"
}

Response fields

FieldTypeDescription
error_nostringE26 indicates an authentication failure
mesgstringError message
msgstringError message
descstringDetailed description of the error cause

Error code reference

error_noMeaningTypical cause
S00ApprovedRefund processed successfully
E98DeclinedCard expired or original transaction cannot be refunded
E26Processing errorAuthentication credentials are invalid

Settlement API

Settle all open transactions in the current batch for a given terminal.


Response — 200 OK (Settled)

{
  "error_no": "S00",
  "error_code": "00",
  "amount": "88.87",
  "tax": "0.00",
  "customfee": "0.34",
  "msg": "APPROVED",
  "txnid": null,
  "desc": null,
  "additional_info": null,
  "epi": "2319916062",
  "channel": "VT",
  "created_date": "28/04/2026",
  "created_time": "06:09:35",
  "rrn": null
}

Response fields

FieldTypeDescription
error_nostringS00 indicates the settlement request was accepted
error_codestringGateway error code. 00 = no error
amountstringTotal settled amount in decimal format. "0.00" for an empty batch
taxstringTotal tax amount settled
customfeestringTotal custom fees settled
msgstringResult (e.g. APPROVED)
txnidstring | nullNot applicable for settlement; always null
descstring | nullNot applicable for settlement; always null
additional_infostring | null"Empty Batch" when no transactions were present; otherwise null
epistringMerchant terminal / EPI identifier
channelstringTransaction channel
created_datestringSettlement date in DD/MM/YYYY format
created_timestringSettlement time in HH:MM:SS format
rrnstring | nullNot applicable for settlement; always null

Response — 400 (Processing Error)

{
  "error_no": "E26",
  "mesg": "PROCESSING ERROR",
  "msg": "PROCESSING ERROR",
  "desc": "AUTHENTICATION FAILED"
}

Response fields

FieldTypeDescription
error_nostringE26 indicates an authentication failure
mesgstringError message
msgstringError message
descstringDetailed description of the error cause

Error code reference

error_noMeaningTypical cause
S00ApprovedBatch settled (or empty batch acknowledged)
E26Processing errorAuthentication credentials are invalid

Note: Both a successful settlement and an empty batch return error_no: "S00". Check additional_info for the value "Empty Batch" to distinguish the two cases.


List Subscription API

Retrieve a list of recurring subscriptions associated with a terminal.


Response — 200 OK

{
  "records": [
    {
      "subscription_id": "18262",
      "amount": "100",
      "custom_fee": "3.0000",
      "tax": "3.5000",
      "invoice_number": "12345678",
      "product_description": "Product 1",
      "shipping_customer_name": "John Doe",
      "shipping_street_no": "3636",
      "shipping_street_name": "33rd street",
      "shipping_unit": "206",
      "shipping_city": "ASTORIA",
      "shipping_state": "NY - New York",
      "shipping_zipcode": "11106",
      "billing_customerName": "John Doe",
      "billing_street_no": "3636",
      "billing_street_name": "33rd street",
      "billing_unit": "206",
      "billing_city": "ASTORIA",
      "billing_state": "NY - New York",
      "billing_zipcode": "11106",
      "subscription_day_of_the_month": "25",
      "subscription_starts_from": "2024-08-23",
      "subscription_valid_for": "6",
      "phone": "5478964785",
      "email": "jhon******.com",
      "no_of_failed_attempts": "0",
      "status": "1",
      "card_number": "XXXX1111",
      "total_no_of_payments": "6",
      "forfeit": "0",
      "forfeit_date": null
    }
  ],
  "error_no": "S00",
  "error_code": "00"
}

Response fields — top level

FieldTypeDescription
error_nostringS00 indicates a successful response
error_codestringGateway error code. 00 = no error
recordsarrayArray of subscription objects

records — subscription object fields

FieldTypeDescription
subscription_idstringUnique subscription identifier
amountstringRecurring charge amount in decimal format
custom_feestringCustom fee applied per billing cycle
taxstringTax amount applied per billing cycle
invoice_numberstringInvoice reference for the subscription
product_descriptionstringDescription of the subscribed product or service
shipping_customer_namestringName on the shipping address
shipping_street_nostringShipping street number
shipping_street_namestringShipping street name
shipping_unitstringShipping unit or apartment number
shipping_citystringShipping city
shipping_statestringShipping state (with label, e.g. NY - New York)
shipping_zipcodestringShipping ZIP code
billing_customerNamestringName on the billing address
billing_street_nostringBilling street number
billing_street_namestringBilling street name
billing_unitstringBilling unit or apartment number
billing_citystringBilling city
billing_statestringBilling state (with label, e.g. NY - New York)
billing_zipcodestringBilling ZIP code
subscription_day_of_the_monthstringDay of the month on which billing runs (e.g. 25)
subscription_starts_fromstringSubscription start date in YYYY-MM-DD format
subscription_valid_forstringNumber of billing cycles the subscription is valid for
phonestringCustomer phone number
emailstringCustomer email address (may be partially masked)
no_of_failed_attemptsstringNumber of failed billing attempts so far
statusstringSubscription status — 1 = active, 0 = inactive
card_numberstringMasked card number — last 4 digits shown (e.g. XXXX1111)
total_no_of_paymentsstringTotal number of billing cycles configured
forfeitstring1 if the subscription has been forfeited; 0 otherwise
forfeit_datestring | nullDate the subscription was forfeited; null if not forfeited

Response — 400 (Processing Error)

{
  "error_no": "E32",
  "mesg": "PROCESSING ERROR",
  "msg": "PROCESSING ERROR",
  "desc": "ACTIVE SEARCH FLAG IS MISSING"
}

Response fields

FieldTypeDescription
error_nostringE32 indicates a missing required filter parameter
mesgstringError message
msgstringError message
descstringDetailed description of the error cause

Error code reference

error_noMeaningTypical cause
S00SuccessSubscription records returned
E32Processing errorRequired active_search_flag parameter is missing from the request