# Pay@Table

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.

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.

The workflow for a typical Pay@Table transaction is:

1. The customer indicates to staff that they're ready to pay the bill.
2. A staff member takes a Pay@Table terminal and enters their operator ID and the table number.
3. The terminal connects to the restaurant's POS server over HTTP and requests the amount for that
table.
4. The POS server returns the amount to the terminal.
5. The terminal asks whether the customer wants to pay the full amount or split the bill.
6. If splitting the bill, the customer enters the amount to pay.
7. The terminal prompts for the card, account type and PIN or signature.
8. Once approved, the terminal prints the receipt and posts the transaction result back to the POS
server.


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.

Pay@Table runs in three modes — Restaurant, Restaurant & Bar, and Retail — covered on
[Specification](/docs/in-person-payments/pay-in-person/features/pay-at-table/specification).

Before starting development, read the
[Pay@Table certification criteria document](/assets/certification_criteria_paytable.8b505e95a13f4c75823d3f8e9de5398c3a9598ad9871b1e8aa1b6463b5c2c57a.d564e73d.pdf).

## Tyro Pay@Table simulator

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.

The archive includes its own instructions for use.

[Pay@Table simulator](/assets/paytablesimulator.722e3831d13f932a7f9f7f8de4004d54a8e999483103ade2602141f5631328cb.fbf1555a.zip)