Recognise members at checkout

Look up the member from the card before the payment, give the discount, then pay with a single tap.

Read the card with a CardAcquisition request before the payment. If the card belongs to a member, the response has the member number. The Payment then reuses the card, so the customer taps only once.

Requirements

RequirementDescription
Set-upID lookup is turned on for your terminals. See Set up ID lookup
Before you startYour ECR is connected and logged in. See Connect your ECR
MessagesCardAcquisition · Payment · EnableService

The flow

sequenceDiagram
    participant P as Your POS
    participant T as Terminal
    participant L as Your loyalty program
    P->>T: CardAcquisition request (with amount)
    Note over T: Customer taps card, terminal looks it up
    T-->>P: CardAcquisition response
    alt Member found
        P->>L: Get benefits for the member number
        L-->>P: Discount or points
        P->>T: Payment with CardAcquisitionReference
    else No member
        P->>P: Offer sign-up or continue without
        P->>T: Payment, or EnableService (AbortTransaction)
    end

1. Read the card

Send CardAcquisition. Include TotalAmount and PaymentType = Normal when a payment follows. To only identify the customer, leave out the amount and PaymentType.

Example CardAcquisition request
{
  "SaleToPOIRequest": {
    "MessageHeader": {
      "ProtocolVersion": "3.1",
      "MessageClass": "Service",
      "MessageCategory": "CardAcquisition",
      "MessageType": "Request",
      "ServiceID": "2",
      "SaleID": "ECR123",
      "POIID": "AT12345"
    },
    "CardAcquisitionRequest": {
      "SaleData": {
        "SaleTransactionID": {
          "TransactionID": "12345678",
          "TimeStamp": "2026-10-13T13:30:00+02:00"
        }
      },
      "CardAcquisitionTransaction": {
        "TotalAmount": 125.00,
        "PaymentType": "Normal"
      }
    }
  }
}

2. Read the result

Check that Result is Success, then look for LoyaltyAccount:

What you getWhat it meansWhat the POS does
LoyaltyAccount with your programThe card belongs to a memberRead LoyaltyBrand and LoyaltyID, get the benefits
LoyaltyAccount with a partner's programThe customer is a member of a partner's program (cross loyalty)Apply the partner benefit, if you have one
Temporary identityThe customer signed up on the terminal but hasn't finished in your loyalty programRemind the customer to finish signing up
No LoyaltyAccountThe card isn't linked to a member. The customer may still be a member with another cardOffer sign-up, link the card, or continue without. See Enrol members at the terminal
Example CardAcquisition response with a member
{
  "SaleToPOIResponse": {
    "MessageHeader": {
      "ProtocolVersion": "3.1",
      "MessageClass": "Service",
      "MessageCategory": "CardAcquisition",
      "MessageType": "Response",
      "ServiceID": "2",
      "SaleID": "ECR123",
      "POIID": "AT12345"
    },
    "CardAcquisitionResponse": {
      "Response": {
        "Result": "Success",
        "AeResponseCode": "000"
      },
      "POIData": {
        "POITransactionID": {
          "TransactionID": "87654321",
          "TimeStamp": "2026-10-13T13:30:03+02:00"
        }
      },
      "PaymentInstrumentData": {
        "PaymentInstrumentType": "Card",
        "CardData": {
          "PaymentBrand": "MASTERCARD",
          "MaskedPAN": "540481******1761"
        }
      },
      "LoyaltyAccount": [
        {
          "LoyaltyBrand": "PARTNER_REWARDS",
          "LoyaltyAccountID": {
            "LoyaltyID": "MEMBER123456"
          }
        }
      ]
    }
  }
}

3. Pay with a single tap

  1. Get the benefits from your loyalty program and work out the final amount.
  2. Send Payment. Copy POITransactionID from the CardAcquisition response into CardAcquisitionReference.
  3. The amount must not be higher than in the CardAcquisition request, and PaymentType must be the same.
🚧

Don't pay after an abort

If the card acquisition was aborted before the card was read (STOP pressed, timeout or Abort from the ECR), the response has ErrorCondition = Aborted. Don't send the payment automatically: the cashier or customer wanted to stop.

4. Always finish or abort

If no Payment or BalanceInquiry follows, send EnableService with TransactionAction = AbortTransaction. Otherwise the terminal keeps the card session open.

Next


Offer sign-up when no member is found: Enrol members at the terminal.


Did this page help you?