{"title":"Manual Key Entry (MKE)","category":"default","creationDate":1775634840,"content":"<div class=\"additional-info-block output-inline\">\n<h5 class=\"article__heading additional-info-block__title\">Standalone terminals<\/h5><div class=\"additional-info-block__body\"><p>If the terminal is not integrated with a POS system, see <a href=\"\/point-of-sale\/standalone\/standalone-use#mke\">Use a standalone terminal<\/a> for instructions to enter the card number by hand.<\/p><\/div><\/div>\n\n<p>Manual key entry (MKE) involves manually typing the details from a shopper's card on the payment terminal. You can use this when the payment terminal fails to obtain the card details from the card's chip or magnetic stripe.<\/p>\n<p>It is important to note that there is no liability shift with MKE. This means you are fully liable for <a href=\"\/point-of-sale\/what-we-support\/payment-methods#pos-chargebacks\">fraud chargebacks<\/a>.<\/p>\n<h2>Requirements<\/h2>\n<p>Before you begin, take into account the following requirements and preparations.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Requirement<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Integration type<\/strong><\/td>\n<td style=\"text-align: left;\">A <a href=\"\/point-of-sale\/basic-tapi-integration\/\">Terminal API<\/a> integration with payment terminals.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Limitations<\/strong><\/td>\n<td style=\"text-align: left;\">Take into account the following limitations: <ul><li markdown=\"1\">Manual Key Entry (MKE) is not supported for virtual credit cards on the Japan Card Network (JCB). Use the <a href=\"\/point-of-sale\/mail-and-telephone-order-moto\">MOTO flow<\/a> instead.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Setup steps<\/strong><\/td>\n<td style=\"text-align: left;\">Before you begin, <ul><li markdown=\"1\">Contact our <a href=\"https:\/\/ca-test.adyen.com\/ca\/ca\/contactUs\/support.shtml?form=other\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Support Team<\/a> to enable Manual Key Entry.<\/li><li markdown=\"1\"><a href=\"#configure-mke\">Set a maximum transaction amount<\/a> that the terminal will allow for an MKE transaction.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>How it works<\/h2>\n<p>After MKE is enabled:<\/p>\n<ol>\n<li>When the payment terminal cannot read the card details, you <a href=\"#request\">start an MKE transaction<\/a> from your POS app.<\/li>\n<li>The terminal asks the shopper to manually enter their card number and expiry date.<\/li>\n<li>The terminal then asks the shopper to provide their signature on the display.<\/li>\n<li>The transaction continues.<\/li>\n<\/ol>\n<h2 id=\"configure-mke\">Set maximum MKE transaction amount<\/h2>\n<p>Because of the increased risk of chargebacks, you need to set a maximum transaction amount for MKE transactions.<\/p>\n<ol>\n<li>Log in to your <a href=\"https:\/\/ca-test.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a>.<\/li>\n<li>Optional. Select the merchant account or store where you want to configure settings.<\/li>\n<li>Go to <strong>In-person payments<\/strong> &gt; <strong>Terminal settings<\/strong> (or select a specific terminal) and select <strong>Payment features<\/strong>.<\/li>\n<li>Enter the <strong>MKE max amount<\/strong>.<\/li>\n<li>Select <strong>Save<\/strong>.<\/li>\n<\/ol>\n<h2 id=\"request\">Make an MKE payment<\/h2>\n<p>With a Terminal API integration, proceed as follows to force MKE as the <a href=\"\/get-started-with-adyen\/adyen-glossary\/#point-of-sale-entry-mode\">card entry mode<\/a> in your Terminal API payment request:<\/p>\n<ol>\n<li>\n<p><a href=\"\/point-of-sale\/basic-tapi-integration\/make-a-payment\">Make a payment request<\/a> including:<\/p>\n<ul>\n<li>\n<p>The  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/payment#request-PaymentTransaction-TransactionConditions\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TransactionConditions<\/a> object with:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: center;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>ForceEntryMode<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Use the value <span translate=\"no\"><strong>Keyed<\/strong><\/span>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"''\" :id=\"'manual-keyed-entry_1'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"JSON\",\"content\":\"{\\n    \\\"SaleToPOIRequest\\\":{\\n        \\\"MessageHeader\\\":{\\n            \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n            \\\"MessageClass\\\":\\\"Service\\\",\\n            \\\"MessageCategory\\\":\\\"Payment\\\",\\n            \\\"MessageType\\\":\\\"Request\\\",\\n            \\\"ServiceID\\\":\\\"037\\\",\\n            \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n            \\\"POIID\\\":\\\"P400Plus-275040702\\\"\\n        },\\n        \\\"PaymentRequest\\\":{\\n            \\\"SaleData\\\":{\\n                \\\"SaleToAcquirerData\\\":\\\"\\\",\\n                \\\"SaleTransactionID\\\":{\\n                    \\\"TransactionID\\\":\\\"8377PME_POS\\\",\\n                    \\\"TimeStamp\\\":\\\"2021-01-19T11:03:39.000Z\\\"\\n                }\\n            },\\n            \\\"PaymentTransaction\\\":{\\n                \\\"AmountsReq\\\":{\\n                    \\\"RequestedAmount\\\":17.50,\\n                    \\\"Currency\\\":\\\"EUR\\\"\\n                },\\n                \\\"TransactionConditions\\\":{\\n                    \\\"ForceEntryMode\\\":[\\n                        \\\"Keyed\\\"\\n                    ]\\n                }\\n            }\\n        }\\n    }\\n}\"},{\"language\":\"java\",\"tabTitle\":\"Java\",\"content\":\"String POIID = \\\"YOUR_TERMINAL_ID\\\";\\nString serviceID = \\\"YOUR_UNIQUE_ATTEMPT_ID\\\";\\nString saleID = \\\"YOUR_CASH_REGISTER_ID\\\";\\nString transactionID = \\\"YOUR_UNIQUE_TRANSACTION_ID\\\";\\n\\nSaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();\\nMessageHeader messageHeader = new MessageHeader();\\nmessageHeader.setPOIID(POIID);\\nmessageHeader.setMessageClass( MessageClassType.SERVICE );\\nmessageHeader.setMessageType( MessageType.REQUEST );\\nmessageHeader.setProtocolVersion(\\\"3.0\\\");\\nmessageHeader.setServiceID(serviceID);\\nmessageHeader.setSaleID(saleID);\\nmessageHeader.setMessageCategory( MessageCategoryType.PAYMENT );\\nsaleToPOIRequest.setMessageHeader(messageHeader);\\n\\nPaymentRequest paymentRequest = new PaymentRequest();\\nPaymentTransaction paymentTransaction = new PaymentTransaction();\\nAmountsReq amountsReq = new AmountsReq();\\namountsReq.setRequestedAmount( BigDecimal.valueOf(17.5) );\\namountsReq.setCurrency(\\\"EUR\\\");\\npaymentTransaction.setAmountsReq(amountsReq);\\n\\nTransactionConditions transactionConditions = new TransactionConditions();\\ntransactionConditions.getForceEntryMode().add( ForceEntryModeType.KEYED );\\npaymentTransaction.setTransactionConditions(transactionConditions);\\npaymentRequest.setPaymentTransaction(paymentTransaction);\\n\\nSaleData saleData = new SaleData();\\nsaleData.setSaleToAcquirerData(\\\"\\\");\\nTransactionIdentification saleTransactionID = new TransactionIdentification();\\nsaleTransactionID.setTransactionID(transactionID);\\nsaleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));\\nsaleData.setSaleTransactionID(saleTransactionID);\\npaymentRequest.setSaleData(saleData);\\nsaleToPOIRequest.setPaymentRequest(paymentRequest);\\nterminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>In the response, note that the <code>PaymentResult<\/code> includes:<\/p>\n<ul>\n<li><code>AuthenticationMethod<\/code>: <span translate=\"no\"><strong>SignatureCapture<\/strong><\/span>.<\/li>\n<li><code>CapturedSignature<\/code>: coordinate points of the signature drawn on the terminal display.<\/li>\n<li><code>PaymentInstrumentData.CardData<\/code>: indicates the <code>EntryMode<\/code> was <span translate=\"no\"><strong>Keyed<\/strong><\/span>.<\/li>\n<\/ul>\n<p>The <code>AdditionalResponse<\/code> also shows the <code>posEntryMode<\/code> was <span translate=\"no\"><strong>MKE<\/strong><\/span>.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'MKE response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"SaleToPOIResponse\\\": {\\n        \\\"MessageHeader\\\": {...},\\n        \\\"PaymentResponse\\\": {\\n            \\\"POIData\\\": {...}\\n            },\\n            \\\"PaymentReceipt\\\": [...],\\n            \\\"PaymentResult\\\": {\\n                \\\"AmountsResp\\\": {...},\\n                \\\"AuthenticationMethod\\\": [\\n                    \\\"SignatureCapture\\\"\\n                ],\\n                \\\"CapturedSignature\\\": {\\n                    \\\"AreaSize\\\": {\\n                        \\\"X\\\": \\\"100\\\",\\n                        \\\"Y\\\": \\\"FB\\\"\\n                    },\\n                    \\\"SignaturePoint\\\": [\\n                        {\\n                            \\\"X\\\": \\\"2D\\\",\\n                            \\\"Y\\\": \\\"FB\\\"\\n                        },\\n                        {\\n                            \\\"X\\\": \\\"32\\\",\\n                            \\\"Y\\\": \\\"FB\\\"\\n                        },\\n                        ...\\n                    ]\\n                },\\n                \\\"OnlineFlag\\\": true,\\n                \\\"PaymentAcquirerData\\\": {...},\\n                \\\"PaymentInstrumentData\\\": {\\n                    \\\"CardData\\\": {\\n                        \\\"CardCountryCode\\\": \\\"840\\\",\\n                        \\\"EntryMode\\\": [\\n                            \\\"Keyed\\\"\\n                        ],\\n                        \\\"MaskedPan\\\": \\\"415150 **** 0008\\\",\\n                        \\\"PaymentBrand\\\": \\\"visa\\\",\\n                        \\\"SensitiveCardData\\\": {\\n                            \\\"ExpiryDate\\\": \\\"0330\\\"\\n                        }\\n                    },\\n                    \\\"PaymentInstrumentType\\\": \\\"Card\\\"\\n                }\\n            },\\n            \\\"Response\\\": {\\n                \\\"AdditionalResponse\\\": \\\"...posEntryMode=MKE...\\\",\\n                \\\"Result\\\": \\\"Success\\\"\\n            },\\n            \\\"SaleData\\\": {\\n                \\\"SaleTransactionID\\\": {...}\\n            }\\n        }\\n    }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ol>\n<h2>Risk management<\/h2>\n<p>You can use our <a href=\"\/point-of-sale\/risk-management-pos\">risk management<\/a> system to minimize fraud by applying risk rules before processing a transaction. Based on your risk settings, every transaction gets a risk score ranging from 0 to 100 and is declined when the risk score reaches 100.<\/p>\n<h2>See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/point-of-sale\/what-we-support\/payment-methods#pos-chargebacks\"\n                        target=\"_self\"\n                        >\n                    Chargeback risk\n                <\/a><\/li><li><a href=\"\/point-of-sale\/risk-management-pos\"\n                        target=\"_self\"\n                        >\n                    Risk management for point of sale\n                <\/a><\/li><li><a href=\"\/point-of-sale\/standalone\/standalone-use#mke\"\n                        target=\"_self\"\n                        >\n                    MKE on standalone terminals\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/point-of-sale\/enter-payment-manually","articleFields":{"description":"Manually enter card details to make a payment.","id":"28871701","type":"page","_expandable":{"operations":""},"status":"current","last_edit_on":"08-04-2026 09:54","feedback_component":true,"filters_component":false,"decision_tree":"[]","page_id":"d6e0343a-e298-45ba-95a1-01d1ce0af510"},"algolia":{"url":"https:\/\/docs.adyen.com\/point-of-sale\/enter-payment-manually","title":"Manual Key Entry (MKE)","content":"\nStandalone terminalsIf the terminal is not integrated with a POS system, see Use a standalone terminal for instructions to enter the card number by hand.\n\nManual key entry (MKE) involves manually typing the details from a shopper's card on the payment terminal. You can use this when the payment terminal fails to obtain the card details from the card's chip or magnetic stripe.\nIt is important to note that there is no liability shift with MKE. This means you are fully liable for fraud chargebacks.\nRequirements\nBefore you begin, take into account the following requirements and preparations.\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nA Terminal API integration with payment terminals.\n\n\nLimitations\nTake into account the following limitations: Manual Key Entry (MKE) is not supported for virtual credit cards on the Japan Card Network (JCB). Use the MOTO flow instead.\n\n\nSetup steps\nBefore you begin, Contact our Support Team to enable Manual Key Entry.Set a maximum transaction amount that the terminal will allow for an MKE transaction.\n\n\n\nHow it works\nAfter MKE is enabled:\n\nWhen the payment terminal cannot read the card details, you start an MKE transaction from your POS app.\nThe terminal asks the shopper to manually enter their card number and expiry date.\nThe terminal then asks the shopper to provide their signature on the display.\nThe transaction continues.\n\nSet maximum MKE transaction amount\nBecause of the increased risk of chargebacks, you need to set a maximum transaction amount for MKE transactions.\n\nLog in to your Customer Area.\nOptional. Select the merchant account or store where you want to configure settings.\nGo to In-person payments &gt; Terminal settings (or select a specific terminal) and select Payment features.\nEnter the MKE max amount.\nSelect Save.\n\nMake an MKE payment\nWith a Terminal API integration, proceed as follows to force MKE as the card entry mode in your Terminal API payment request:\n\n\nMake a payment request including:\n\n\nThe  TransactionConditions object with:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nForceEntryMode\n\nUse the value Keyed.\n\n\n\n\n\n\n\n\n\n\nIn the response, note that the PaymentResult includes:\n\nAuthenticationMethod: SignatureCapture.\nCapturedSignature: coordinate points of the signature drawn on the terminal display.\nPaymentInstrumentData.CardData: indicates the EntryMode was Keyed.\n\nThe AdditionalResponse also shows the posEntryMode was MKE.\n\n\n\n\n\nRisk management\nYou can use our risk management system to minimize fraud by applying risk rules before processing a transaction. Based on your risk settings, every transaction gets a risk score ranging from 0 to 100 and is declined when the risk score reaches 100.\nSee also\n\n\n                    Chargeback risk\n                \n                    Risk management for point of sale\n                \n                    MKE on standalone terminals\n                \n","type":"page","locale":"en","boost":18,"hierarchy":{"lvl0":"Home","lvl1":"In-person payments","lvl2":"Manual Key Entry (MKE)"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/","lvl1":"https:\/\/docs.adyen.com\/point-of-sale","lvl2":"\/point-of-sale\/enter-payment-manually"},"levels":3,"category":"In-person payments","category_color":"green","tags":["Manual","Entry","(MKE)"]},"articleFiles":{"manual-keyed-entry_1.json":"<p alt=\"\">manual-keyed-entry_1.json<\/p>","manual-keyed-entry_1_response.json":"<p alt=\"\">manual-keyed-entry_1_response.json<\/p>"}}
