# Point of Sale (POS) Building with an AI agent? Start at https://docs.payme.io/agents.md Take card-present EMV payments on a POS device: prerequisites, device setup and pairing, payments and refunds. The POS module lets platforms, sellers and PSPs take card-present EMV payments on a physical payment device and get the result through the Payments API. How to: [Take in-person payments with a POS device](/accepting-payments/checkout-and-in-person/point-of-sale) walks through the whole flow, including pairing a device yourself (`pos/pair`, `pos/authenticate`) and transmitting the day's transactions (`pos/transmit`). ## Supported payment methods The device accepts payment cards (Visa, Mastercard, American Express, Diners Club). Other methods depend on the device; ask PayMe Partners () for the current list. ## Before you start | Item | Description | |---|---| | `seller_payme_id` | The seller's MPL. It authenticates payments and refunds. | | `payme_client_key` | Partners only. Needed to order devices with `vas-enable`. A seller can take payments with `seller_payme_id` alone. | | Active POS service | The seller must have an active POS service; otherwise payment calls return error `720`. | | A paired device | A supported POS device, paired and authenticated. Its `pos_id` names the device in each payment request. | ## Set up a device 1. Order the devices with [Order POS devices](/payments/point-of-sale-pos/post-vas-enable). A new terminal takes up to 5 business days. 2. PayMe pairs the device and then authenticates it. Each step sends a callback: `point-of-sale-action-pair-update`, which carries the `pos_id`, then `point-of-sale-action-authenticate-update`. The device can't take payments until both steps are done. 3. The device ships to the seller. ## Take a payment Call [Create a POS payment](/payments/point-of-sale-pos/post-payment) (`POST /sales`) with `payment.method` `pos` and the device's `payment.pos_id`. PayMe pushes the payment to the device and waits for the buyer. The result comes back in the same response; there is nothing to poll. A declined or canceled payment returns HTTP 200 with `status_code` `1`. Always check `status_code`, not the HTTP status. You can also do it in two steps: create the sale with [`generate-sale`](/payments/hosted-payment-page/post-generate-sale) and `sale_payment_method` `pos`, then push it to the device with `PUT /sales/{payme_sale_id}`, sending `seller_payme_id` and a `payment` object with `method` `pos` and `pos_id`. ## Refund a payment Call [Refund a POS sale](/payments/point-of-sale-pos/put-sales) (`PUT /sales/{payme_sale_id}`) with `payment.action` `refund`. The refund is sent to the device. ## Base URLs | Environment | Base URL | |---|---| | Sandbox | `https://sandbox.payme.io/api` | | Production | `https://live.payme.io/api` | ## Endpoints - [Order POS devices](/payments/point-of-sale-pos/post-vas-enable): POST /vas-enable - [Create a POS payment](/payments/point-of-sale-pos/post-payment): POST /sales - [Refund a POS sale](/payments/point-of-sale-pos/put-sales): PUT /sales/{sale_guid}