HashPay serves the exact address and amount at checkout, watches the chain, and signs you a webhook the moment a payment confirms. Money moves buyer → your wallet — we never hold keys or funds.
Send exactly
Settle on the chains your customers already use
Most crypto processors take custody of your funds — your money sits in their wallets, on their schedule. HashPay is different. We store your receiving addresses, serve them at checkout, and watch the chain. Payments land directly in your wallet. We hold no keys, no balances, nothing to breach.
Three steps from sign-up to your first on-chain payment.
Paste the receiving addresses you already own — one EVM address covers every EVM chain. HashPay only ever needs the public address.
Define your products and prices, then drop the one-line embed on your site — or share a hosted pay link. At checkout we compute an exact, collision-free amount.
The buyer pays from any wallet. We detect it on-chain, wait for confirmations, and fire a signed payment.confirmed webhook. Fulfil and move on.
Not a “watch an address” demo — the edge cases are the product.
No memos, no destination tags, no mix-ups. Each charge gets a unique address+amount slot, with a decimal ladder that never makes a buyer wait.
A single <script> drops a checkout overlay on any site — isolated in a shadow root, so nothing leaks in or out.
Every event is HMAC-signed and carries an idempotency key — verify in constant time, retry safely. detected, confirmed, under/overpaid, expired.
Flip to your pk_test key and run the full checkout + webhook flow with simulated settlement — no wallet, no gas, no waiting on a chain.
Per-chain confirmation depth and receipt re-verification. We never fire confirmed on a transaction that could still vanish.
USDC & USDT on Ethereum, Base, Arbitrum, Polygon, Avalanche, BNB Chain and Solana, plus USDT on Tron — the rails your customers actually hold.
Drop the embed with your publishable key and point a button at a price — the widget does the rest, polling status in real time and confirming the moment it lands. No SDK lock-in, no wallet plumbing — just a script tag and a webhook.
<script src="https://cdn.hashpay.dev/embed.js" data-pk="pk_live_a1b2c3"></script>
<button data-hashpay-price="price_8Qk2vN">Pay with crypto</button>
app.post('/webhooks/hashpay', (req, res) => {
// X-HashPay-Signature: t=<unix>,v1=<hmac>
const [, t, v1] = req.headers['x-hashpay-signature'].match(/t=(\d+),v1=(\w+)/)
const expected = crypto.createHmac('sha256', SECRET)
.update(`${t}.${req.rawBody}`).digest('hex')
if (v1 !== expected) return res.sendStatus(401)
fulfill(req.body.data.paymentId) // you're paid ✓
})
We never touch your money, so we never take a cut — and we never gate features. Every plan is the whole product; the only difference is how much you receive each month.
For getting started.
For growing shops.
For scaling revenue.
For high volume and bespoke needs.
One number decides your plan: USD volume received per month, across all your stores. Outgrow it mid-month and nothing breaks — in-flight payments settle and checkout keeps working through a grace window while you upgrade. Pay yearly and get 2 months free.
Yes — completely. You add your own receiving wallets; we store only the public addresses, serve them at checkout, and watch the chain. Funds always move directly from the buyer to your wallet. We never hold keys, balances, or funds.
No. Because the money never passes through us, we charge a simple flat monthly fee instead of a cut. You keep 100% of every stablecoin you’re paid (you’ll still pay the network’s own gas fees on-chain). Plans differ only by monthly volume received — never by features.
USDC and USDT on Ethereum, Base, Arbitrum, Polygon, Avalanche, BNB Chain and Solana, plus USDT on Tron (Circle sunset USDC there). Stablecoins only by design — the quote unit equals the settlement unit, which is what makes exact-amount matching reliable and removes volatility.
Each charge claims a unique network · token · address · amount slot. If an amount is taken, we serve the next address, then add negligible decimal precision (10.00 → 10.01 → 10.011…). The buyer just pays the exact figure shown — no tags, no mistakes.
You still hear about it. Wrong-amount transfers to your address are detected and reported with their own webhook events (payment.underpaid / overpaid), the buyer sees clear status in the widget, and the funds are in your wallet either way — nothing gets lost in limbo.
Yes. Every account gets test-mode keys (pk_test) that run the full checkout and webhook flow with simulated settlement — no wallet, no gas, no chain. Build and verify your whole integration, then swap in your live key.
Free to start. Live in minutes. Your keys, your money — always.