New Merchant & Wallet SDKs now in private beta
GeniusPay™ lets banks issue cards backed by regulated Payment Stablecoins on the rails they already run — and gives merchants and third-party wallets the SDKs to accept and spend them anywhere. Instant. Non-custodial. GENIUS Act compliant on day one.
For banks
GeniusPay™ runs alongside your existing card and deposit rails. Customers transact with the debit cards they already carry — you capture the network economics behind every swipe.
Earn on PSC issuance, redemption and transaction volume. Because GeniusPay™ cuts the legacy card networks out of the chain, more of every basis point stays on your balance sheet.
Stablecoins move directly between accounts via cryptographic authorization. We never hold funds.
Only GENIUS Act Payment Stablecoins move on the network. Reserves, attestations and audit trails are properties of the rails.
No re-issuance, no new core banking modules. A configuration change, not a migration.
No cut-off times, no batch windows. Payments clear on weekends and holidays like any other day.
For merchants
The GeniusPay™ Merchant SDK lets any point of sale, e-commerce checkout or ATM accept GENIUS Act Payment Stablecoins from any card or wallet on the network. Funds reach your account instantly — no chargebacks, no T+2 float, no new hardware.
import { GeniusMerchant } from "@geniuspay/merchant"; const pos = new GeniusMerchant({ terminalId: "TER_0412" }); // Show a charge — accepts card tap or wallet scan const charge = await pos.createCharge({ amount: 48.50, asset: "PSC-USD", payout: "fiat" // or "psc" }); charge.on("approved", tx => { // { status: "approved", finality: "T+0", fee: 0.17 } });
val pos = GeniusMerchant(terminalId = "TER_0412") val charge = pos.createCharge( amount = 48.50, asset = Asset.PSC_USD, payout = Payout.FIAT ) charge.onApproved { tx -> // tx.finality == "T+0" }
POST /v1/charges { "terminal_id": "TER_0412", "amount": 48.50, "asset": "PSC-USD", "payout": "fiat" } // 201 Created · 91ms { "id": "chg_01J8…", "status": "approved", "finality": "T+0", "tx_hash": "0x4b7f…c019" }
For wallets
The GeniusPay™ Wallet SDK plugs into any third-party wallet — custodial or self-custodial — and gives its users tap-to-pay at every terminal on the network and cash-out at GeniusPay™ ATMs. Keys stay where they are. We never touch funds.
import GeniusWallet let genius = GeniusWallet(signer: PasskeySigner()) // Tap-to-pay: sign a PSC release at the terminal let tx = try await genius.authorizeTap( terminal: "TER_0412", amount: 48.50, asset: .pscUSD ) // tx.status == .approved · tx.latencyMs == 82
val genius = GeniusWallet(signer = PasskeySigner()) val tx = genius.authorizeTap( terminal = "TER_0412", amount = 48.50, asset = Asset.PSC_USD ) // tx.status == Status.APPROVED
import { GeniusWallet } from "@geniuspay/wallet-react-native"; const genius = new GeniusWallet({ signer: passkey }); const tx = await genius.authorizeTap({ terminal: "TER_0412", amount: 48.50, asset: "PSC-USD" }); // → { status: "approved", finality: "T+0", latency_ms: 82 }
Every wallet on the Wallet SDK can pay every merchant on the Merchant SDK — and every bank card works at both. No bilateral integrations.
The SDKs coordinate authorization and payment. They never hold keys or balances — funds move directly between bank, merchant and wallet.
Test keys, a simulated terminal and a funded test wallet ship with every SDK. Go from install to first approved transaction the same afternoon.
How it works
Card or wallet, the customer experience is what it is today. Only the network underneath changes.
The customer taps a bank-issued debit card or scans with a wallet running the Wallet SDK at any merchant running the Merchant SDK.
The transaction travels to GeniusPay™ over existing payment rails. Where the network isn't available, it falls back to legacy processing seamlessly.
Authorization returns in ~100ms. Payment Stablecoins clear on the Ethpar network — bank, merchant and wallet all see one immutable record.
Banks, merchants, acquirers and wallet teams — integrate once to reach the whole network.