Skip to content

Integrations

On this page

Terminal

Use a project link as an in-person stablecoin terminal on a phone or tablet, enter the amount, show a QR code, and track confirmation.

Open the link on a phone or tablet, key the amount on the numpad, hand the device to the customer. After payment confirms, the page resets to the numpad automatically — ready for the next sale.

Terminal works out of the box. No code, no embedded API keys, no server side. Brand, currency, and active networks are all inherited from the project's Widget Builder settings.

Where to get the terminal URL

  1. Open Dashboard → Widgets.
  2. Pick the project you want a terminal for.
  3. Switch to the Terminal tab.
  4. Toggle "Terminal enabled" on for the project.
  5. Copy the POS URL from the card.

The URL looks like:

https://paymos.io/pos?key=pk_live_xxx&pid=prj_yyy

Share the link with cashiers or save it to the counter device's bookmarks.

What's in the URL

Parameter Purpose
key Project's public key (prefix pk_live_ or pk_test_). Not secret — but possession grants the ability to create invoices against your project. Pulled from your project's active payment key.
pid Project identifier (prefix prj_). Decides which tokens, networks, and branding load.

The URL isn't device-bound — open it on any browser device. Each open is an independent session.

How a sale runs

  • 01Cashier opens the terminal URL in a browser (phone, tablet, or counter PC).
  • 02Picks the fiat currency (USD, EUR, RUB plus 43 more) and keys the amount on the numpad.
  • 03Taps Pay — terminal creates an invoice and opens the standard payment page.
  • 04Customer pays from their own device: scans the QR off the terminal screen or follows the link.
  • 05Once confirmed on-chain, terminal auto-resets to the numpad.

The cashier never touches a wallet. The customer never signs up with Paymos. Most of the wait is on-chain confirmation — seconds on a fast-finality chain, a few minutes for a large payment on a slower one.

Customizing the look

Terminal inherits the same brand settings as the regular checkout page. Edit them in the Branding card on Widgets → Checkout:

Setting What it changes
Checkout style Base style template for the payment page (background pattern, theme)
Accent color Primary color: buttons, links, hover, active network indicator
Background color Page background
Surface color Card and panel surface
Text color Main body text
Muted color Secondary text (hints, captions)
Corner radius Rounding on buttons and cards, 0-32px

After saving, the preview iframe in Widget Builder updates automatically. Terminal picks up the changes on next open.

The project logo (set via the Logo URL field on the project edit form) automatically appears in the terminal header. Any image URL the browser can render works — PNG, SVG, JPEG, WebP.

Currency list

Terminal exposes the fiat currencies enabled in the project under the Currencies tab on the project detail page. The default retail set is USD, EUR, RUB. Add or remove to fit your geography.

Active networks and tokens

Terminal only shows the customer the networks and tokens enabled on the project's Currencies tab. A typical retail mix:

  • Tron (USDT) — CIS and Asia customers
  • Polygon (USDC/USDT) — low customer fee
  • BSC (USDT) — Binance-native users
  • TON — Telegram-native audiences

Keep Ethereum mainnet enabled if you expect high-ticket sales.

Sandbox vs production

The terminal URL key prefix decides the environment — pk_test_ for sandbox, pk_live_ for production. When running in sandbox, the terminal shows an orange "Sandbox mode" banner in the header.

For testing:

  1. Generate a pk_test_ key in Dashboard → Developers → API.
  2. Build the sandbox terminal URL (same shape, test key).
  3. Pay invoices from testnet wallets.

To go live, create a pk_live_ key and update the URL on the counter devices.

Terminal as a Widget SDK fallback

If you use the Widget SDK without a fixed amount (amount omitted), pass the terminal URL as the SDK's pos_url option — the widget then opens the terminal instead of the standard checkout form. One widget covers two flows:

  • Fixed amount — customer pays the set amount via the standard form.
  • Free amount — customer enters the amount on the terminal numpad.

One script, two modes, no separate build. Without pos_url there is no fallback: a click with no resolvable amount raises a paymos:error event instead of opening the terminal.

Multiple cashiers or devices

The URL is shared. Open it on as many devices as you need — they all run in parallel against the same project. Transactions feed into the project's shared history; the dashboard shows everything.

Per-cashier attribution is not built in. If you need it, run a project per till or per location. Each project gets its own URL, its own history, its own dashboard summary.

Multiple locations

Run a project per location:

  1. Dashboard → Projects → Create.
  2. Configure brand and active networks.
  3. Enable Terminal and copy the URL for that location.

All projects sit under one merchant account — reporting rolls up to the shared dashboard.

Security

The key in the URL is the public key. It doesn't grant access to withdrawals, project settings, or any restricted operation. It does grant the ability to create invoices against your project.

In practice:

  • The terminal URL is safe to keep in browser bookmarks on a public counter device.
  • If the URL leaks to an outsider, they can create invoices (but not pay them on your behalf, and not withdraw funds).
  • If compromised, generate a new pk_live_ key in Dashboard → Developers → API and update the URL. Revoke the old key.

Secret keys (sk_live_) never appear in the terminal. They're only used for server-side API requests.

Troubleshooting

Terminal won't open

Check:

  1. URL has both parameters — key and pid.
  2. Terminal enabled toggle is on in Widget Builder → Terminal.
  3. The key isn't revoked in Developers → API.

Page says "Terminal unavailable"

Terminal enabled is off for the project. Turn it on in Widget Builder → Terminal.

Page shows an error

Most commonly — key or pid is wrong. Copy the URL again from Widget Builder.

QR doesn't appear after tapping "Pay"

Check that at least one token is enabled in the project's Currencies.

Payment doesn't confirm

Confirmation depth depends on the network and on the payment amount — small amounts clear fast, large ones wait longer for finality. Fast-finality chains (BSC, Polygon, Solana) settle in seconds; on Tron, Ethereum, and the L2s a large ticket can take a couple of minutes. If the customer paid several minutes ago and the page hasn't moved, open the transaction in the network's explorer to check it landed.

Terminal looks broken after a theme change

The old theme is still cached in the open tab. Close the tab and reopen the URL to pull the new one.