Priced in USD
Price swings aren’t your problem
You price in dollars and get credited in dollars. USDT, USDC and other stablecoins count 1:1; BTC and other coins are converted at a rate locked for 30 minutes.
Customers pay in USDT, USDC, BTC and 14 other coins on 15 networks. Every payment lands in your balance in US dollars. No blockchain know-how needed, and the keys that move funds never sit on an internet-facing server.
Private beta · 1% per payment, down to 0.5% with monthly volume · no monthly fee, free withdrawals
New to crypto?
You don’t need to understand blockchains to get paid. These three are enough to start.
Priced in USD
You price in dollars and get credited in dollars. USDT, USDC and other stablecoins count 1:1; BTC and other coins are converted at a rate locked for 30 minutes.
Scan & pay
They scan the QR code in an exchange app or crypto wallet. No borders, no bank hours; most payments land in about a minute.
Final
A confirmed transfer can’t be pulled back the way a card payment can, so there are no chargeback disputes. Refunds stay your call.
Ways to get paid
Use a payment link today and plug in the API when you need automation. Both feed the same balance.
Set an amount in your dashboard and get a link and a QR code. Share it in a chat, on your site or your profile; customers open it and pay.
Call one endpoint at checkout and send the customer to our payment page. When the money arrives we notify your server, so orders ship and balances top up on their own.
How money arrives
You start the payment and wait for the money. Addresses, watching the chain, double-checking and notifying your system are on us.
Both agree. Payment confirmed.
Send the amount and your order number; with a payment link the dashboard does it for you. The same order number twice still makes one bill.
On our hosted payment page they pick a coin and network and scan. Every order gets its own address, so payments match orders without memos.
We check the chain every minute and wait for enough confirmations, then a second, independent data source must see the same transfer. Faked payments don’t get through.
It’s credited to your balance in dollars, and you can request a withdrawal any time (each is reviewed by a person; a new payout address waits 24 hours before its first payout). With the API, your server gets a signed notification at the same moment, retried for about two and a half days if it’s down.
Is my money safe?
Our online servers hold only a read-only key: they can create receiving addresses and see balances, but can’t send anything. The keys that move funds are used only in a signing environment kept apart from our online services. Sweeps only go to fixed cold-wallet addresses; payouts to merchants are approved by a person and only go to the merchant’s registered withdrawal address.
Servers hold only a read-only key (xpub). A private key pasted in by mistake is refused.
Receiving wallets are pinned in the deployment config; neither the dashboard nor the database can change them.
A payment counts only when two independent data sources both see it. One bad node can’t fake it.
Request a withdrawal any time, or set requests to open automatically at a balance you choose or every day. Each is reviewed by a person, a new payout address waits 24 hours before its first payout, and every payout shows its on-chain record.
Transactions that move funds are signed in an environment isolated from the online services. Sweeps only go to fixed cold-wallet addresses; payouts to merchants are approved by a person and only go to the merchant’s registered withdrawal address.
If any safeguard is missing, that network pauses payments.
Developers
Create a payment and get a payment page link; receive a notification, check the signature, ship. Try it free on testnets first.
Create with an amount and order number; verify the notification and ship by order number.
Test credentials run on public testnets, and the payment page has a “simulate payment” button.
The same order_id always returns the same bill.
Compatible APIs for Cryptomus, NOWPayments and Coinbase Commerce: same paths, parameters, signatures and webhooks. Swap the domain and keys.
import crypto from "node:crypto";const body = JSON.stringify({ order_id: "order_1042", // idempotency key amount: "42.00", // any amount, in USD currency: "USD", url_callback: "https://shop.example.com/webhooks/crypto",});const sign = crypto.createHash("md5") .update(Buffer.from(body).toString("base64") + process.env.BW_API_KEY) .digest("hex");const res = await fetch("https://blockwallets.io/v1/payment", { method: "POST", headers: { merchant: process.env.BW_MERCHANT, sign, "content-type": "application/json", }, body,});return redirect((await res.json()).result.url);import crypto from "node:crypto";export async function POST(req: Request) { const { sign, ...data } = JSON.parse(await req.text()); const json = JSON.stringify(data).replaceAll("/", "\\/"); const expected = crypto.createHash("md5") .update(Buffer.from(json).toString("base64") + process.env.BW_API_KEY) .digest("hex"); if (sign !== expected) return new Response("bad sign", { status: 401 }); if (data.status === "paid" || data.status === "paid_over") { await credit(data.order_id, data.payment_amount_usd); } return new Response("ok");}POST /webhooks/cryptoContent-Type: application/json{ "type": "payment", "uuid": "6f1c2a7e…", "order_id": "order_1042", "amount": "42.00", "payment_amount_usd": "42.00", "status": "paid", "is_final": true, "network": "tron", "payer_currency": "USDT", "txid": "9c1e…", "sign": "5f0c9b…e9a1"}Paste it into ChatGPT, Claude, Cursor or any coding assistant. It reads our docs, gets the test flow working on testnets, then hands you an acceptance checklist.
Integrate blockwallets crypto payments into my project. 1. First read https://blockwallets.io/llms-full.txt and https://blockwallets.io/agents.md. Follow them over anything you remember about other payment gateways. 2. Start with test credentials on testnets (test mode in the blockwallets dashboard; the payment page has a "simulate payment" button). Don't touch live keys until the whole test flow passes. 3. Create a payment with POST https://blockwallets.io/v1/payment (amount, currency "USD", order_id, url_callback) and send the customer to result.url. 4. Verify every webhook before trusting it: remove "sign", JSON-encode the rest with every "/" escaped as "\/" and non-ASCII characters left as they are (like PHP json_encode($data, JSON_UNESCAPED_UNICODE)), base64 it, append the API key, take the md5 hex and compare it with "sign". 5. Treat status "paid" and "paid_over" as paid. The same order_id always returns the same invoice, so retries are safe; credit each order only once. 6. Keep the merchant ID and API key in environment variables, never in code. When you're done, give me this acceptance checklist with each item checked or explained: - [ ] A test payment is created and result.url opens the payment page - [ ] "Simulate payment" delivers a webhook and its signature verifies - [ ] A webhook with a tampered body or sign is rejected - [ ] The order is marked paid exactly once, even if the webhook arrives again - [ ] Credentials come from environment variables - [ ] What I need to change to go live
Networks
Stablecoins are credited at par, with no exchange rate or spread. BTC, LTC and native coins are quoted at a rate locked for 30 minutes.
| Network | Coins | Arrives in | Minimum |
|---|---|---|---|
| TRON | USDTTRX | ~1 min | $1.00 |
| BNB Smart Chain | USDTUSDCUSD1FDUSDBNB | ~1 min | $1.00 |
| Ethereum | USDTUSDCDAIETH | ~1–18 min | $5.00 |
| Base | USDCDAIETH | ~1–25 min | $1.00 |
| Polygon PoS | USDTUSDCPOL | ~1 min | $1.00 |
| Arbitrum One | USDTUSDCDAIETH | ~1–30 min | $1.00 |
| OP Mainnet | USDTUSDCETH | ~1–25 min | $1.00 |
| Avalanche C-Chain | USDTUSDCAVAX | ~1 min | $1.00 |
| X Layer | USDTUSDCOKB | ~1–20 min | $1.00 |
| Dogecoin | DOGE | ~1–40 min | $1.00 |
| Solana | USDTUSDCSOL | ~1 min | $1.00 |
| TON | USDTTON | ~1 min | $1.00 |
| Litecoin | LTC | ~3–15 min | $1.00 |
| Bitcoin | BTC | ~10–30 min | $5.00 |
| Bitcoin Cash | BCH | ~10–60 min | $1.00 |
Highlighted coins are stablecoins, each credited 1:1 as US dollars. The shorter time is for payments under $1,000. From $1,000, and again from $5,000, we wait for more confirmations, so larger payments take up to the longer time.
Pricing
One set of tiers for every merchant, lowered automatically by last month’s volume. Nothing to negotiate.
1%per payment
Down to 0.5%. The customer pays the network fee.
FAQ
17 coins on 15 networks: USDT, USDC, USD1, FDUSD, DAI, BTC, LTC, DOGE, BCH and the native coins TRX, BNB, ETH, POL, AVAX, OKB, SOL, TON. Networks: TRON, BNB Smart Chain, Ethereum, Base, Polygon PoS, Arbitrum One, OP Mainnet, Avalanche C-Chain, X Layer, Dogecoin, Solana, TON, Litecoin, Bitcoin, Bitcoin Cash. Stablecoins are credited 1:1 in US dollars; other coins are converted at a rate locked for 30 minutes.
1% per payment, lowered automatically by last month’s volume: 0.9% from $50,000, down to 0.5%. No monthly or setup fee, free withdrawals. The customer pays the network fee.
No. Enter an amount in the dashboard to get a payment link and QR code; customers scan and pay, and the money lands in your balance in US dollars. blockwallets handles addresses, confirmations and reconciliation.
Request a withdrawal to your own wallet from the dashboard at any time, or have requests opened automatically once your balance reaches an amount you choose, or every day. Each one is reviewed by a person, and a new payout address waits 24 hours before its first payout. Withdrawals are free and each shows its on-chain transaction.
The keys that can move funds are never on a server that serves the public: they are used only in a signing environment isolated from the online services. Sweeps only go to fixed cold-wallet addresses; payouts to merchants are approved by a person and only go to the merchant’s registered withdrawal address. Internet-facing servers hold only a read-only public key (xpub): they can create receiving addresses and read balances, but cannot send funds.
Only the API domain and the keys. We have a compatible API for each of the three: paths, parameters, the signature algorithm and the webhook format match the original, so your code stays the same.
Yes. Test mode has its own credentials on public testnets, and the payment page has a “simulate payment” button, so you can run payment creation, payment, webhook and signature checks without real money.
We’re opening blockwallets to merchants gradually. Tell us a little about your business and we’ll email you to set up your account. New to crypto? Ask anything in the notes.
Fees: 1% per payment, dropping to 0.9% once last month’s volume reaches $50,000, and down to 0.5% as you grow. See pricing →