{"title":"Make Pay-at-table payments","category":"default","creationDate":1572969060,"content":"<p>To accept payments from your customers at a table, in a hotel room, or curbside, you can initiate payments from a terminal while keeping the terminal integrated with your POS system.<\/p>\n<p>The terminal initiated payment flow offers:<\/p>\n<ul>\n<li>Equal and unequal split payments.<\/li>\n<li>Support for all <a href=\"\/point-of-sale\/what-we-support\/payment-methods\">payment methods<\/a> that you added to your account, as well as cash.<\/li>\n<li>Easy combination with <a href=\"\/point-of-sale\/tipping\">tipping<\/a> options.<br \/>\nCustomers can enter a tip amount on the terminal with every split payment. If you let your staff authenticate when they start the payment from the terminal, you can then log the tip with that staff member to avoid adjusting tips later.<\/li>\n<\/ul>\n<p>For Pay at table you need to use <a href=\"\/point-of-sale\/what-we-support\/select-your-terminals#portable\">portable payment terminals<\/a>. These terminals have an integrated printer and a Wi-Fi connection, and can automatically switch to a cellular connection if the Wi-Fi connection drops.<\/p>\n<h2>Requirements<\/h2>\n<p>Before you begin, take into account the following requirements, limitations, 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\/design-your-integration\/terminal-api\">Terminal API<\/a> integration with payment terminals.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Hardware<\/strong><\/td>\n<td style=\"text-align: left;\">The payment terminal must have an integrated printer and support both Wi-Fi and cellular connections.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Limitations<\/strong><\/td>\n<td style=\"text-align: left;\">Authentication by swiping the employee card is not supported on Android payment terminals.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"pay-at-x-flow\">How it works<\/h2>\n<p>After you have <a href=\"#enable-sale-wake-up\">configured Pay at table<\/a>, the flow is as follows:<\/p>\n<ol>\n<li>\n<p>On the terminal, your staff selects a button to <a href=\"#information-for-your-staff\">start Pay at table<\/a>, and authenticates by entering their reference number or swiping their employee card.<\/p>\n<\/li>\n<li>\n<p>The terminal sends a <a href=\"#salewakeup-event-notification\">SaleWakeUp event notification<\/a> to the POS system. The notification informs the POS system that the terminal is waiting to receive a payment request.<\/p>\n<\/li>\n<li>\n<p>Based on the employee's authentication, you decide which bill to send a payment request for. If there are multiple bills, you send an <code>InputRequest<\/code> to the terminal so that your staff can provide more details. For example, ask for a table number, a choice from a list of bills, or a ride number. See <a href=\"#collect-input\">1. Retrieve the sale transaction<\/a>.<\/p>\n<\/li>\n<li>\n<p>You send a <a href=\"\/point-of-sale\/shopper-engagement\/print-data\">\n  <code>PrintRequest<\/code>\n<\/a> to print the bill using the terminal. This is optional. It depends on your business needs whether to do this and when.<\/p>\n<\/li>\n<li>\n<p>You send a <a href=\"#make-a-payment\">\n  <code>PaymentRequest<\/code>\n<\/a> from the POS system to the terminal. See <a href=\"#make-a-payment\">2. Make a payment<\/a>.<\/p>\n<\/li>\n<li>\n<p>The terminal shows the amount due, <strong>Split check<\/strong>, and options to:<\/p>\n<ul>\n<li>Split the bill &lt;<strong>equally<\/strong>. The terminal will ask for the number of splits.<\/li>\n<li>\n<p>Split the bill <strong>unequally<\/strong>. The terminal will ask for the amount of the first split. This is also the option to choose if a single customer is paying the whole bill.<\/p>\n<!-- list separator -->\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Then the terminal shows the split amount and options to:<\/p>\n<ul>\n<li>Pay by <strong>card<\/strong>. Your staff hands the terminal to the customer so that they can pay their split and, if configured, respond to the tipping options on the terminal.<\/li>\n<li>Pay in <strong>cash<\/strong>. Your staff receives the cash and selects a button on the terminal display to confirm.<\/li>\n<\/ul>\n<div class=\"sc-notice info\"><div>\n<p>If you do not want to accept cash payments, we can configure skipping the prompt for cash or card.<\/p>\n<\/div><\/div>\n<\/li>\n<li>\n<p>After the split payment is approved and sent, the terminal prints a receipt.<\/p>\n<\/li>\n<li>\n<p>You process the split payment response, to keep track of the amount that has been paid. See <a href=\"#receive-result\">3. Process the payment result<\/a>.<\/p>\n<\/li>\n<li>\n<p>If there is a remaining amount due, you send the <a href=\"#next-payment-request\">next <code>PaymentRequest<\/code><\/a> with the new <code>RequestedAmount<\/code> and <code>PaidAmount<\/code>.<br \/>\nThe terminal then shows options to:<\/p>\n<ul>\n<li><strong>Pay later<\/strong>. This is used for a group of customers who want to pay their share of the bill at different times. The terminal shows <strong>Cancelled<\/strong>. When someone else from the group is ready to pay, your staff needs to start Pay at table again.<\/li>\n<li><strong>Pay remainder<\/strong>. With equal splits, the terminal calculates the amount of the next split payment based on the number of splits. With unequal splits, the terminal shows the remaining amount and your staff enters the amount of the next split payment.<\/li>\n<\/ul>\n<p>This continues until the full amount has been paid.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"enable-sale-wake-up\">Configure Pay at table<\/h2>\n<p>To enable Pay-at-table:<\/p>\n<ol>\n<li>\n<p><a href=\"\/point-of-sale\/design-your-integration\/notifications\/event-notifications\">Set up event notifications<\/a>. This is necessary to let the terminal send a <span translate=\"no\"><strong>SaleWakeUp<\/strong><\/span> event notification to the POS system. This notification informs the POS system that the terminal is waiting to receive a payment request.<\/p>\n<\/li>\n<li>\n<p>Configure settings in your Customer Area:<\/p>\n<ol>\n<li>\n<p>In your <a href=\"https:\/\/ca-test.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a>, go to <strong>In-person payments<\/strong> &gt; <strong>Payment devices<\/strong>, and select the <strong>Terminals<\/strong> tab. <\/p>\n<\/li>\n<li>\n<p>Select your terminal from the list of terminals.<\/p>\n<\/li>\n<li>\n<p>On the <strong>Settings<\/strong> page, go to <strong>Integrations<\/strong> &gt; <strong>Notification button<\/strong>.<\/p>\n<\/li>\n<li>\n<p>Turn on the <strong>Enable notification button<\/strong> toggle switch.<\/p>\n<\/li>\n<li>\n<p>Show or hide the notification button. If the notification button is hidden, your staff can start a transaction by selecting the <strong>Confirm<\/strong> key <strong><img alt=\"\" src=\"\/images\/1\/9\/d\/b\/6\/19db69a93d641f6391db65a1563de3ade9ce55bb-confirm2x.png\" \/><\/strong> on the keypad.<\/p>\n<\/li>\n<li>\n<p>Set the following values:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Field<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">Notification category<\/td>\n<td style=\"text-align: left;\">Select <strong>Sale wake up<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Title<\/td>\n<td style=\"text-align: left;\">Enter the text to show on the button that starts the flow from the terminal. For example, <em>Pay@tTable<\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Details<\/td>\n<td style=\"text-align: left;\">Enter the text to ask your staff to enter their reference number or swipe their employee card. <p>The reference or card number can be a maximum of 10 digits.<\/p><p>If you leave this field empty, the terminal sends the <span translate=\"no\"><strong>SaleWakeUp<\/strong><\/span> event notification immediately when the button is selected, and the notification does not include the reference or card number.<\/p><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>\n<p>Select <strong>Save<\/strong>.<\/p>\n<!-- list separator -->\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>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:<\/p>\n<ul>\n<li>Set your staff's authentication method: Entering a reference number, or swiping an employee card.<\/li>\n<li>If you do not want to accept cash payments, skip prompting for cash or card.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Add logic to your POS system so that it is able to handle the <a href=\"#salewakeup-event-notification\"><code>SaleWakeUp<\/code> event notification<\/a>.<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"salewakeup-event-notification\">SaleWakeUp event notification<\/h3>\n<p>The <a href=\"\/point-of-sale\/design-your-integration\/notifications\/event-notifications#sale-wake-up\">\n  <code>SaleWakeUp<\/code>\n<\/a> event notifications that the terminal sends to the POS system include:<\/p>\n<ul>\n<li><code>EventToNotify<\/code>: <span translate=\"no\"><strong>SaleWakeUp<\/strong><\/span><\/li>\n<li><code>EventDetails<\/code>: The employee's reference number or employee card number. For example, <span translate=\"no\"><strong>reference_id=0123456789<\/strong><\/span>. You can use this to retrieve the associated bill, or to log sales and tips by staff member.<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example SaleWakeUp notification'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"SaleToPOIRequest\\\":{\\n      \\\"EventNotification\\\":{\\n         \\\"EventDetails\\\":\\\"reference_id=0123456789\\\",\\n         \\\"EventToNotify\\\":\\\"SaleWakeUp\\\",\\n         \\\"TimeStamp\\\":\\\"2019-11-15T10:16:10.000Z\\\"\\n      },\\n      \\\"MessageHeader\\\":{\\n         \\\"DeviceID\\\":\\\"1517998561\\\",\\n         \\\"MessageCategory\\\":\\\"Event\\\",\\n         \\\"MessageClass\\\":\\\"Event\\\",\\n         \\\"MessageType\\\":\\\"Notification\\\",\\n         \\\"POIID\\\":\\\"V400m-324688179\\\",\\n         \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n         \\\"SaleID\\\":\\\"POSSystemID12345\\\"\\n      }\\n   }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2 id=\"collect-input\">1. Retrieve the sale transaction<\/h2>\n<p>When the POS system receives a <code>SaleWakeUp<\/code> event notification:<\/p>\n<ol>\n<li>Get the reference or employee card number received in the <code>EventDetails<\/code> field of the event notification.<\/li>\n<li>Retrieve the sale transactions (the bills) associated with the reference number or employee card number, or with the terminal.<\/li>\n<li>If there is only one open bill, skip to <a href=\"#make-a-payment\">2. Make a payment<\/a>.<\/li>\n<li>If there are more open bills, <a href=\"\/point-of-sale\/shopper-engagement\/shopper-input\">make an input request<\/a> (or a series of input requests) to ask your staff to enter more information on the terminal.<br \/>\nFor example, first ask for the table number with a <a href=\"\/point-of-sale\/shopper-engagement\/shopper-input\/text\">text input request<\/a>. Then send a <a href=\"\/point-of-sale\/shopper-engagement\/shopper-input\/menu\">menu input request<\/a> to show a list of bills associated with the table number and ask your staff to select one.\n<div class=\"notices green\">\n<p>While an input request is being processed, you can optionally show a waiting screen animation. You can do this by <a href=\"\/point-of-sale\/shopper-engagement\/create-session\">creating a session<\/a> that spans multiple input requests.<\/p>\n<\/div><\/li>\n<li>Process the responses to your input requests so that your POS system is able to retrieve the correct bill to send a payment request for.<\/li>\n<\/ol>\n<h2 id=\"make-a-payment\">2. Make a payment<\/h2>\n<p>Technically Pay-at-table is a split payments flow. You make several subsequent payment requests for the same sale until the full amount has been paid. If a single customer pays the entire bill, that is an unequal split for the full amount, and you need to make only one split payment request.<\/p>\n<p>In this split payments flow, you:<\/p>\n<ul>\n<li>Set the split payments flag to <span translate=\"no\"><strong>true<\/strong><\/span> in each payment request.<\/li>\n<li>Specify a unique sale transaction ID in the first payment request, and repeat that same ID in all subsequent split payments for the same sale.<\/li>\n<li>Make sure that your POS system keeps track of the amount that has been paid already.<\/li>\n<\/ul>\n<p>After you have received a <code>SaleWakeUp<\/code> event notification from the terminal and collected information to determine for which bill the terminal wants to receive a payment request, proceed as follows:<\/p>\n<ol>\n<li>\n<p>Optional. From your POS system, send a <code>PrintRequest<\/code> to let the terminal print the bill.<\/p>\n<\/li>\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\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PaymentRequest<\/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>SaleData.SaleTransactionID<\/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;\">An object with <code>TransactionID<\/code> containing your reference for the sale (for example, the bill for table 5), and <code>TimeStamp<\/code> containing the date and time of the request in <a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_8601#Coordinated_Universal_Time_(UTC)\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">UTC format<\/a>. <p>All split payments belonging to the same sale (the same bill) must use this same <code>TransactionID<\/code>.<\/p><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>PaymentTransaction.AmountsReq<\/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;\">An object that indicates how much remains to be paid and how much has been paid already: <ul><li markdown=\"1\"><code>Currency<\/code>: The <a href=\"\/development-resources\/currency-codes\">currency<\/a> of the transaction.<\/li> <li markdown=\"1\"><code>RequestedAmount<\/code>: The amount that remains to be paid. For the first split payment, this is the full sale amount. For a subsequent split payment, this is the sale amount minus the <code>PaidAmount<\/code>.<\/li> <li markdown=\"1\"><code>PaidAmount<\/code>: The amount that has already been paid. For the first split payment, this is zero. For a subsequent split payment, this is the sum of the amounts paid in previous split payments for the same sale.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>PaymentData<\/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;\">An object that sets the split payment flag, with: <ul><li markdown=\"1\"><code>PaymentType<\/code>: <span translate=\"no\"><strong>Normal<\/strong><\/span><\/li> <li markdown=\"1\"><code>SplitPaymentFlag<\/code>: <span translate=\"no\"><strong>true<\/strong><\/span><\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<p>You can add other <code>PaymentRequest<\/code> fields as needed. For example to trigger the terminal to show the <a href=\"\/point-of-sale\/tipping\">tipping<\/a> options you configured.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'First Pay at table payment request'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"SaleToPOIRequest\\\": {\\n    \\\"MessageHeader\\\": {\\n      \\\"ProtocolVersion\\\":\\\"3.0\\\",\\n      \\\"MessageClass\\\":\\\"Service\\\",\\n      \\\"MessageCategory\\\":\\\"Payment\\\",\\n      \\\"MessageType\\\":\\\"Request\\\",\\n      \\\"SaleID\\\":\\\"POSSystemID12345\\\",\\n      \\\"ServiceID\\\":\\\"0207111104\\\",\\n      \\\"POIID\\\":\\\"V400cPlus-301506502\\\"\\n    },\\n    \\\"PaymentRequest\\\": {\\n      \\\"SaleData\\\": {\\n        \\\"SaleTransactionID\\\": {\\n          \\\"TransactionID\\\": \\\"9820s\\\",\\n          \\\"TimeStamp\\\": \\\"2019-11-12T12:58:23.000Z\\\"\\n        }\\n      },\\n      \\\"PaymentTransaction\\\": {\\n        \\\"AmountsReq\\\": {\\n          \\\"Currency\\\": \\\"USD\\\",\\n          \\\"RequestedAmount\\\": 89.65,\\n          \\\"PaidAmount\\\": 0\\n        }\\n      },\\n      \\\"PaymentData\\\": {\\n        \\\"PaymentType\\\": \\\"Normal\\\",\\n        \\\"SplitPaymentFlag\\\": true\\n      }\\n    }\\n  }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The payment request is routed to the terminal. This shows options to split <strong>Equally<\/strong> or <strong>Unequally<\/strong>, as described in <a href=\"#pay-at-x-flow\">How it works<\/a>.<br \/>\nWhen the payment is processed, you <a href=\"#receive-result\">receive the payment result<\/a>.<\/p>\n<\/li>\n<li>\n<p>If only a partial amount has been paid, send the next split payment request with a new <code>RequestedAmount<\/code> and <code>PaidAmount<\/code> as shown in the following example. <a id=\"next-payment-request\"><\/a><\/p>\n<p>The terminal will show options to <strong>Pay later<\/strong> or <strong>Pay remainder<\/strong>. If <strong>Pay remainder<\/strong> is selected, the terminal automatically calculates the next split in case of equal splits, or asks for the next amount in case of unequal splits.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Request for the next split payment after USD\u00a020 has been paid'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"SaleToPOIRequest\\\": {\\n    \\\"MessageHeader\\\": {...},\\n    \\\"PaymentRequest\\\": {\\n      \\\"SaleData\\\": {\\n        \\\"SaleTransactionID\\\": {\\n          \\\"TransactionID\\\": \\\"9820s\\\",\\n          \\\"TimeStamp\\\": \\\"2019-11-12T13:44:20.000Z\\\"\\n        }\\n      },\\n      \\\"PaymentTransaction\\\": {\\n        \\\"AmountsReq\\\": {\\n          \\\"Currency\\\": \\\"USD\\\",\\n          \\\"RequestedAmount\\\": 69.65,\\n          \\\"PaidAmount\\\": 20\\n        }\\n      },\\n      \\\"PaymentData\\\": {\\n        \\\"PaymentType\\\": \\\"Normal\\\",\\n        \\\"SplitPaymentFlag\\\": true\\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 id=\"receive-result\">3. Process the payment result<\/h2>\n<p>When you receive the payment response for a split payment:<\/p>\n<ol>\n<li>\n<p>Determine whether more split payments are needed to pay off the bill. In the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/payment#responses-200\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PaymentResponse<\/a>:<\/p>\n<ul>\n<li>\n<p><code>Response.Result<\/code>: <span translate=\"no\"><strong>Success<\/strong><\/span> indicates the full <code>RequestedAmount<\/code> has been paid. <span translate=\"no\"><strong>Partial<\/strong><\/span> indicates there is still an amount due, so more split payments are needed.<\/p>\n<!-- list separator -->\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>If more split payments are needed, keep track of the amount that has been paid.<\/p>\n<p>In each next split payment request for the same sale, you need to specify the total amount paid through the previous split payment(s) in the <code>PaidAmount<\/code> field, and adjust the <code>RequestedAmount<\/code> with the remaining amount due.<\/p>\n<p>To keep track, check these response fields:<\/p>\n<ul>\n<li><code>SaleData.TransactionID<\/code>: Includes the <code>TransactionID<\/code> of the sale (the bill) that the split payment belongs to.<\/li>\n<li>\n<p><code>AmountsResp.AuthorizedAmount<\/code>: The amount that has been paid with this transaction.<\/p>\n<!-- list separator -->\n<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Response for a partial card payment of USD\u00a020'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"SaleToPOIResponse\\\": {\\n    \\\"MessageHeader\\\": {...},\\n    \\\"PaymentResponse\\\": {\\n      \\\"POIData\\\": {...},\\n      \\\"SaleData\\\": {\\n        \\\"SaleTransactionID\\\": {\\n          \\\"TimeStamp\\\": \\\"2019-11-12T12:58:23.000Z\\\",\\n          \\\"TransactionID\\\": \\\"9820s\\\"\\n        }\\n      },\\n      \\\"PaymentResult\\\": {\\n        \\\"OnlineFlag\\\": true,\\n        \\\"PaymentAcquirerData\\\": {...},\\n        \\\"PaymentInstrumentData\\\": {\\n          \\\"CardData\\\": {...}\\n          },\\n          \\\"PaymentInstrumentType\\\": \\\"Card\\\"\\n        },\\n        \\\"AmountsResp\\\": {\\n          \\\"AuthorizedAmount\\\": 20,\\n          \\\"Currency\\\": \\\"USD\\\"\\n        },\\n        \\\"PaymentType\\\": \\\"Normal\\\"\\n      },\\n      \\\"Response\\\": {\\n        \\\"Result\\\": \\\"Partial\\\",\\n        \\\"AdditionalResponse\\\": \\\"tid=01506502&amp;AID=A0000000041010&amp;transactionType=GOODS_SERVICES&amp;backendGiftcardIndicator=false&amp;posadditionalamounts.originalAmountValue=2000&amp;...\\\"\\n      }\\n    }\\n  }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Sample response for cash payment of the full remaining amount'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"SaleToPOIResponse\\\": {\\n    \\\"MessageHeader\\\": {...},\\n    \\\"PaymentResponse\\\": {\\n      \\\"POIData\\\": {...},\\n      \\\"SaleData\\\": {\\n        \\\"SaleTransactionID\\\": {\\n          \\\"TimeStamp\\\": \\\"2019-11-12T13:44:20.000Z\\\",\\n          \\\"TransactionID\\\": \\\"9820s\\\"\\n        }\\n      },\\n      \\\"PaymentResult\\\": {\\n        \\\"OnlineFlag\\\": false,\\n        \\\"PaymentAcquirerData\\\": {...},\\n        \\\"PaymentInstrumentData\\\": {\\n          \\\"PaymentInstrumentType\\\": \\\"Cash\\\"\\n        },\\n        \\\"AmountsResp\\\": {\\n          \\\"AuthorizedAmount\\\": 69.65,\\n          \\\"Currency\\\": \\\"USD\\\"\\n        },\\n        \\\"PaymentType\\\": \\\"Normal\\\"\\n      },\\n      \\\"Response\\\": {\\n        \\\"Result\\\": \\\"Success\\\"\\n      }\\n    }\\n  }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<ul>\n<li>\n<p>In the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/terminal-api\/latest\/post\/payment#responses-200\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PaymentResponse<\/a>, also note the following:<\/p>\n<ul>\n<li><code>PaymentResult.OnlineFlag<\/code>: <span translate=\"no\"><strong>true<\/strong><\/span> for a card or wallet payment, or <span translate=\"no\"><strong>false<\/strong><\/span> for a cash payment.<\/li>\n<li><code>PaymentResult.PaymentInstrumentData.PaymentInstrumentType<\/code>: <span translate=\"no\"><strong>Cash<\/strong><\/span> or <span translate=\"no\"><strong>Card<\/strong><\/span><\/li>\n<li>\n<p><code>Response.AdditionalResponse<\/code>: Additional transaction data. Depending on the format you used in the request, you receive either a string of form-encoded key-value pairs or a Base64 string that you need to decode to get a JSON object. For a cash payment, this field is not included.<\/p>\n<!-- list separator -->\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>If <strong>Pay later<\/strong> is selected on the payment terminal when it receives a request for a subsequent split payment, the terminal shows <strong>Cancelled<\/strong>. You receive a payment result containing:<\/p>\n<ul>\n<li><code>PaymentResponse.Response.Result<\/code>: <span translate=\"no\"><strong>Failure<\/strong><\/span><\/li>\n<li>\n<p><code>PaymentResponse.Response.ErrorCondition<\/code>: <span translate=\"no\"><strong>PaymentRestriction<\/strong><\/span>. This indicates that the Pay-at-table flow was interrupted. It is not the preceding split payment that failed.<\/p>\n<!-- list separator -->\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>If the payment failed, the terminal shows <strong>Declined<\/strong> and you receive a payment result containing:<\/p>\n<ul>\n<li><code>PaymentResponse.Response.Result<\/code>: <span translate=\"no\"><strong>Failure<\/strong><\/span><\/li>\n<li>\n<p><code>PaymentResponse.Response.ErrorCondition<\/code>: Indicates why the payment failed. For example, <span translate=\"no\"><strong>Refused<\/strong><\/span> indicates the card issuer refused the transaction, and <span translate=\"no\"><strong>Cancel<\/strong><\/span> indicates the transaction was cancelled on the terminal. Refer to our <a href=\"\/point-of-sale\/error-scenarios\/refusal-reasons-pos\">refusal reasons documentation<\/a>.<\/p>\n<!-- list separator -->\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h2>Information for your staff<\/h2>\n<h4>Authentication<\/h4>\n<p>To start Pay at table, your staff selects the button you <a href=\"#enable-sale-wake-up\">configured<\/a>. Then they need to authenticate. On the terminal, they can:<\/p>\n<ul>\n<li>Enter their employee reference number.<\/li>\n<li>Swipe their employee card. This authentication method is only available on non-Android terminals.<\/li>\n<\/ul>\n<p>If employees usually authenticate by swiping their employee card but do not have their card available, they can select the <strong>Cancel<\/strong> key <strong><img alt=\"\" src=\"\/images\/e\/b\/5\/8\/6\/eb5864c171bd3eac47d4a415a1f7e5dc0b075c28-cancel2x.png\" \/><\/strong> to switch to entering their reference number. To switch back to swiping, they need to select the <strong>Cancel<\/strong> key again.<\/p>\n<h4>Previous step or cancel<\/h4>\n<p>After starting Pay at table, your staff can:<\/p>\n<ul>\n<li>Press <strong><img alt=\"\" src=\"\/images\/6\/a\/c\/0\/f\/6ac0f714f7f71ab24441a67d694875057c0ad00c-correct2x.png\" \/><\/strong> to go back a step in the flow. This is possible until the moment <strong>Cash<\/strong> or <strong>Card<\/strong> is selected.<\/li>\n<li>Press <strong><img alt=\"\" src=\"\/images\/e\/b\/5\/8\/6\/eb5864c171bd3eac47d4a415a1f7e5dc0b075c28-cancel2x.png\" \/><\/strong> to cancel the flow at any point.<\/li>\n<\/ul>\n<h4>Keeping your staff informed<\/h4>\n<p>The terminal will show the usual progress messages while a payment is processed. However, any errors occurring at other moments in the Pay-at-table flow are received at the POS system. Because your staff is not near the POS system, they do not know what happened and what they need to do. To help them, you can <a href=\"\/point-of-sale\/shopper-engagement\/display-data\/display-receipt\/\">make a display request<\/a> to send a message from the POS system to the terminal.<\/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\/tipping\"\n                        target=\"_self\"\n                        >\n                    Accept tips with your Pay-at-table payments\n                <\/a><\/li><li><a href=\"\/point-of-sale\/shopper-engagement\/shopper-input\"\n                        target=\"_self\"\n                        >\n                    Use the terminal to get input for the payment request from your staff\n                <\/a><\/li><li><a href=\"\/point-of-sale\/shopper-engagement\/display-data\/display-receipt\"\n                        target=\"_self\"\n                        >\n                    Send a message from the POS system to the terminal, to keep your staff informed\n                <\/a><\/li><li><a href=\"\/point-of-sale\/design-your-integration\/notifications\/event-notifications\"\n                        target=\"_self\"\n                        >\n                    Set up event notifications and view sample notifications\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/point-of-sale\/pay-at-x","articleFields":{"description":"How to use terminal initiated payment flows like Pay at table or Pay at curbside.","last_edit_on":"02-11-2020 12:21","page_id":"a30a1cec-e62c-4f10-a2a8-6c73ed0ff227","feedback_component":true,"filters_component":false,"decision_tree":"[]"},"algolia":{"url":"https:\/\/docs.adyen.com\/point-of-sale\/pay-at-x","title":"Make Pay-at-table payments","content":"To accept payments from your customers at a table, in a hotel room, or curbside, you can initiate payments from a terminal while keeping the terminal integrated with your POS system.\nThe terminal initiated payment flow offers:\n\nEqual and unequal split payments.\nSupport for all payment methods that you added to your account, as well as cash.\nEasy combination with tipping options.\nCustomers can enter a tip amount on the terminal with every split payment. If you let your staff authenticate when they start the payment from the terminal, you can then log the tip with that staff member to avoid adjusting tips later.\n\nFor Pay at table you need to use portable payment terminals. These terminals have an integrated printer and a Wi-Fi connection, and can automatically switch to a cellular connection if the Wi-Fi connection drops.\nRequirements\nBefore you begin, take into account the following requirements, limitations, and preparations.\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nA Terminal API integration with payment terminals.\n\n\nHardware\nThe payment terminal must have an integrated printer and support both Wi-Fi and cellular connections.\n\n\nLimitations\nAuthentication by swiping the employee card is not supported on Android payment terminals.\n\n\n\nHow it works\nAfter you have configured Pay at table, the flow is as follows:\n\n\nOn the terminal, your staff selects a button to start Pay at table, and authenticates by entering their reference number or swiping their employee card.\n\n\nThe terminal sends a SaleWakeUp event notification to the POS system. The notification informs the POS system that the terminal is waiting to receive a payment request.\n\n\nBased on the employee's authentication, you decide which bill to send a payment request for. If there are multiple bills, you send an InputRequest to the terminal so that your staff can provide more details. For example, ask for a table number, a choice from a list of bills, or a ride number. See 1. Retrieve the sale transaction.\n\n\nYou send a \n  PrintRequest\n to print the bill using the terminal. This is optional. It depends on your business needs whether to do this and when.\n\n\nYou send a \n  PaymentRequest\n from the POS system to the terminal. See 2. Make a payment.\n\n\nThe terminal shows the amount due, Split check, and options to:\n\nSplit the bill &lt;equally. The terminal will ask for the number of splits.\n\nSplit the bill unequally. The terminal will ask for the amount of the first split. This is also the option to choose if a single customer is paying the whole bill.\n\n\n\n\n\nThen the terminal shows the split amount and options to:\n\nPay by card. Your staff hands the terminal to the customer so that they can pay their split and, if configured, respond to the tipping options on the terminal.\nPay in cash. Your staff receives the cash and selects a button on the terminal display to confirm.\n\n\nIf you do not want to accept cash payments, we can configure skipping the prompt for cash or card.\n\n\n\nAfter the split payment is approved and sent, the terminal prints a receipt.\n\n\nYou process the split payment response, to keep track of the amount that has been paid. See 3. Process the payment result.\n\n\nIf there is a remaining amount due, you send the next PaymentRequest with the new RequestedAmount and PaidAmount.\nThe terminal then shows options to:\n\nPay later. This is used for a group of customers who want to pay their share of the bill at different times. The terminal shows Cancelled. When someone else from the group is ready to pay, your staff needs to start Pay at table again.\nPay remainder. With equal splits, the terminal calculates the amount of the next split payment based on the number of splits. With unequal splits, the terminal shows the remaining amount and your staff enters the amount of the next split payment.\n\nThis continues until the full amount has been paid.\n\n\nConfigure Pay at table\nTo enable Pay-at-table:\n\n\nSet up event notifications. This is necessary to let the terminal send a SaleWakeUp event notification to the POS system. This notification informs the POS system that the terminal is waiting to receive a payment request.\n\n\nConfigure settings in your Customer Area:\n\n\nIn your Customer Area, go to In-person payments &gt; Payment devices, and select the Terminals tab. \n\n\nSelect your terminal from the list of terminals.\n\n\nOn the Settings page, go to Integrations &gt; Notification button.\n\n\nTurn on the Enable notification button toggle switch.\n\n\nShow or hide the notification button. If the notification button is hidden, your staff can start a transaction by selecting the Confirm key  on the keypad.\n\n\nSet the following values:\n\n\n\nField\nDescription\n\n\n\n\nNotification category\nSelect Sale wake up.\n\n\nTitle\nEnter the text to show on the button that starts the flow from the terminal. For example, Pay@tTable\n\n\nDetails\nEnter the text to ask your staff to enter their reference number or swipe their employee card. The reference or card number can be a maximum of 10 digits.If you leave this field empty, the terminal sends the SaleWakeUp event notification immediately when the button is selected, and the notification does not include the reference or card number.\n\n\n\n\n\nSelect Save.\n\n\n\n\n\nContact our Support Team to:\n\nSet your staff's authentication method: Entering a reference number, or swiping an employee card.\nIf you do not want to accept cash payments, skip prompting for cash or card.\n\n\n\nAdd logic to your POS system so that it is able to handle the SaleWakeUp event notification.\n\n\nSaleWakeUp event notification\nThe \n  SaleWakeUp\n event notifications that the terminal sends to the POS system include:\n\nEventToNotify: SaleWakeUp\nEventDetails: The employee's reference number or employee card number. For example, reference_id=0123456789. You can use this to retrieve the associated bill, or to log sales and tips by staff member.\n\n\n    \n\n1. Retrieve the sale transaction\nWhen the POS system receives a SaleWakeUp event notification:\n\nGet the reference or employee card number received in the EventDetails field of the event notification.\nRetrieve the sale transactions (the bills) associated with the reference number or employee card number, or with the terminal.\nIf there is only one open bill, skip to 2. Make a payment.\nIf there are more open bills, make an input request (or a series of input requests) to ask your staff to enter more information on the terminal.\nFor example, first ask for the table number with a text input request. Then send a menu input request to show a list of bills associated with the table number and ask your staff to select one.\n\nWhile an input request is being processed, you can optionally show a waiting screen animation. You can do this by creating a session that spans multiple input requests.\n\nProcess the responses to your input requests so that your POS system is able to retrieve the correct bill to send a payment request for.\n\n2. Make a payment\nTechnically Pay-at-table is a split payments flow. You make several subsequent payment requests for the same sale until the full amount has been paid. If a single customer pays the entire bill, that is an unequal split for the full amount, and you need to make only one split payment request.\nIn this split payments flow, you:\n\nSet the split payments flag to true in each payment request.\nSpecify a unique sale transaction ID in the first payment request, and repeat that same ID in all subsequent split payments for the same sale.\nMake sure that your POS system keeps track of the amount that has been paid already.\n\nAfter you have received a SaleWakeUp event notification from the terminal and collected information to determine for which bill the terminal wants to receive a payment request, proceed as follows:\n\n\nOptional. From your POS system, send a PrintRequest to let the terminal print the bill.\n\n\nMake a payment request, including:\n\n\nThe  PaymentRequest object with:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\nSaleData.SaleTransactionID\n\nAn object with TransactionID containing your reference for the sale (for example, the bill for table 5), and TimeStamp containing the date and time of the request in UTC format. All split payments belonging to the same sale (the same bill) must use this same TransactionID.\n\n\nPaymentTransaction.AmountsReq\n\nAn object that indicates how much remains to be paid and how much has been paid already: Currency: The currency of the transaction. RequestedAmount: The amount that remains to be paid. For the first split payment, this is the full sale amount. For a subsequent split payment, this is the sale amount minus the PaidAmount. PaidAmount: The amount that has already been paid. For the first split payment, this is zero. For a subsequent split payment, this is the sum of the amounts paid in previous split payments for the same sale.\n\n\nPaymentData\n\nAn object that sets the split payment flag, with: PaymentType: Normal SplitPaymentFlag: true\n\n\n\n\n\nYou can add other PaymentRequest fields as needed. For example to trigger the terminal to show the tipping options you configured.\n\n\n\nThe payment request is routed to the terminal. This shows options to split Equally or Unequally, as described in How it works.\nWhen the payment is processed, you receive the payment result.\n\n\nIf only a partial amount has been paid, send the next split payment request with a new RequestedAmount and PaidAmount as shown in the following example. \nThe terminal will show options to Pay later or Pay remainder. If Pay remainder is selected, the terminal automatically calculates the next split in case of equal splits, or asks for the next amount in case of unequal splits.\n\n\n\n\n\n3. Process the payment result\nWhen you receive the payment response for a split payment:\n\n\nDetermine whether more split payments are needed to pay off the bill. In the  PaymentResponse:\n\n\nResponse.Result: Success indicates the full RequestedAmount has been paid. Partial indicates there is still an amount due, so more split payments are needed.\n\n\n\n\n\nIf more split payments are needed, keep track of the amount that has been paid.\nIn each next split payment request for the same sale, you need to specify the total amount paid through the previous split payment(s) in the PaidAmount field, and adjust the RequestedAmount with the remaining amount due.\nTo keep track, check these response fields:\n\nSaleData.TransactionID: Includes the TransactionID of the sale (the bill) that the split payment belongs to.\n\nAmountsResp.AuthorizedAmount: The amount that has been paid with this transaction.\n\n\n\n\n\n\n\n\n\n\n\nIn the  PaymentResponse, also note the following:\n\nPaymentResult.OnlineFlag: true for a card or wallet payment, or false for a cash payment.\nPaymentResult.PaymentInstrumentData.PaymentInstrumentType: Cash or Card\n\nResponse.AdditionalResponse: Additional transaction data. Depending on the format you used in the request, you receive either a string of form-encoded key-value pairs or a Base64 string that you need to decode to get a JSON object. For a cash payment, this field is not included.\n\n\n\n\n\nIf Pay later is selected on the payment terminal when it receives a request for a subsequent split payment, the terminal shows Cancelled. You receive a payment result containing:\n\nPaymentResponse.Response.Result: Failure\n\nPaymentResponse.Response.ErrorCondition: PaymentRestriction. This indicates that the Pay-at-table flow was interrupted. It is not the preceding split payment that failed.\n\n\n\n\n\nIf the payment failed, the terminal shows Declined and you receive a payment result containing:\n\nPaymentResponse.Response.Result: Failure\n\nPaymentResponse.Response.ErrorCondition: Indicates why the payment failed. For example, Refused indicates the card issuer refused the transaction, and Cancel indicates the transaction was cancelled on the terminal. Refer to our refusal reasons documentation.\n\n\n\n\n\n\n\nInformation for your staff\nAuthentication\nTo start Pay at table, your staff selects the button you configured. Then they need to authenticate. On the terminal, they can:\n\nEnter their employee reference number.\nSwipe their employee card. This authentication method is only available on non-Android terminals.\n\nIf employees usually authenticate by swiping their employee card but do not have their card available, they can select the Cancel key  to switch to entering their reference number. To switch back to swiping, they need to select the Cancel key again.\nPrevious step or cancel\nAfter starting Pay at table, your staff can:\n\nPress  to go back a step in the flow. This is possible until the moment Cash or Card is selected.\nPress  to cancel the flow at any point.\n\nKeeping your staff informed\nThe terminal will show the usual progress messages while a payment is processed. However, any errors occurring at other moments in the Pay-at-table flow are received at the POS system. Because your staff is not near the POS system, they do not know what happened and what they need to do. To help them, you can make a display request to send a message from the POS system to the terminal.\nSee also\n\n\n                    Accept tips with your Pay-at-table payments\n                \n                    Use the terminal to get input for the payment request from your staff\n                \n                    Send a message from the POS system to the terminal, to keep your staff informed\n                \n                    Set up event notifications and view sample notifications\n                \n","type":"page","locale":"en","boost":18,"hierarchy":{"lvl0":"Home","lvl1":"In-person payments","lvl2":"Make Pay-at-table payments"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/","lvl1":"https:\/\/docs.adyen.com\/point-of-sale","lvl2":"\/point-of-sale\/pay-at-x"},"levels":3,"category":"In-person payments","category_color":"green","tags":["Pay-at-table","payments"]}}
