Non-custodial settlement
USDC lands in the merchant's wallet, not ours. Router is open-source, owner-locked, fee-capped at 0.5%. Hard guarantees, not policies.
contract BlockPayRouter {
function pay(PaymentParams p) external {
token.transferFrom(payer, p.merchant, amount);
emit Settled(p.invoiceId, ...);
}
}
3 stablecoins at checkout
USDC · EURC · USYC. Customer picks what they hold, merchant gets it.
~1s deterministic finality
Arc's Malachite consensus. No 12-block confirmations theatre — one tx, one second, done.
USDC-native gas
Customer's USDC pays for the transfer AND the gas. No native gas token to chase.
Privy auth, one tap
Email · Google · wallet — one modal. No seed phrases to write down.
Stripe-style webhooks
HMAC-signed events, retry queue, replay button. The API you already know.
One-line SDK
npm install @blockpay/sdk → blockpay.charge(amount, merchant).