In-Person Payments

QR-based stablecoin payments at physical locations. Create a session, show the QR, customer scans and pays.
POS uses the standard checkout session type with the qrFormats field. There is no separate “pos” session type.
┌──────────┐     ┌──────────────────────┐     ┌──────────┐
│ POS /    │     │ Stableyard            │     │ Customer │
│ Cashier  │     │                       │     │          │
│          │ ──► │ POST /v2/sessions     │     │          │
│ Creates  │     │ { amount,             │     │          │
│ session  │     │   qrFormats:          │     │          │
│ with QR  │     │   ["universal"] }     │     │          │
│          │ ◄── │ Returns qrData        │     │          │
│ Shows QR │ ═══════════════════════════════► │          │
│ on       │     │                       │     │ Scans QR │
│ screen   │     │                       │ ◄── │ Pays     │
│          │ ──► │ GET /sessions/:id     │     │          │
│ Polls    │ ◄── │ status: settled       │     │          │
│ ✓ Done!  │     └──────────────────────┘     └──────────┘
└──────────┘

Create a POS Session

curl -X POST https://api.stableyard.fi/v2/sessions \
  -H "Authorization: Bearer sy_secret_*" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 5000000,
    "destination": "coffeeshop@stableyard",
    "qrFormats": ["universal", "solana", "evm"]
  }'

Three QR Formats

FormatWhat it opensWallet support
universalStableyard payment page (any wallet)All wallets
solanaSolana Pay URIPhantom, Solflare scan directly
evmEIP-681 URIMetaMask, Rabby scan directly
The universal format works with any wallet. Use solana or evm for native wallet scanning without opening a browser.

POS Integration Flow

  1. Create session with qrFormats → get QR data
  2. Display QR code on POS screen/tablet
  3. Customer scans with their wallet
  4. Poll GET /sessions/:id until status: "settled"
  5. Show “Payment received” and proceed