Are you looking for test card numbers?

Would you like to contact support?

Point-of-sale icon

Cashback

Obtain a small amount of cash from a card with a purchase or without a purchase (cashout).

The cashback feature lets shoppers get cash in hand from their account, either with their purchase or without a purchase. Cashback without a purchase is often called cashout.

This feature is supported for:

  • eftpos debit cards in Australia
  • girocard debit cards in Germany
  • Mastercard
  • Visa

Work in progress: this feature is not supported yet on Android payment terminals.

Enable cashbacks

Contact our POS Support Team to enable cashbacks.

Issue a cashback

  1. Determine the following values that you'll need to pass in your payment request:

    • The cashback amount.
    • The sum of the cashback amount and the amount due for the shopper's purchases.

  2. Make a POST request to a Terminal API endpoint, specifying:

    • PaymentTransaction with the total and cashback amounts:

      Parameter Description
      AmountsReq.RequestedAmount The total amount to be paid by the shopper: the amount for the purchase plus the amount for the cashback.
      AmountsReq.CashBackAmount The cashback amount.

    The example below shows how you would make a request if a shopper purchased goods for 10 AUD, and wants to obtain a cashback of 2 AUD:

    {
      "SaleToPOIRequest": {
        "MessageHeader": {
          "ProtocolVersion": "3.0",
          "MessageClass": "Service",
          "MessageCategory": "Payment",
          "MessageType": "Request",
          "ServiceID": "0501160930",
          "SaleID": "POSSystemID12345",
          "POIID": "P400Plus-540004072"
        },
        "PaymentRequest": {
          "SaleData": {
            "SaleTransactionID": {
              "TransactionID": "3375",
              "TimeStamp": "2018-05-01T14:09:30+00:00"
            }
          },
          "PaymentTransaction": {
            "AmountsReq": {
              "Currency": "AUD",
              "RequestedAmount": 12.00,
              "CashBackAmount": 2.00
            }
          }
        }
      }
    }
    String serviceID = "YOUR_UNIQUE_ATTEMPT_ID";
    String saleID = "YOUR_CASH_REGISTER_ID";
    String POIID = "YOUR_TERMINAL_ID";
    String transactionID = "YOUR_UNIQUE_TRANSACTION_ID";
    
    SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
    MessageHeader messageHeader = new MessageHeader();
    messageHeader.setProtocolVersion("3.0");
    messageHeader.setMessageClass( MessageClassType.SERVICE );
    messageHeader.setMessageCategory( MessageCategoryType.PAYMENT );
    messageHeader.setMessageType( MessageType.REQUEST );
    messageHeader.setServiceID(serviceID);
    messageHeader.setSaleID(saleID);
    messageHeader.setPOIID(POIID);
    saleToPOIRequest.setMessageHeader(messageHeader);
    
    PaymentRequest paymentRequest = new PaymentRequest();
    SaleData saleData = new SaleData();
    TransactionIdentification saleTransactionID = new TransactionIdentification();
    saleTransactionID.setTransactionID(transactionID);
    saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
    saleData.setSaleTransactionID(saleTransactionID);
    paymentRequest.setSaleData(saleData);
    
    PaymentTransaction paymentTransaction = new PaymentTransaction();
    AmountsReq amountsReq = new AmountsReq();
    amountsReq.setCurrency("AUD");
    amountsReq.setRequestedAmount( BigDecimal.valueOf(12.00) );
    amountsReq.setCashBackAmount( BigDecimal.valueOf(2.00) );
    paymentTransaction.setAmountsReq(amountsReq);
    paymentRequest.setPaymentTransaction(paymentTransaction);
    saleToPOIRequest.setPaymentRequest(paymentRequest);
    terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);
  3. When you receive the payment response, check the Response.Result:

    • Success means the issuer authorised both the payment and the cashback.
      The amount in the PaymentResult.AmountsResp.CashBackAmount field is the amount that you need to pay to the shopper in cash.

    • Partial means the issuer authorised the payment but not the cashback.
    Payment response with cashback
    {
        "SaleToPOIResponse": {
            "PaymentResponse": {
                "POIData": {
                    "POITransactionID": {
                        "TimeStamp": "2018-05-01T14:09:30.000Z",
                        "TransactionID": "u6W7001525183770000.NC6HT9CRT65ZGN82"
                    }
                },
                "SaleData": {
                    "SaleTransactionID": {
                        "TimeStamp": "2018-05-01T14:09:30.000Z",
                        "TransactionID": "3375"
                    }
                },
                "PaymentResult": {
                    "AuthenticationMethod": [
                        "OnlinePIN"
                    ],
                    "PaymentAcquirerData": {...},
                    "PaymentInstrumentData": {
                        "CardData": {
                            "EntryMode": [
                                "MagStripe"
                            ],
                            "PaymentBrand": "eftpos_australia_sav",
                            "MaskedPan": "637204 **** 0025",
                            "SensitiveCardData": {
                                "ExpiryDate": "1220"
                            }
                        },
                        "PaymentInstrumentType": "Card"
                    },
                    "AmountsResp": {
                        "AuthorizedAmount": 12,
                        "CashBackAmount": 2,
                        "Currency": "AUD"
                    }
                },
                "Response": {
                    "Result": "Success",
                    "AdditionalResponse": "...cashBackAmountValue=200"
                }
            },
            "MessageHeader": {...}
        }
    }

See also