.. _transaction_service: Transaction Service =================== The transaction service provides endpoints to activate, adjust, and inquire after cards. There is only one authentication method allowed for all endpoints: * :ref:`b2b_auth` The Paytronix system implements many different requests, each with a corresponding reply set of use cases: +---------------------------------------------------------------------+--------------------------------------------+ | Use Case | +---------------------------------------------------------------------+--------------------------------------------+ | Request | Reply | +=====================================================================+============================================+ | Activate loyalty card | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/activate.json` | :http:jsonentity:`TransactionReply` | +---------------------------------------------------------------------+--------------------------------------------+ | Sell gift card | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/activateAdd.json` (or its | :http:jsonentity:`AddRedeemReply` | | :http:post:`corresponding void `) | | +---------------------------------------------------------------------+--------------------------------------------+ | Add stored value to gift card | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/addRedeem.json` (or its | :http:jsonentity:`AddRedeemReply` | | :http:post:`corresponding void `) | | +---------------------------------------------------------------------+--------------------------------------------+ | Sell gift cards in bulk | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/bulkActivateAdd.json` | :http:jsonentity:`BulkAddReply` | +---------------------------------------------------------------------+--------------------------------------------+ | Pay with Card | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/addRedeem.json` (or its | :http:jsonentity:`AddRedeemReply` | | :http:post:`corresponding void `) | | +---------------------------------------------------------------------+--------------------------------------------+ | Redeem rewards | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/addRedeem.json` (or its | :http:jsonentity:`AddRedeemReply` | | :http:post:`corresponding void `) | | +---------------------------------------------------------------------+--------------------------------------------+ | Check balance(s) of a gift or loyalty card | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/balanceInquiry.json` | :http:jsonentity:`TransactionReply` | | | | +---------------------------------------------------------------------+--------------------------------------------+ | Retrieve transaction history for a gift or loyalty card | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/transactionHistory.json` | :http:jsonentity:`TransactionHistoryReply` | | | | +---------------------------------------------------------------------+--------------------------------------------+ | Look up accounts by phone number, guest name, etc. | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/accountQuery.json` | :http:jsonentity:`AccountQueryReply` | | | | +---------------------------------------------------------------------+--------------------------------------------+ | Look up customers checked in via mobile app | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/checkinsQuery.json` | :http:jsonentity:`CheckinsQueryReply` | | | | +---------------------------------------------------------------------+--------------------------------------------+ | Identify customer and support rewards based on current visit | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/identifyCustomer.json` | :http:jsonentity:`TransactionReply` | | | | +---------------------------------------------------------------------+--------------------------------------------+ | Exchange damaged, missing, or virtual card for a new card | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/exchange.json` | :http:jsonentity:`TransactionReply` | | | | +---------------------------------------------------------------------+--------------------------------------------+ | Fetch loyalty configuration including reward configuration | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/loadMap.json` | :http:jsonentity:`LoadMapReply` | | | | +---------------------------------------------------------------------+--------------------------------------------+ | Reverse transaction (due to error or user action) | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/reverse.json` | :http:jsonentity:`TransactionReply` | | | | +---------------------------------------------------------------------+--------------------------------------------+ | Status Ping | +---------------------------------------------------------------------+--------------------------------------------+ | :http:post:`transaction/status.json` | :http:jsonentity:`StatusReply` | | | | +---------------------------------------------------------------------+--------------------------------------------+ .. contents:: Topics Request and Reply Formatting ---------------------------- All requests must contain the header structure (:http:jsonentity:`detailed below `), and many use a common structure for card identification (also :http:jsonentity:`detailed below `). Request Objects ~~~~~~~~~~~~~~~ .. http:jsonentity:: HeaderInfo :jsonparam Integer merchantId: *(required)* Paytronix-assigned merchant ID to perform the operation in. :jsonparam String storeCode: *(required)* A short code to uniquely identify the store where this transaction occurred. :jsonparam String applicationId: *(optional)* Application sending the request. :jsonparam String applicationVersion: *(optional)* Version of application sending the request. :jsonparam String operatorId: *(required)* Identifier of the operator (cashier) who initiated the request. Use ``0`` if not known. :jsonparam String senderId: *(required)* Indicates the type of sender. Always use ``POS`` unless instructed otherwise by Paytronix. :jsonparam String programId: *(required)* Indicates the type of program being implemented, one of ``"LP"``, ``"SV"``, ``"CH"``, or ``"PX"``. The value to send in this field is determined by the use case, see the documentation for each request for what value to use. :jsonparam String terminalId: *(required)* Identifier of the POS terminal that initiated the request. If no terminal can be identified or not initiated from a terminal use ``"0"``. Maximum of 100 characters. :jsonparam String posTransactionId: *(optional)* Check identifier (check number). This field is required for :http:post:`transaction/bulkActivateAdd.json` requests. Maximum of 255 characters. :jsonparam String posTransactionDatetime: *(optional)* Date and time the check was opened. No particular date format is required; Paytronix does not try to parse this value. :jsonparam String sequenceNumber: *(optional)* Used in conjunction with ``posTransactionId`` and ``posTransactionDatetime`` to provide a unique identifier for a given transaction. :jsonparam String datetime: *(optional)* Date and time the request was initiated. Formatted as ISO8601 date and time: ``yyyy-mm-ddThh:mm:ss[.sss]`` :jsonparam String agentName: *(optional)* Paytronix specific Security Agent name. Do NOT pass this field unless instructed by Paytronix. Example: .. code:: javascript "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "PX" } .. http:jsonentity:: CardInfo A card info structure contains information common to many transactions. This information is specific to the gift or loyalty card being used in the transaction. This element provides a variety of ways to identify the guest's account. One of printedCardNumber, trackInfo, phoneNumber, barcode, appleNfcVasPayload, googleNfcVasPayload, or accountToken should be provided. ``cardRegCode`` is an optional parameter; if it is passed in the call then it will check the registration code against that card number and deny the transaction if the registration code does not match. :jsonparam String printedCardNumber: *(optional)* The number printed on the card. :jsonparam String trackInfo: *(optional)* The complete track two of the magnetic swipe data without the beginning and ending sentinel characters. :jsonparam String phoneNumber: *(optional)* Phone number uniquely identifying the guest. If the provided phone number is not unique, an error will be returned, and it is recommended that callers implement :http:post:`transaction/accountQuery.json` instead. :jsonparam String barcode: *(optional)* Barcode data for the card. :jsonparam String appleNfcVasPayload: *(optional)* Base64 encoded Apple NFC VAS payload obtained from Apple NFC-enabled passes. :jsonparam String googleNfcVasPayload: *(optional)* Base64 encoded Google NFC VAS payload obtained from Google Passes using SmartTap protocol. :jsonparam String accountToken: *(optional)* Paytronix generated token that uniques identifies a loyalty account. Contact Paytronix for more details. :jsonparam String cardRegCode: *(optional)* Send only if you wish to verify the registration code for the card. If null, then this param will be ignored. :jsonparam String identificationMethod: *(optional)* An optional field that indicates how the guest identified themselves when it cannot be infered from the request. This is only needed if the integrator has a printed card number that they obtained from some method other than the guest manually entering it (i.e. an account query). In this case the integrator would send a printedCardNumber but would send an identificationMethod of ``ACCOUNT_QUERY``. Possible values are: ``ACCOUNT_QUERY`` and ``LINKED_CC``. Manually entered card example: .. code:: javascript "cardInfo": { "printedCardNumber": "1234567432131792", "cardRegCode": 1234 } Swiped card example: .. code:: javascript "cardInfo": { "trackInfo": "1234567432131792=4711101792000", "cardRegCode": 1234 } .. http:jsonentity:: OrderMethod Valid order methods include: * ``in store`` * ``online web`` * ``online app`` * ``online app - android`` * ``online app - ios`` * ``call in`` * ``call center`` * ``drive through`` * ``kiosk`` * ``3rd party ordering`` * ``smart home device ordering`` * ``other`` .. http:jsonentity:: DeliveryMethod Valid delivery methods include: * ``dine in`` * ``pick up`` * ``in house delivery`` * ``curbside`` * ``drive through`` * ``3rd party delivery`` * ``other`` Endpoints --------- Activate a Card ~~~~~~~~~~~~~~~ .. http:post:: transaction/activate.json The activate request activates a loyalty card. The card is given the appropriate fixed amount of loyalty wallets upon activation, so there is no wallet-content quantity sent in the message. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send ``PX`` as the ``programId`` for this request. :jsonparam Object cardInfo: *(required)* Card information for the request, as :http:jsonentity:`covered above `. :jsonparam String promotionCode: *(optional)* Particular promotion to use. **Do not** send unless directed to do so by Paytronix. :jsonparam Boolean isCatering: *(optional)* ``true`` Indicates whether current request is associated with a catering order. :jsonparam String orderMethod: *(optional)* Order method associated with the current request. See :http:jsonentity:`above ` for possible values. :jsonparam Boolean autoActivateCard: *(optional)* Delivery method associated with the current request. See :http:jsonentity:`above ` for possible values. Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "PX" }, "cardInfo": { "printedCardNumber": "1234567432131792" } } Void a Card Activation ~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/voidActivate.json The void activate request returns a card to an inactive state if there have been no transactions between the activate and the void activate and is only appropriate for loyalty cards or certain special types of card. Use :http:post:`transaction/voidActivateAdd.json` to deactivate a gift card. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send ``PX`` as the ``programId`` for this request. :jsonparam Object cardInfo: *(required)* Card information for the request, as :http:jsonentity:`covered above `. :jsonparam String promotionCode: *(optional)* Particular promotion to use. **Do not** send unless directed to do so by Paytronix. :jsonparam Long pxTransactionId: *(optional)* ``pxTransactionId`` for the corresponding non-void activate being voided. :jsonparam Boolean isCatering: *(optional)* ``true`` Indicates whether current request is associated with a catering order. :jsonparam String orderMethod: *(optional)* Order method associated with the current request. See :http:jsonentity:`above ` for possible values. :jsonparam Boolean autoActivateCard: *(optional)* Delivery method associated with the current request. See :http:jsonentity:`above ` for possible values. Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "PX" }, "cardInfo": { "printedCardNumber": "1234567432131792" } } Check Balance of a Card ~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/balanceInquiry.json A BalanceInquiry is used to request current balance information for a specified card in the Paytronix system. This is designed to provide information about both the stored value balance and some selected loyalty program information, if available, so the reply deals with all possible balance information. For pure stored value cards, only the stored value balance will be used. The balance inquiry request contains just the common elements. Aside from the request element tags themselves, the request is identical to an activate request. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send ``PX`` as the ``programId`` for this request. :jsonparam Object cardInfo: *(required)* Card information for the request, as :http:jsonentity:`covered above `. :jsonparam String promotionCode: *(optional)* Particular promotion to use. **Do not** send unless directed to do so by Paytronix. Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "PX" }, "cardInfo": { "printedCardNumber": "1234567432131792" } } Identify a Customer Visit ~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/identifyCustomer.json Identify Customer is almost identical to a Balance Inquiry except that it causes the PXS to run the rules engine. This is sometimes useful in that it makes it possible to modify a card's wallet balances prior to any add/redeem transaction being performed, such as incrementing a cardholder's visits wallet at the beginning of a transaction or granting rewards for the current visit. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send ``PX`` as the ``programId`` for this request. :jsonparam Object cardInfo: *(required)* Card information for the request, as :http:jsonentity:`covered above `. :jsonparam String promotionCode: *(optional)* Particular promotion to use. **Do not** send unless directed to do so by Paytronix. :jsonparam Boolean autoActivateCard: *(optional)* ``true`` if the card should automatically be activated if it is not already active :jsonparam Boolean isCatering: *(optional)* ``true`` Indicates whether current request is associated with a catering order. :jsonparam String orderMethod: *(optional)* Order method associated with the current request. See :http:jsonentity:`above ` for possible values. :jsonparam Boolean autoActivateCard: *(optional)* Delivery method associated with the current request. See :http:jsonentity:`above ` for possible values. Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "PX" }, "cardInfo": { "printedCardNumber": "1234567432131792" } } Add or Redeem Value From a Card Account ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/addRedeem.json The add redeem request is used to add value to a card or to redeem value from it, depending on the contents of the request. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. The ``programId`` should be set to ``SV`` for adding or redeeming value from a gift card, and ``LP`` for point accrual or reward redemption. :jsonparam Object cardInfo: *(required)* Card information for the request, as :http:jsonentity:`covered above `. :jsonparam String promotionCode: *(optional)* Particular promotion to use. **Do not** send unless directed to do so by Paytronix. :jsonparam List[Object] addWalletContents: *(required)* Amounts to add to wallets, such as appetizers bought or gift card stored value dollars. :jsonparam List[Object] redeemWalletContents: *(required)* Amounts to redeem from wallets, such as free appetizers bought or gift card stored value dollars. :jsonparam Boolean autoActivateCard: *(optional)* ``true`` if the card should automatically be activated if it is not already active. :jsonparam Boolean isCatering: *(optional)* ``true`` Indicates whether current request is associated with a catering order. :jsonparam String orderMethod: *(optional)* Order method associated with the current request. See :http:jsonentity:`above ` for possible values. :jsonparam Boolean autoActivateCard: *(optional)* Delivery method associated with the current request. See :http:jsonentity:`above ` for possible values. Example: This example adds $25.00 to the gift card ``1234567432131792``. .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "SV" }, "cardInfo": { "printedCardNumber": "1234567432131792" }, "addWalletContents": [ { "walletCode": 0, "quantity": "25.00" } ], "redeemWalletContents": [] } This example redeems $14.25 in reward dollars (wallet code ``1`` in this case) from card ``1234567432131792``. Note that the quantity is a positive amount. Also note that the programId is ``LP`` to denote a loyalty redemption. It is deducted from the card because it is a redeem quantity, while an add quantity would add to the card's value. .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "LP" }, "cardInfo": { "printedCardNumber": "1234567432131792" }, "addWalletContents": [], "redeemWalletContents": [ { "walletCode": 1, "quantity": "14.25" } ] } .. http:jsonentity:WalletContent A wallet content structure represents an addition or redemption to a single wallet of an account. A wallet is a single balance, such as gift dollars, dollars spent, or free bagels. Each wallet is identified by a code, which is an integer assigned by Paytronix on a per-server, per-merchant basis. .. warning:: Wallet codes should *never* be hard-coded, as they will change between merchants or between the Paytronix test and production environment. :jsonparam String quantity: *(required)* Amount to add or redeem, e.g. ``"1.50"`` :jsonparam Integer walletCode: *(required)* Wallet to add or redeem from Example: .. code:: javascript "addWalletContents": [ { "walletCode": 5, "quantity": "25.00" }, { "walletCode": 6, "quantity": "1.50" } ] Void an Addition or Redemption of Value From a Card Account ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/voidAddRedeem.json The void add/redeem request applies a "void add value" or "void redeem value" action to a gift card or a "void accrue points" or "void redeem rewards" action to a loyalty card. The void add/redeem request should be used to credit an account or to reverse a previous add or redeem. See also the :http:post:`transaction/reverse.json` endpoint which allows reversal of transactions in their entirety. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. The ``programId`` should be set to ``SV`` for voiding from a gift card, and ``LP`` for voiding point accruals or reward redemptions on a loyalty card. :jsonparam Object cardInfo: *(required)* Card information for the request, as :http:jsonentity:`covered above `. :jsonparam String promotionCode: *(optional)* Particular promotion to use. **Do not** send unless directed to do so by Paytronix. :jsonparam List[Object] addWalletContents: *(required)* Amounts to void add (subtract) to wallets, such as appetizers bought or gift card stored value dollars. See :http:jsonentity:`WalletContent`. :jsonparam List[Object] redeemWalletContents: *(required)* Amounts to void redeem (add) from wallets, such as free appetizers bought or gift card stored value dollars. See :http:jsonentity:`WalletContent`. :jsonparam String pxTransactionId: *(optional)* ``pxTransactionId`` for the corresponding non-void add/redeem being voided. :jsonparam Boolean isCatering: *(optional)* ``true`` Indicates whether current request is associated with a catering order. :jsonparam String orderMethod: *(optional)* Order method associated with the current request. See :http:jsonentity:`above ` for possible values. :jsonparam Boolean autoActivateCard: *(optional)* Delivery method associated with the current request. See :http:jsonentity:`above ` for possible values. Example: This example applies a "void add" of $25.00 to the gift card ``1234567432131792``. As a result the balance of the card will decrease by $25.00 if sufficient funds are available. .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "SV" }, "cardInfo": { "printedCardNumber": "1234567432131792" }, "addWalletContents": [ { "walletCode": 0, "quantity": "25.00" } ] } This example applies a "void redeem" of $14.25 reward dollars from card ``1234567432131792``. As a result the balance of the card will increase by $14.25 if the balance limit of the card is not reached. .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "LP" }, "cardInfo": { "printedCardNumber": "1234567432131792" }, "redeemWalletContents": [ { "walletCode": 1, "quantity": "14.25" } ] } Activate a Stored Value (Gift) Card ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/activateAdd.json The activate add request activates a card and adds value to it as one action. This request is used to process a Sell Gift Card action at the point of sale terminal. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send ``SV`` as the ``programId``. :jsonparam Object cardInfo: *(required)* Card information for the request, as :http:jsonentity:`covered above `. :jsonparam String promotionCode: *(optional)* Particular promotion to use. **Do not** send unless directed to do so by Paytronix. :jsonparam Sequence addWalletContents: *(required)* Stored value amount to add. See :http:jsonentity:`WalletContent`. :jsonparam Boolean isCatering: *(optional)* ``true`` Indicates whether current request is associated with a catering order. :jsonparam String orderMethod: *(optional)* Order method associated with the current request. See :http:jsonentity:`above ` for possible values. :jsonparam Boolean autoActivateCard: *(optional)* Delivery method associated with the current request. See :http:jsonentity:`above ` for possible values. Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "SV" }, "cardInfo": { "printedCardNumber": "1234567432131792" }, "addWalletContents": [ { "walletCode": 0, "quantity": "55.00" } ] } Void a Stored Value (Gift) Card Activation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/voidActivateAdd.json The void activate add request removes value and returns a card to an inactive state if there have been no transactions between the activate add and the void activate add. The stored value balance of the card must be $0.00 after removing value; the request will be denied otherwise. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send ``SV`` as the ``programId``. :jsonparam Object cardInfo: *(required)* Card information for the request, as :http:jsonentity:`covered above `. :jsonparam String promotionCode: *(optional)* Particular promotion to use. **Do not** send unless directed to do so by Paytronix. :jsonparam List[Object] addWalletContents: *(required)* Amount to void add (subtract) from stored value. The amount should match the face value of the card. See :http:jsonentity:`WalletContent`. :jsonparam Long pxTransactionId: *(optional)* ``pxTransactionId`` for the corresponding non-void activate add being voided. :jsonparam Boolean isCatering: *(optional)* ``true`` Indicates whether current request is associated with a catering order. :jsonparam String orderMethod: *(optional)* Order method associated with the current request. See :http:jsonentity:`above ` for possible values. :jsonparam Boolean autoActivateCard: *(optional)* Delivery method associated with the current request. See :http:jsonentity:`above ` for possible values. Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "SV" }, "cardInfo": { "printedCardNumber": "1234567432131792" }, "addWalletContents": [ { "walletCode": 0, "quantity": "55.00" } ] } Activate a Batch of Stored Value Cards ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/bulkActivateAdd.json The bulk activate add request operates like a batch of :http:post:`transaction/activateAdd.json` requests, activating and adding stored value to a series of cards. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send ``SV`` as the ``programId``. :jsonparam String promotionCode: *(optional)* Particular promotion to use. **Do not** send unless directed to do so by Paytronix. :jsonparam Object firstCardInfo: *(required)* First card in range to activate. See :http:jsonentity:`CardInfo`. :jsonparam Object lastCardInfo: *(required)* Last card in range to activate. See :http:jsonentity:`CardInfo`. :jsonparam Integer numberOfCards: *(required)* Number of cards expected to be in the range :jsonparam String discountPercent: (real number) *(optional)* Discount percentage to apply, if allowed by the server :jsonparam List[Object] addWalletContents: *(required)* Stored value amount to add to each card. See :http:jsonentity:`WalletContent`. Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "SV" }, "firstCardInfo": { "printedCardNumber": "1234567432131792" }, "lastCardInfo": { "printedCardNumber": "1234567432140031" }, "numberOfCards": 10, "addWalletContents": [ { "walletCode": 0, "quantity": "55.00" } ] } .. http:post:: transaction/reverseBulkActivateAdd.json The bulk activate add request operates like a batch of :http:post:`transaction/voidActivateAdd.json` requests, deactivating a series of cards. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send ``SV`` as the ``programId``. :jsonparam String promotionCode: *(optional)* Particular promotion to use. **Do not** send unless directed to do so by Paytronix. :jsonparam Object firstCardInfo: *(required)* First card in range to activate. See :http:jsonentity:`CardInfo`. :jsonparam Object lastCardInfo: *(required)* Last card in range to activate. See :http:jsonentity:`CardInfo`. :jsonparam Integer numberOfCards: *(required)* Number of cards expected to be in the range :jsonparam String discountPercent: (real number) *(optional)* Discount percentage to apply, if allowed by the server :jsonparam List[Object] addWalletContents: *(required)* Stored value amount to add to each card. See :http:jsonentity:`WalletContent`. Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "SV" }, "firstCardInfo": { "printedCardNumber": "1234567432131792" }, "lastCardInfo": { "printedCardNumber": "1234567432140031" }, "numberOfCards": 10, "addWalletContents": [ { "walletCode": 0, "quantity": "55.00" } ] } Look Up Customer Accounts Using Phone Number or Other Fields ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/accountQuery.json Account Query (also called Account Lookup) can be used if a guest shows up at a store without a card and the user is registered. It provides card numbers, customer names and other information pertaining to customers that match the query criteria. One can query the Paytronix server for a customer by customer First Name, Last Name, Phone Number, Postal Code, Email or a combination of those. See :http:jsonentity:`AccountQuery` for more explanation on the possible query fields. An implementation of Account Query is expected to display a screen where a server can enter the query criteria. Only the fields allowed by the merchant should be displayed (e.g. if the merchant decides not to allow query by Email, that field must not be displayed). After one or more cards are found, the customer may be given the ability to use the card for certain kinds of activity as agreed with the merchant. The implementation should not need the server to write down the card number to use it later. In fact it must not display the card number at all (instead it should display the masked card number). Instead, when another activity, say Balance Inquiry, is about to be performed, the server must be given the ability to use the queried card number instead of swiping or typing a card. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send ``PX`` as the ``programId``. :jsonparam Integer pageSize: *(required)* Maximum number of accounts to return :jsonparam List[Object] accountQueries: *(required)* Search parameters for query. See :http:jsonentity:`AccountQuery` Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "SV" }, "pageSize": 50, "accountQueries": [ { "name": "firstname", "value": "RO" }, { "name": "phonenum", "value": "7892221111" }, { "name": "lastname", "value": "LES" }, { "name": "postalcode", "value": "02115" }, { "name": "email", "value": "ROB@AOL.COM" } ] } .. http:jsonentity:: AccountQuery :jsonparam String name: *(required)* The field to search. See below for valid fields. :jsonparam String value: *(required)* The value to search for in the field. The valid query fields are listed below. Keep in mind that multiple fields can be sent in the query. It is also possible to query with partial information for all fields except ``cardnum`` and ``phonenum``. For all partial information queries, at least two characters are required. * ``cardnum`` * ``username`` * ``firstname`` * ``lastname`` * ``postalcode`` * ``phonenum`` * ``email`` Look Up Customer Account Checked in With a Mobile Application ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/checkinsQuery.json Checkins Query can be used in text or mobile app enabled programs to find guests that have checked in to the store recently via text message or mobile app. It provides Card numbers, customer names and other information pertaining to customers that have done so. After one or more cards are found, the customer may be given the ability to use the card for certain kinds of activity as agreed with the merchant. The implementation should not need the server to write down the card number to use it later. In fact it must not display the card number at all (instead it should display the masked card number). Instead, when another activity, say Balance Inquiry, is about to be performed, the server must be given the ability to use the queried card number instead of swiping or typing a card. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send ``PX`` as the ``programId``. :jsonparam Integer pageSize: *(required)* Maximum number of accounts to return :jsonparam String shortCardNumber: *(optional)* If supplied, look for a particular short card number supplied by the guest Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "PX" }, "pageSize": 50 } Query Transaction History of a Card ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/transactionHistory.json A transaction history request can be sent to request recent transaction details for an account, similar to what a guest would see on the Paytronix guest web site. The request itself has only one field specific to the transaction history request which is the date to start getting transaction history from. The range of dates covered will be from this start date until the current day. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send PX as the ``programId`` for this request. :jsonparam Object cardInfo: *(required)* Card information for the request, as :http:jsonentity:`covered above `. :jsonparam String promotionCode: *(optional)* Particular promotion to use. **Do not** send unless directed to do so by Paytronix. :jsonparam String dateStart: *(optional)* Start date to start retrieving transactions. Format: ``yyyy-mm-dd`` :jsonparam Integer maxNumberOfResults: *(optional)* Limits the results returned to the most recent X transactions. :jsonparam Boolean limitToBalanceAffectingTransactions: *(optional)* If true only transaction that resulting in a change in wallet balances will be returned. Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "SV" }, "cardInfo": { "trackInfo": "1234567432131792=4711101792000" } } Exchange a Physical or Virtual Card with Another ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/exchange.json The exchange request is used to exchange one card number for another, typically when the original plastic card is damaged or lost. It can also be used for reverse enrollment, customer acquisition, and mobile app programs where a virtual card number is generated by the system and the guest would like to switch to a physical card in the store. The old (exchanged) card becomes unusable, and the new card must be inactive for the exchange to be successful. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send PX as the ``programId`` for this request. :jsonparam Object cardInfo: *(required)* Card information for the request, as :http:jsonentity:`covered above `. :jsonparam String promotionCode: *(optional)* Particular promotion to use. **Do not** send unless directed to do so by Paytronix. :jsonparam Object newCardInfo: *(required)* Card to exchange to. See :http:jsonentity:`CardInfo`. Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "SV" }, "cardInfo": { "printedCardNumber": "1234567432131792" }, "newCardInfo": { "trackInfo": "1234567432132985=4711101985000" } } Retrieve Program Configuration Objects ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/loadMap.json The load map request is used to query the PXC for information on what wallets, activation items and tender items which are relevant to this location. This information can be used to determine what POS items are being tracked, what rewards might be available (in the event that a redemption is being attempted without first running a balance inquiry) and what sorts of items will need to be inserted into the check as a result of various actions (i.e. gift card activation or paying with a card). :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send PX as the ``programId`` for this request. Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "SV" } } Reverse a Previously Submitted Transaction ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/reverse.json A reverse request is used to reverse a previous transaction. Only transactions that happened in the last seven days can be reversed. The transaction to reverse can be specified in the message by one of the following combinations of request fields: * The ``pxTransactionId`` from the original transaction reply * The ``pxAuthCode`` from the original transaction reply and the card info used for the original transaction * The ``posTransactionId`` and LP-code for the original transaction request type (see table below). :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send PX as the ``programId`` for this request. :jsonparam Long pxTransactionId: *(optional)* ``pxTransactionId`` from reply to transaction to reverse :jsonparam String pxAuthCode: *(optional)* ``pxAuthCode`` from reply to transaction to reverse :jsonparam String previousPosTransactionId: *(optional)* ``posTransactionId`` from transaction to reverse :jsonparam String previousSequenceNumber: *(optional)* ``sequenceNumber`` from transaction to reverse :jsonparam String previousPosTransactionDatetime: *(optional)* ``posTransactionDatetime`` from transaction to reverse Reverse by ``pxTransactionId`` example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "SV" }, "pxTransactionId": 123456789 } Reverse by ``previousPosTransactionId``, ``previousSequenceNumber``, and ``previousPosTransactionDatetime`` example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "PARTNER", "programId": "SV" }, "previousPosTransactionId": "000673000001", "previousSequenceNumber": "12345", "previousPosTransactionDatetime": "2004-06-01 13:04" } Adjust a Wallet Directly for Administrative Purposes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. http:post:: transaction/adminAdjust.json Performs an admin adjust to a wallet with an optional expiration date. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Only the Merchant ID is required within the headerInfo Object. :jsonparam Integer merchantId: *(required)* Paytronix-assigned merchant ID to perform the operation in. :jsonparam String storeCode: *(required)* A short code to uniquely identify the store where this transaction should occur. :jsonparam String posTransactionId: *(required)* Usually the "Check Number" sent from the POS :jsonparam Integer operatorId: *(required)* Identifier of the operator (cashier) who initiated the request. Use ``0`` if not known. :jsonparam String printedCardNumber: *(required)* Printed card number associated with the account to get information about :jsonparam Integer walletCode: *(required)* Wallet to add or redeem from. :jsonparam String quantity: (real number) *(required)* Amount to add or redeem :jsonparam Object expiration: *(optional)* The expiration date for this adjustment. Only used when the wallet balance is being adjusted upwards. See :http:jsonentity:`Expiration` :jsonparam String activityType: *(required)* The transaction type. One of ``ADD``, ``VOID_ADD``, ``REDEEM``, ``VOID_REDEEM``. :jsonparam tring comment: *(optional)* An optional comment to be associated with the transaction. :jsonparam Boolean isCommentGuestVisible: *(optional)* Whether the comment should be visible by the guest on the transaction history page. Defaults to ``true`` if not provided. Example: .. code:: javascript { "headerInfo": { "merchantId":10101010 }, "merchantId": 10101010, "storeCode": "1", "posTransactionId": "123", "operatorId": "0", "printedCardNumber": "1010101090000467", "walletCode": 5, "quantity": "1", "expiration": { "date": "2020-01-02", "type": "absolute" }, "activityType": "ADD", "comment": "This is an admin adjust" } .. http:jsonentity:: Expiration :jsonparam String type: *(required)* One of ``relative`` or ``absolute``. :jsonparam String date: *(optional)* The date on which the wallet amount should expire formatted as ``yyyy-mm-dd``. Send only if ``type`` is ``absolute``. :jsonparam nteger numberOfDays: *(optional)* The number of days until the wallet amount will expire. Must be positive. Send only if ``type `` is ``relative``. Example of a relative expiration date: .. code:: javascript { "expiration": { "numberOfDays": 5, "type": "relative" } } Example of an absolute expiration date: .. code:: javascript { "expiration": { "date": "2020-01-02", "type": "absolute" } } .. http:response:: success :jsonparam String result: *(required)* ``success`` For example: .. code:: javascript { "result": "success", } .. http:response:: failure :jsonparam String result: *(required)* ``failure`` :jsonparam String errorCode: *(required)* The error code of the failure. :jsonparam String errorMessage: *(required)* The (human readable) error message of the failure. Status Ping ~~~~~~~~~~~ .. http:post:: transaction/status.json The status ping request is used to notify Paytronix the connectivity status of the Point Of Sale terminals. POS should wait until a number of minutes equal to the value of the ``nextStatusInterval`` response field has passed before sending the next status request to the PXS. :jsonparam Object headerInfo: *(required)* Header information for the request, as :http:jsonentity:`covered above `. Send PX as the ``programId`` for this request. Please include ``agentName`` field provided by Paytronix and send `POS` as ``senderId``. :jsonparam String versionInfo: *(optional)* POS Software Version. Example: .. code:: javascript { "headerInfo": { "merchantId": 10101010, "storeCode": "corp", "operatorId": "1234", "terminalId": "1023", "posTransactionId": "999999", "datetime": "2004-06-01T13:10:01.001", "posTransactionDatetime": "2004-06-01 13:10", "senderId": "POS", "programId": "PX", "agentName": "POS 1" }, "versionInfo": "1.3.1" } Error Codes ^^^^^^^^^^^ The following are the possible codes and messages that can be returned by this resource. There are other system-level errors which may be returned which may not be documented here. The caller of the endpoint can use the returned error message value to display to the end user or, if different wording is desired, can provide their own mapping of code to message. +--------------------------------------------------+-----------------------------------------------+ | Code | Message | +==================================================+===============================================+ | ``transaction.server_error`` | Internal server error | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.store_not_found`` | Store not found | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.store_closed`` | Store closed | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.invalid_merchant_id`` | Invalid merchant ID | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.invalid_wallet_code`` | Invalid wallet code | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.wallet_not_attached`` | Invalid wallet code for this card template | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.past_expiration_date`` | Expiration date is in the past | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.negative_days`` | Negative number of days | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.expiration_invalid_wallet_type`` | Expiration not allowed for this wallet type | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.expiration_invalid_activity_type`` | Expiration not allowed for this activity type | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.non_positive_quantity`` | Quantity must be positive | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.invalid_card`` | Invalid printed card number | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.invalid_account`` | Invalid account | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.invalid_integration`` | Invalid integration | +--------------------------------------------------+-----------------------------------------------+ | ``transaction.transaction_denied`` | Variable depending on the denial reason | +--------------------------------------------------+-----------------------------------------------+ Reply Objects ------------- .. http:jsonentity:: TransactionReply :jsonparam String result: *(required)* Contains one of ``authorizedSuccess``, ``authorizedVariantSuccess``, ``denied``, ``userDataError``, or ``failure`` indicating the disposition of the transaction. Consult the following sections for each type. .. _transaction_reply_authorized: When ``result`` is ``authorizedSuccess``: :jsonparam String result: *(required)* ``authorizedSuccess`` :jsonparam Integer responseCode: *(required)* ``200``, ``202``, ``210``, ``220`` or ``250`` :jsonparam String responseMessage: *(required)* ``Authorized`` :jsonparam String posTransactionId: *(optional)* echo of ``posTransctionId`` field from request :jsonparam String enrollDate: *(required)* Enrollment date, e.g. ``"2013-08-01"`` :jsonparam String printedCardNumber: *(required)* printed card number, e.g. ``"1010101090000317"`` :jsonparam String maskedCardNumber: *(required)* masked card number, e.g. ``"000317"`` :jsonparam Boolean isRegistered: *(optional)* Indicate whether the guest is registered :jsonparam String tierName: *(optional)* Name of tier, e.g. ``"Unregistered"`` :jsonparam String tierCode: *(optional)* Code to identify the tier, e.g. ``0`` :jsonparam Integer cardTemplateCode: *(required)* Code to uniquely identify the card template :jsonparam String cardTemplateName: *(required)* Name of the card template, e.g. ``"Loyalty Card"`` :jsonparam String customerName: *(optional)* Name of customer. This could be an empty string if the information is not available :jsonparam String pxAuthCode: *(optional)* 6-digit random value, e.g. ``"683290"`` :jsonparam Long pxTransactionId: *(required)* Unique 64-bit signed integer value to identify this transaction, this can be used to reverse a previous transaction. E.g. ``148240240`` :jsonparam Decimal svCurrentBalance: *(optional)* Balance of Stored Value wallet, e.g. ``"25.00"`` :jsonparam Decimal svTransactionAmount: *(optional)* Transaction amount of Stored Value wallet, e.g. ``"25.00"`` :jsonparam Decimal svPreviousBalance: *(optional)* Previous balance of Stored Value wallet, e.g. ``"0.00"`` :jsonparam Boolean svriFlag: *(optional)* Indicates whether Stored Value balance information is present in reply :jsonparam String expirationDate: *(optional)* If the card is a gift card, this field displays the card's expiration date in the form YYYY-MM-DD. :jsonparam Object activationItem: *(optional)* What POS item to insert into the check for this activation. Only present for activations. See :http:jsonentity:`ActivationItem` :jsonparam List[Object] balancePoints: *(optional)* Point balances that cannot be directly redeemed. See :http:jsonentity:`BalancePoint`. :jsonparam Sequence rewardPoints: *(optional)* Point balances that can be redeemed. See :http:jsonentity:`BalancePoint`. :jsonparam String anonymousAccountToken: *(optional)* Unique String value to identify the guest. .. _transaction_reply_authorized_variant: When ``result`` is ``authorizedVariantSuccess"``: This reply will have similar fields as in ``authorizedSuccess`` except for: :jsonparam String result: *(required)* ``authorizedVariantSuccess`` :jsonparam Integer responseCode: *(required)* 201 or 251 :jsonparam String responseMessage: *(required)* ``Authorized Variant`` When ``result`` is ``denied"``: This reply will have similar fields as in ``authorizedSuccess`` except for: :jsonparam String result: *(required)* ``denied`` :jsonparam Integer responseCode: *(required)* a value between 300 and 399(inclusive) :jsonparam String responseMessage: *(required)* various error message based on ``responseCode`` :jsonparam String errorCode: *(required)* See :ref:`transaction_service_error_codes` :jsonparam String errorMessage: *(required)* See :ref:`transaction_service_error_codes` When ``result`` is ``userDataError"``: This reply will have similar fields as in ``authorizedSuccess`` except for: :jsonparam String result: *(required)* ``userDataError`` :jsonparam Integer responseCode: *(required)* a value between 400 and 499(inclusive) :jsonparam String responseMessage: *(required)* various error message based on ``responseCode`` :jsonparam String errorCode: *(required)* See :ref:`transaction_service_error_codes` :jsonparam String errorMessage: *(required)* See :ref:`transaction_service_error_codes` When ``result`` is ``failure"``: This reply indicates a system error or failure :jsonparam String result: *(required)* ``failure`` :jsonparam Integer responseCode: *(required)* a value between 600 and 699(inclusive) :jsonparam String responseMessage: *(required)* various error message based on ``responseCode`` :jsonparam String errorCode: *(required)* See :ref:`transaction_service_error_codes` :jsonparam String errorMessage: *(required)* See :ref:`transaction_service_error_codes` .. http:jsonentity:: AddRedeemReply ``AddRedeemReply`` augments :http:jsonentity:`TransactionReply` with additional reply fields in the following circumstances. Take care to consult the ``quantity`` field as the value may have be different than requested if ``result`` is ``authorizedVariantSuccess``. When ``result`` is ``authorizedSuccess`` or ``authorizedVariantSuccess``: :jsonparam List[Object] addWalletContents: *(optional)* See :http:jsonentity:`AddWalletContent` for format of this object. :jsonparam List[Object] redeemWalletContents: *(optional)* See :http:jsonentity:`RedeemWalletContent` for format of this object. :jsonparam List[Object] changedWalletContents: *(optional)* See :http:jsonentity:`ChangedWalletContent` for format of this object. .. http:jsonentity:: BulkAddReply ``BulkAddReply`` augments :http:jsonentity:`TransactionReply` and :http:jsonentity:`AddRedeemReply` with additional reply fields: :jsonparam List[Object] bulkMaskedCardNumbers: *(required)* contains the masked card numbers of the activated cards :jsonparam Decimal discountAmount: *(optional)* the discount amount per card e.g. ``"25.00"`` :jsonparam Integer discountPercent: *(optional)* the discount percentage used to calculate the ``discountAmount`` based on purchase price :jsonparam Integer numberOfCards: *(required)* the number of cards activated .. http:jsonentity:: CheckinsQueryReply A check-ins query reply contains information on the guests that are checked into a particular store. :jsonparam Integer pageRecordCount: The number of check-ins that were found and returned. :jsonparam Integer totalRecordCount: The total number of check-ins that were found, this may differ from the number of rows returned. :jsonparam List[CheckinData] rows: *(required)* The check-ins data. See :http:jsonentity:`CheckinData` for format of this object. .. http:jsonentity:: StatusReply :jsonparam Integer nextStatusInterval: *(required)* number of minutes to wait before sending the next status request to the PXS. .. http:jsonentity:: LoadMapReply A load map reply contains information on what wallets, activation items and tender items which are relevant to this location. This information can be used to determine what POS items are being tracked, what rewards might be available (in the event that a redemption is being attempted without first running a balance inquiry) and what sorts of items will need to be inserted into the check as a result of various actions (i.e. gift card activation or paying with a card). :jsonparam String requestEvent: *(required)* LP-code of original request. Usually ignored. :jsonparam String posTransactionId: *(optional)* posTransactionId from request. Usually ignored. :jsonparam Long pxTransactionId: *(required)* Paytronix-assigned unique 64-bit signed integer identifying the transaction. :jsonparam String datetime: *(required)* Date/time stamp when Paytronix processed the transaction. Do not parse this field, as the format may change. :jsonparam String pxAuthCode: *(optional)* For authorized transactions, a Paytronix-assigned code for the authorization. :jsonparam Integer responseCode: *(required)* Code indicating whether the transaction was authorized, denied, or had some other error. See :ref:`transaction_service_error_codes`. :jsonparam String responseMessage: *(required)* Text description of the status of the transaction, e.g. ``Authorized`` for ``responseCode`` of ``200`` :jsonparam String senderId: *(required)* Sender of the reply. Usually PXS but will be PXC for stored and forwarded transactions. Usually ignored. :jsonparam List[Object] activationItems: *(required)* Items which might be returned in the ``activationItem`` field of [[#Transaction Reply]] for activation requests. See :http:jsonentity:`NamedItem`. :jsonparam List[Object] tenderItems: *(required)* Ignore this field. See :http:jsonentity:`NamedItem`. :jsonparam List[Object] wallets: *(required)* Wallets in the merchant's program. See :http:jsonentity:`LoadMapWallet` :jsonparam List[Object] properties: *(required)* Additional properties associated with distinguished wallets. See :http:jsonentity:`LoadMapWalletProperty` .. http:jsonentity:: LoadMapWallet The load map wallet structure represents a single wallet in the load map. It contains all of the information necessary to define how the POS should behave in regard to said wallet, such as the name of the wallet, its type (i.e. add, redeem, internal data tracking, stored value), product category information, item number of the discount which should be inserted, the type of reward it represents (i.e. fixed amount, open amount), etc. :jsonparam String walletName: *(required)* Name of the wallet. :jsonparam Integer walletCode: *(required)* Identifying code for the wallet. :jsonparam Integer walletType: *(required)* Type of wallet, see below. :jsonparam Integer walletContents: *(required)* Contents of wallet, see below. :jsonparam Integer productType: *(required)* Type of POS product associated with wallet, see below. :jsonparam String productId: *(required)* Identifier for product(s). See ``productType`` for how to interpret this field. :jsonparam String productDefinition: *(optional)* POS-specific definition for POSes or applications where ``productType`` and ``productId`` are not flexible enough. :jsonparam Integer discountObjectNumber: *(optional)* POS discount number to apply when redeeming this wallet as a reward. :jsonparam Integer rewardType: *(optional)* Type of reward. See :http:jsonentity:`RedeemWalletContent` :jsonparam Integer valueType: *(optional)* Value type of reward. See :http:jsonentity:`RedeemWalletContent` :jsonparam String valueAmount: *(optional)* Percentage off, dollar off, or particular POS discount as defined by ``valueFlag``. See :http:jsonentity:`RedeemWalletContent` :jsonparam Integer scale: *(required)* Number of digits after the decimal place for balances of this wallet. :jsonparam List[Object] walletTags: *(required)* Tags for this wallet. See :http:jsonentity:`WalletTag` :jsonparam Boolean autoRedeem: *(required)* Derives from the applyAutomatically flag in discount reply objects. Used by Check service integrations that respect this flag. :jsonparam Decimal minimumSpendAmount: *(optional)* - The minimum amount to be spent for the reward to be applied. :jsonparam Integer checkServiceDiscountObjectNumber: *(optional)* - The check service specific discount number to apply when redeeming this wallet as a reward. :jsonparam Integer checkServiceItemType: *(optional)* - The check service specific product type associated with the wallet. :jsonparam String checkServiceProductInfo: *(optional)* - The check service specific product item id associated with the wallet. :jsonparam Integer checkServiceRewardType: *(optional)* - The check service specific reward type. :jsonparam String checkServiceValue: *(optional)* - The check service specific value amount. :jsonparam Integer checkServiceValueType: *(optional)* - The check service specific value type. :jsonparam List[Object] walletComboConditions: *(optional)* - The check service specific combo conditions to determine whether the reward can be applied. See :http:jsonentity:`LoadMapWalletRewardCondition` :jsonparam Object walletBogoConfiguration: *(optional)* - The check service specific BOGO (Buy One Get One) configuration to determine whether the reward can be applied. See :http:jsonentity:`LoadMapWalletBogoConfiguration` :jsonparam Integer posItemId: *(required)* - Identifier for product(s). See productType for how to interpret this field. ``walletType`` values: +-------+----------------+ | Value | Type of wallet | +-------+----------------+ | ``1`` | Internal | +-------+----------------+ | ``2`` | Add | +-------+----------------+ | ``3`` | Redeem | +-------+----------------+ | ``4`` | Stored Value | +-------+----------------+ | ``5`` | Charge | +-------+----------------+ | ``6`` | Member Reward | +-------+----------------+ ``walletContents`` values: +-------+------------------------+ | Value | Type of wallet content | +=======+========================+ | ``1`` | Products | +-------+------------------------+ | ``2`` | Internal points | +-------+------------------------+ | ``3`` | Rewards | +-------+------------------------+ | ``4`` | Products and rewards | +-------+------------------------+ ``productType`` values: +--------+-------------------+---------------------------------------------+ | Value | Name | Meaning of ``productId`` | +========+===================+=============================================+ | ``1`` | All | ignored | +--------+-------------------+---------------------------------------------+ | ``2`` | Major category | refers to a major category in the POS | +--------+-------------------+---------------------------------------------+ | ``3`` | Minor category | refers to a minor category in the POS | +--------+-------------------+---------------------------------------------+ | ``4`` | Menu item S | refers to a particular menu item in the POS | +--------+-------------------+---------------------------------------------+ | ``5`` | Stored value | ignored | +--------+-------------------+---------------------------------------------+ | ``6`` | Charge | ignored | +--------+-------------------+---------------------------------------------+ | ``7`` | Revenue center | refers to a revenue center in the POS | +--------+-------------------+---------------------------------------------+ | ``8`` | Points | ignored | +--------+-------------------+---------------------------------------------+ | ``9`` | Check details | ``1`` means check subtotal | | | | ``2`` means seat count | +--------+-------------------+---------------------------------------------+ | ``10`` | Sales itemizer | refers to a sales itemizer in the POS | +--------+-------------------+---------------------------------------------+ | ``11`` | Wallet code | refers to a wallet | +--------+-------------------+---------------------------------------------+ | ``12`` | Tender | | +--------+-------------------+---------------------------------------------+ | ``13`` | Major modifier | | +--------+-------------------+---------------------------------------------+ | ``14`` | Minor modifier | | +--------+-------------------+---------------------------------------------+ | ``15`` | Item modifier | | +--------+-------------------+---------------------------------------------+ | ``16`` | Promotional Group | | +--------+-------------------+---------------------------------------------+ .. http:jsonentity:: WalletTag A tag representing additional information regarding a given wallet, to be interpreted by the client as desired :jsonparam String label: *(required)* Human-readable label for this wallet tag :jsonparam Integer code: *(required)* Numeric code for this wallet tag :jsonparam String data: *(required)* String data for this wallet tag .. http:jsonentity:: LoadMapWalletProperty This structure represents a special property of a wallet, which the POS may want to handle specially in regard to adding or redeeming from the wallet. It consists of a ``propertyEnumId`` and the associated wallet code. :jsonparam Integer propertyEnumId: *(required)* Which property is associated with the wallet. See table below. :jsonparam Integer walletCode: *(required)* Wallet code being assigned a property. ``propertyEnumId`` values: +-------+-----------------------------+ | Value | Meaning | +=======+=============================+ | 13100 | Visit Tracking | +-------+-----------------------------+ | 13101 | Dollars Spent | +-------+-----------------------------+ | 13102 | Visible Point Changes | +-------+-----------------------------+ | 13103 | Stored Value | +-------+-----------------------------+ | 13104 | Charge | +-------+-----------------------------+ | 13105 | Manager Dollars | +-------+-----------------------------+ | 13106 | Stored Value Discount | +-------+-----------------------------+ | 13107 | Stored Value Redemption Fee | +-------+-----------------------------+ .. http:jsonentity:: NamedItem Named items represent special POS items. A good example of this is ``activationItem`` (sent with :http:jsonentity:`TransactionReply` and :http:jsonentity:`LoadMapReply`), which is used to indicate what item should be inserted into the check when a given card is activated. :jsonparam Integer itemType: *(required)* Type of item in the POS. See ``productType`` field of :http:jsonentity:`LoadMapWallet`. :jsonparam String itemId: *(required)* Identifier of item in the POS. See ``productId`` field of :http:jsonentity:`LoadMapWallet`. :jsonparam String quantity (real number): *(required)* Quantity of item. Usually ``1``. :jsonparam String name: *(required)* Name of item .. http:jsonentity:: ActivationItem :jsonparam String itemId: *(required)* POS Item ID.See :http:jsonentity:`LoadMapWallet` above for how to interpret this value. :jsonparam Integer itemType: *(required)* POS Item Type. See :http:jsonentity:`LoadMapWallet` above for a table of values. :jsonparam String itemName: *(required)* Name of item :jsonparam Decimal quantity: *(required)* Quantity .. http:jsonentity:: AddWalletContent :jsonparam Integer walletCode: *(required)* Wallet code :jsonparam Decimal quantity: *(required)* Quantity .. http:jsonentity:: ChangedWalletContent :jsonparam String name: *(required)* wallet label followed by `` Earned`` or `` Used`` :jsonparam Integer operationType: *(required)* operation type, see below :jsonparam Integer walletCode: *(required)* Wallet code :jsonparam Decimal quantity: *(required)* Quantity ``operationType`` values: +-------+-------------------+ | Value | Type of operation | +=======+===================+ | ``1`` | Add | +-------+-------------------+ | ``2`` | Subtract | +-------+-------------------+ | ``3`` | Void add | +-------+-------------------+ | ``4`` | Void subtract | +-------+-------------------+ .. http:jsonentity:: RedeemWalletContent :jsonparam Integer rewardType: *(required)* Reward type :jsonparam String discountItemId: *(required)* POS discount item ID :jsonparam Integer walletCode: *(required)* Wallet code :jsonparam Decimal quantity: *(required)* Quantity .. http:jsonentity:: BalancePoint :jsonparam String pointName: *(required)* Name of point wallet :jsonparam Integer pointType: *(required)* See ``walletType`` values in the section on :http:jsonentity:`LoadMapWallet` :jsonparam Decimal points: *(required)* point balance :jsonparam Integer walletCode: *(required)* Wallet code :jsonparam List[Object] expirationDates: *(required)* See :http:jsonentity:`ExpirationDate` .. http:jsonentity:: ExpirationDate :jsonparam Decimal quantity: *(required)* point amount to be expired :jsonparam String date: *(required)* Expiration date .. http:jsonentity:: UserField :jsonparam Integer fieldEnumId: *(required)* PX defined ID value for user field type :jsonparam String value: *(required)* value of user field .. http:jsonentity:: CheckinData :jsonparam String nameOrPhone: *(optional)* The name or phone number :jsonparam String integration: *(optional)* The integration ID :jsonparam String relativeTime: *(optional)* The length of time elapsed since the check-in time :jsonparam String shortCardNumber: *(optional)* Short card number :jsonparam String checkNumber: *(optional)* Check number :jsonparam String printedCardNumber: *(optional)* Printed card number .. http:jsonentity:: LoadMapWalletBogoConfiguration :jsonparam Integer walletBogoOrder: *(required)* The wallet BOGO order, either 1 (MAX) or 2 (MIN), to discount the high priced or lowest priced item respectively :jsonparam List[Object] walletBogoConditions: *(required)* The wallet bogo conditions. See :http:jsonentity:`LoadMapWalletRewardCondition` .. http:jsonentity:: LoadMapWalletRewardCondition :jsonparam String posItemId: *(required)* The POS item id :jsonparam Integer productType: *(required)* The product type :jsonparam String quantity: *(required)* The item quantity .. _transaction_service_error_codes: Error Codes ----------- The following are the possible codes and messages that can be returned by the Transaction Service. There are other system-level errors which may be returned which may not be documented here. The caller of the endpoint can use the returned error message value to display to the end user or, if different wording is desired, can provide their own mapping of code to message. +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | Code | Message | +===============================================================+====================================================================================+ | ``transaction.denied`` | Denied | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.denied_retry`` | Denied: Retry | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.unactivated`` | Unactivated | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.exceeded_max_limit`` | Denied: Exceeded max limit | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.exceeded_min_limit`` | Denied: Exceeded min limit | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.no_value_in_account`` | Denied: No value in account | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.insufficient_value_in_account`` | Denied: Insufficient value in account. Requested amount=%s Available amount=%s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.insufficient_credit_in_account`` | Denied: Insufficient credit in account | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.charge_not_positive`` | Charge redeem must be positive amount, found %s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.stored_val_redeem_not_positive`` | Stored value redeem must be positive amount, found %s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.amount_not_positive`` | Add amount must be positive, found %s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.use_wallet_request_not_present`` | Denied: No wallet for request | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.void_wallet_request_not_present`` | Denied: No wallet for void request | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.add_wallet_request_not_present`` | Denied: No POS request, PXS tried to reply | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.could_not_save_wallets`` | Denied: Could not save wallets | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.no_rule_to_apply`` | Denied: No rule to apply | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.no_authorized_amounts`` | Denied: No authorized amounts | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.error_making_rule_active`` | Error making rule active | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.no_transaction_to_sync`` | Denied: No transaction to sync | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.user_data_error`` | User/data error | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_number_checksum`` | Card number checksum error %s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.null_card_number`` | Null card number | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_auth_code_generation`` | Invalid auth-code generation | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_promotion_code`` | Invalid promotion code | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_merchant_id`` | Invalid merchant ID %i | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_rule_`` | Invalid rule %i | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_card_number`` | Invalid card number %s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_card_account`` | Invalid account for card %s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_has_been_exchanged`` | Card %s has been exchanged | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.no_loyalty_tier`` | Merchant ID %i has no loyalty tier | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.account_not_active`` | Account %i not active | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_not_enabled_for_loyalty`` | Card %s not enabled for loyalty rules | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_not_activated_for_loyalty`` | Card %s is not active | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.rule_not_active`` | Rule %i not active | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.merchant_not_active`` | Merchant with ID %i not active | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.account_status_cannot_activate`` | Account status %i cannot activate | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_rule_request_type`` | Invalid rule request type %s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_status_cannot_become`` | Card status %s cannot become %s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_status_cannot_be`` | Card %s cannot be %s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_is_already_deactivated`` | Card %s is already deactivated | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.no_club_membership_to_remove`` | No club membership to remove | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_exchanged_and_cannot_reset`` | Card %s has been exchanged and cannot be reset | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.store_code_does_not_exist_for_merchant`` | Store code %s does not exist for merchant ID %i | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_not_in_required_state`` | Card in %s state, %s state required | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_not_active_could_be_auto_activated`` | Card Not Active | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_already_active`` | Card Already Active | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_not_suspended`` | Card %s is suspended | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_not_terminated`` | Card %s is terminated | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_not_active_or_suspended`` | Card %s is not active or suspended | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.account_has_no_regular`` | Card has no Regular | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_not_active`` | Card %s cannot be deactivated | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_already_has_rule`` | Card %s already has rule %s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.card_already_has_loyalty`` | Card %s already activated for loyalty | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_card_block_number`` | Invalid card block number %s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.error_issuing_cards`` | Error issuing cards | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.missing_product_for_wallet`` | No product_id for add wallet %i | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.missing_reward_for_wallet`` | No reward_id for redeem wallet %i | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_wallet_spec`` | Invalid wallet spec %i | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.cards_not_from_same_template`` | Cards not from same template | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.missing_template_for_card`` | No template_id for card | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_card_validation_code`` | Level 1 Check, Invalid Card | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_card_swipe_required`` | Level 2 Check, Please Swipe the Card | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_card_level_2_check`` | Level 2 Check, Invalid Card | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_card_level_3_check`` | Level 3 Check, Invalid Card | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.cannot_deactivate_sv_amount`` | Card %s contains SV Dollars, cannot be Deactivated | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_activation`` | No activation filter for this type of card | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.invalid_card_mask_length`` | Invalid value for card_mask_length, length: %i | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.enum_label_not_found`` | Enum Label not found for %s | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.bulk_multi_template`` | Card range spans more than one card template | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.bulk_multi_batch`` | Card range spans more than one card batch | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.no_activation_product`` | No activation product for this type of card | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.no_cards_in_range`` | No cards in specified range | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.no_task_found`` | No task found or task already completed | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.tvr_already_accepted`` | This transaction variance has already been accepted | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.cannot_download_config_file`` | Cannot download config files | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.cannot_activate_open_amount_sv_without_amount`` | Cannot activate open amount SV card with $0.00. | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.cannot_activate_fixed_amount_sv`` | Must activate this fixed amount SV card with proper amount. | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.manual_authorization`` | Manual authorization needed | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.system_error`` | System error | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.pos_error`` | POS Error | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.pxc_error`` | PXC Error | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.pxs_error`` | PXS Error | +---------------------------------------------------------------+------------------------------------------------------------------------------------+ | ``transaction.db_error`` | DB Error number %i | +---------------------------------------------------------------+------------------------------------------------------------------------------------+