{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-docs/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Pay@Table","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"paytable","__idx":0},"children":["Pay@Table"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Pay@Table lets restaurants take card payments at the table instead of at the counter. Staff bring"," ","a terminal to the table, and the terminal — not the POS — drives the transaction: it asks the POS"," ","for the amount owing, offers the customer a full payment or a split bill, and posts the result back"," ","once the payment completes."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Pay@Table isn't reached through the JS library, .NET library or In-store API — it's a separate"," ","protocol. The terminal connects directly to an HTTP (LAN-based) or HTTPS (cloud-based) endpoint"," ","that the POS exposes, rather than the POS driving the terminal the way the other three integration"," ","paths do."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The workflow for a typical Pay@Table transaction is:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The customer indicates to staff that they're ready to pay the bill."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A staff member takes a Pay@Table terminal and enters their operator ID and the table number."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The terminal connects to the restaurant's POS server over HTTP and requests the amount for that"," ","table."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The POS server returns the amount to the terminal."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The terminal asks whether the customer wants to pay the full amount or split the bill."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If splitting the bill, the customer enters the amount to pay."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The terminal prompts for the card, account type and PIN or signature."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Once approved, the terminal prints the receipt and posts the transaction result back to the POS"," ","server."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Traditional integrations — including the .NET library — lock up the POS for the duration of the"," ","transaction: it can't be used again until the transaction completes. Whether that's a problem"," ","depends on the environment. In a supermarket, customers already expect to queue and pay in"," ","sequence, but in a busy restaurant with one POS at the counter and a queue of customers trying to"," ","pay at the end of a sitting, that lock-up becomes a real bottleneck. Pay@Table avoids it: the"," ","terminal pulls the amount from the POS rather than the POS pushing it and waiting for a result, so"," ","the POS stays free for other transactions while the terminal handles payment."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Pay@Table runs in three modes — Restaurant, Restaurant & Bar, and Retail — covered on"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/in-person-payments/pay-in-person/features/pay-at-table/specification"},"children":["Specification"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before starting development, read the"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/assets/certification_criteria_paytable.8b505e95a13f4c75823d3f8e9de5398c3a9598ad9871b1e8aa1b6463b5c2c57a.d564e73d.pdf"},"children":["Pay@Table certification criteria document"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"tyro-paytable-simulator","__idx":1},"children":["Tyro Pay@Table simulator"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A Java command-line test harness is available for POS vendors developing and testing a Pay@Table"," ","implementation. It generates the same messages a terminal in Pay@Table mode would send."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The archive includes its own instructions for use."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/assets/paytablesimulator.722e3831d13f932a7f9f7f8de4004d54a8e999483103ade2602141f5631328cb.fbf1555a.zip"},"children":["Pay@Table simulator"]}]}]},"headings":[{"value":"Pay@Table","id":"paytable","depth":1},{"value":"Tyro Pay@Table simulator","id":"tyro-paytable-simulator","depth":2}],"frontmatter":{"title":"Pay@Table","seo":{"title":"Pay@Table"}},"lastModified":"2026-09-22T04:00:11.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/in-person-payments/pay-in-person/features/pay-at-table","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}