Search

Are you looking for test card numbers?

Would you like to contact support?

Point-of-sale icon

Enter payment manually (MKE)

Manually enter card details to make a payment.

Manual Keyed Entry (MKE) involves manually typing the details from a shopper's card into either the cash register or the terminal.
The maximum amount that the terminal will allow for a Manual Keyed Entry transaction is configurable in the Customer Area: go to Point of sale > Global properties or select a specific terminal, and on the Currencies & amounts tab enter the amount in the MKE max amount field.

Endpoint

The URL used to send Terminal API messages depends on your type of implementation. For more information on the architectures available, see the Terminal API Overview.

Request

For a list of PaymentRequest fields, see PaymentRequest fields.

To specify Manual Keyed Entry as the input method, include a EntryMode array in the PaymentInstrumentData and populate it with the value Keyed.

For example: 

{
   "SaleToPOIRequest":{
      "MessageHeader":{
         "POIID":"P400Plus-275040702",
         "MessageClass":"Service",
         "MessageType":"Request",
         "ProtocolVersion":"3.0",
         "ServiceID":"037",
         "SaleID":"POSSystemID12345",
         "MessageCategory":"Payment"
      },
      "PaymentRequest":{
         "PaymentTransaction":{
            "AmountsReq":{
               "RequestedAmount":10.00,
               "Currency":"EUR"
            },
            "TransactionConditions":{
               "ForceEntryMode":[
                  "Keyed"
               ]
            }
         },
         "SaleData":{
            "SaleToAcquirerData":"",
            "SaleTransactionID":{
               "TransactionID":"8377PME_POS",
               "TimeStamp":"2018-04-06T15:24:52+00:00"
            }
         }
      }
   }
}
String POIID = "YOUR_TERMINAL_ID";
String serviceID = "YOUR_UNIQUE_ATTEMPT_ID";
String saleID = "YOUR_CASH_REGISTER_ID";
String transactionID = "YOUR_UNIQUE_TRANSACTION_ID";

SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
MessageHeader messageHeader = new MessageHeader();
messageHeader.setPOIID(POIID);
messageHeader.setMessageClass( MessageClassType.SERVICE );
messageHeader.setMessageType( MessageType.REQUEST );
messageHeader.setProtocolVersion("3.0");
messageHeader.setServiceID(serviceID);
messageHeader.setSaleID(saleID);
messageHeader.setMessageCategory( MessageCategoryType.PAYMENT );
saleToPOIRequest.setMessageHeader(messageHeader);

PaymentRequest paymentRequest = new PaymentRequest();
PaymentTransaction paymentTransaction = new PaymentTransaction();
AmountsReq amountsReq = new AmountsReq();
amountsReq.setRequestedAmount( BigDecimal.valueOf(10.0) );
amountsReq.setCurrency("EUR");
paymentTransaction.setAmountsReq(amountsReq);

TransactionConditions transactionConditions = new TransactionConditions();
transactionConditions.getForceEntryMode().add( ForceEntryModeType.KEYED );
paymentTransaction.setTransactionConditions(transactionConditions);
paymentRequest.setPaymentTransaction(paymentTransaction);

SaleData saleData = new SaleData();
saleData.setSaleToAcquirerData("");
TransactionIdentification saleTransactionID = new TransactionIdentification();
saleTransactionID.setTransactionID(transactionID);
saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
saleData.setSaleTransactionID(saleTransactionID);
paymentRequest.setSaleData(saleData);
saleToPOIRequest.setPaymentRequest(paymentRequest);
terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);