Card terminals

Which terminal to buy, and how the register works with it. Set it up under My Account → Entity → Card Terminal.
How card payments work here

The register records the payment: the card brand and the last 4 digits. The card itself is charged by your merchant account, on your processor's terminal. When the card was taken through a connected terminal (below), a void or a refund in ParallelPOS goes back to the card through the processor. A card run standalone has nothing for ParallelPOS to call: the refund is booked here, and you return the money on your terminal.

There are two ways to get the card details into the register:

What auto-capture supports
PartnerTerminalAuto-captureRefunds & voids
Stripe TerminalWisePOS E, Reader S700 (internet readers registered to your Stripe account)driven directlyback to the card through Stripe
SquareSquare Terminal, paired to your Square accountdriven directlyback to the card through Square
Clovera Clover device on your Clover merchant account, with Cloud Pay Display installeddriven directly you sign in to Clover — no key to copyback to the card through Clover
Dejavooa Dejavoo terminal (P1, P3, P5, QD series) with SPIn enabled on its TPN in the iPOSpays portaldriven directly you paste the SPIn auth key and the terminal's TPNa whole sale is voided through SPIn until the batch settles; after that, or for a part, a Return on the terminal with the customer's card
Fiserv CardPointe (Bolt)a CardPointe "Bolt" terminal (Ingenico Lane / Link, or a Clover provisioned to CardPointe) on a First Data / Fiserv merchant accountdriven directly you paste the Terminal API key, the merchant id, the Gateway username:password and the site name; the HSN is picked from Test connectiona sale is voided through the Gateway until its batch settles, then refunded (part or whole) — both from here
Worldpay triPOS Cloud (FIS / Vantiv)a Worldpay-keyed PIN pad (Verifone MX / Ingenico Lane) paired to a triPOS Cloud lane on a Worldpay (Express) merchant accountdriven directly through triPOS Cloud: you paste the Express account token, acceptor id, account id and the lane id from your Worldpay implementation consultanta sale is voided whole while its batch is open, then returned (part or whole) — both from here; a debit sale is voided only
Heartland Genius (Global Payments)a Genius device (Verifone P400 / MX) on a Heartland / Global Payments (TSYS, Cayan) merchant accountdriven directly through Meet in the Cloud: you paste the REST API key, the API secret, the account credential (X-Web ID:Terminal ID:Auth Key) and the device id from Global Payments onboardinga sale is voided whole while its batch is open, then refunded (part or whole) — both from here; a debit sale is voided only
PAX on Cybersourcea PAX (A35, A77, A920, A920 Pro, A920 MAX) running the Cybersource / Visa Acceptance app; the processor behind it is yours (FDC Nashville or Visa Platform Connect)driven directly you paste the REST-Certificate private key, key id, merchant id and the device serialback to the card through Cybersource (a same-day refund is reversed)
PAX on another cloud, Verifone, Ingenico, bank terminalswhatever your processor issuedstandalone or a custom bridge your processor or integrator hoststhrough the bridge's refund endpoint; standalone: on your terminal
A key you save here (a Stripe secret key, a Square access token, a bridge's key) is stored encrypted with the server's own key and is only ever opened on our server to talk to your partner. It is never sent to a browser — the form shows its last four characters, to admins and HR only.
A terminal must be key-injected by your processor before it takes a payment, so a bare unit bought online does nothing until your processor loads it. Square, Clover, Toast, Stripe and Zettle readers only work with their own merchant accounts. PAX (A920 Pro, A80), Dejavoo (P1, P3, P5), Verifone Engage and Ingenico Move/Desk units are keyed by most US processors — ask for the unit "deployed and injected" for your merchant account when you order.

Stripe Terminal

  1. In dashboard.stripe.com → Terminal → Readers, register the reader (WisePOS E or Reader S700) to a location.
  2. Under Developers → API keys, copy the secret key (sk_live_…). A test key (sk_test_…) drives Stripe's simulated readers.
  3. In ParallelPOS, My Account → Entity → Card Terminal: provider Stripe Terminal, paste the secret key, press Test connection and pick the reader it lists (tmr_…). Tick Enable, save.
Bluetooth readers (Reader M2, BBPOS Chipper) cannot be driven from a server and are not supported for auto-capture — use them standalone.

Square Terminal

  1. Pair the Square Terminal to your Square account (Square dashboard → Devices).
  2. In developer.squareup.com → your application → Credentials, copy the production access token. Use the sandbox token with Environment: Sandbox to test.
  3. In ParallelPOS: provider Square Terminal, paste the token, press Test connection and pick the device (device:…). Tick Enable, save.

Clover

ParallelPOS drives a Clover device directly through Clover's cloud (REST Pay Display). There is no key to copy: you sign in to Clover from ParallelPOS, and the sale prompt appears on the Clover device at the register.

  1. The Clover device (Flex, Mini, Station Duo, Station Solo…) is registered to your Clover merchant account and online, and Cloud Pay Display is installed on the merchant from the Clover App Market. ParallelPOS connects to Clover merchants in the United States and Canada.
  2. On the Card Terminal card — My Account → Integration Settings for one entity, or My Account → Entity → CC Merchant & Bank Fees for every entity — set the provider to Clover and press Connect Clover. Sign in to Clover with the merchant's owner or admin login and approve ParallelPOS. You come back to the same card, on the same ParallelPOS address you started from, and it finishes the connection with your ParallelPOS sign-in: it then says Connected with the merchant's last four. Only the admin who pressed Connect can finish it, so stay signed in to ParallelPOS while you sign in to Clover; a sign-in that comes back to anyone else connects nothing.
  3. Press Test connection: it lists the devices on that merchant. Pick the one at this register (its serial). Tick Enable, save.

Any other processor — the bridge

Use the terminal standalone — it is the normal way most shops run. If your processor or integrator offers a cloud API for the terminal, they can host a small bridge that ParallelPOS's server calls. Every call carries your key as Authorization: Bearer <key>, goes to a public https URL, and never follows a redirect.

1 · Charge — the custom bridge endpoint

POST <endpoint> with {"amount": 4.89, "amount_cents": 489, "currency": "USD", "reference": "…", "charge_id": "…"}. Answer {"status": "approved", "brand": "visa", "last4": "4242", "ref": "<your payment id>"} — or "approved": true. Anything without an explicit verdict is not booked as a card sale.

2 · Refund — the bridge refund endpoint (optional)

A public https URL that leads somewhere other than both charge endpoints (primary and secondary — compared by where the path leads, so a trailing ?, ./ or a change of case is the same URL), with no #fragment. With one, every refund and void of a sale the bridge charged — and a charge whose sale never landed — is sent to it:

POST <refund endpoint>, header Idempotency-Key: <refund_id>, body {"action": "refund", "charge_id": "…", "payment_ref": "<the ref you answered at charge>", "reference": "…", "amount": 4.89, "amount_cents": 489, "currency": "USD", "refund_id": "pprf…", "unwind": false, "reason": "ParallelPOS order #123 (refund)"}.

3 · Refund status (optional, recommended)

GET <refund endpoint>?charge_id=…&payment_ref=…[&refund_id=…] answering {"refunded_cents": 489, "refunds": [{"refund_id": "pprf…", "status": "refunded"}]} — the total refunded on that payment so far. ParallelPOS reads it before every refund, so a refund that reached the card but whose answer was lost is booked rather than sent twice, and it follows a pending refund to its end — listing the refund_id is what lets it do so. Answer 404 if you do not support it; a pending refund nobody can follow is put in front of the shop's admins after a day.

A bridge on your shop's own network (a 192.168… or localhost address) cannot be reached from our server and is refused. It has to be reachable from the internet, over https — the charge endpoint too. Refunds always go back through the bridge that took the card: if the entity later switches to a different bridge, earlier sales are refunded on the old processor's dashboard. Without a refund endpoint, a refund of a bridge sale is booked here and you return the money on the processor's dashboard.

USB swipe reader (optional)

A keyboard-style magstripe reader (MagTek Dynamag, ID Tech MiniMag) plugged into the till fills in the brand and last 4 when the Card Details sheet is open. It does not charge the card — the terminal still does that.

If a charge does not go through

If a refund fails after it was sent

Some refunds are accepted by the processor and settle later (Square often answers "pending"). ParallelPOS checks every ten minutes. If the processor then fails the refund — a closed card account, a lost card, a merchant balance too low to cover it — the order stays booked as refunded but the customer has not been paid. The shop's admins and managers get a bell, and Order Management lists the refund at the top of the page until it is made good.

Before anything is sent or booked, the processor is asked what it has refunded. Stripe and Square are read refund by refund: a refund redone on their dashboard since is booked as that — and followed, if it is still settling — and nobody is paid twice. A custom bridge gives only a total, which after a declined refund cannot tell a redo from the declined one; then, and whenever the processor cannot be read or shows money ParallelPOS has not booked, you are asked to check the dashboard and tick that you did before cash is handed over. Each failed refund can be made good once, and only by someone who may refund orders.