Get paid in crypto.
Keep every coin.
TapCoin Pay gives your business a Pay with Crypto button, payment links, invoices and a WooCommerce gateway. Payments go straight from your customer's wallet to yours. We never touch the money.
- XRPConsulting retainer100.806452 XRP · tag 482913$250.00Detected
- USDCWorkshop deposit600.00 USDC · Ethereum$600.00Confirmed
- BTCInvoice #10430.00635298 BTC · bc1q…7m2q$390.00Confirmed
- ETHPayment link: /deposit0.00000000 ETH · 0xA7c3…f1A2$0.00Awaiting
This is what your customer sees.
Pick an asset, see the exact amount, scan or copy, done. Try it below. Nothing here touches a real network.
The exact amount, locked for 15 minutes
We quote the crypto amount from a live price feed at checkout time and hold it while the customer pays. The customer sends exactly that figure. No rounding, no surprises.
Straight to your wallet address
The address on the page is yours. XRP payments carry a destination tag; BTC and ETH payments are matched by unique address or unique amount. Funds never pass through TapCoin Pay.
Confirmed by the chain, not by us
TapCoin Pay watches the ledger, verifies the transaction against the checkout, and then updates your dashboard, emails the receipt and fires your webhook.
Demo rates: XRP $2.48, BTC $61,420, ETH $2,910, USDC $1.00. The QR is a placeholder pattern and does not encode a payment.
Three steps. No custody, ever.
TapCoin Pay sits beside the transaction, never inside it. Your wallets, your keys, your money.
Add your wallet addresses
Paste a receiving address for each asset you accept. For Bitcoin you can add an xpub so every payment gets a fresh address. Addresses only, never keys.
Create a link, button or invoice
Set a price in your currency and pick which assets to accept. Share the link, drop the button on your site, or email the invoice.
Customer pays, chain confirms, dashboard updates
The customer pays from any wallet. TapCoin Pay monitors the chain, verifies the match, and notifies you and the customer.
Every surface your customers already use.
Everything below is included in Pro. Every one of them lands in your own wallet.
Pay buttons
Three lines of HTML. Opens a checkout in a modal on desktop, a new tab on mobile.
<!-- paste anywhere --> <script src="https://tapcoinpay.com/js/tapcoin.js"></script> <button data-tapcoin-button="btn_8f2k1q">Pay with Crypto</button>
Payment links
A URL you can text, email or put in a bio. Fixed amount, or let the customer enter one.
Invoices
Line items, due dates, customer records, email delivery, a paid stamp when the chain confirms. Void or resend any time.
QR and in-person
Type an amount on your phone, show the QR, the customer scans. Works at a counter, a market stall or a service call.
WooCommerce and WordPress
Install the plugin, paste your API key, and Pay with Crypto appears at checkout. Orders update automatically on confirmation.
REST API and webhooks
Create checkouts from your own stack. Signed webhooks tell you when a payment is detected and confirmed.
POST /v1/checkouts { "amount": 25000, "currency": "USD" } // 201 { "id": "co_3kD9…", "status": "created", "checkout_url": "https://tapcoinpay.com/pay/co_3kD9…" }
Custody is where the risk lives. We opted out.
Most crypto processors take your customer's payment, hold it, and pay you later. That model is the source of every frozen balance, every settlement delay and every percentage fee.
No frozen funds
We cannot freeze what we do not hold. There is no TapCoin Pay balance, no withdrawal queue and no compliance hold on money that is already in your wallet.
No settlement delays
The chain settles. You already have it. There is no T+2, no payout schedule and no minimum balance before you can move your own funds.
No percentage skim
We charge a flat subscription because we never touch the transaction. A $50 sale and a $50,000 sale cost you the same: nothing extra.
Flat $19 a month. 0% transaction fees. Ever.
Start free with 20 payments a month. Upgrade when you need invoices, buttons, WooCommerce or the API.
Try it with real payments.
- 20 payments a month
- Payment links and QR
- Dashboard
- 1 wallet per asset
Everything a business needs to get paid.
- Unlimited payments
- Invoices and pay buttons
- WooCommerce plugin
- API and webhooks
- Email receipts
- Custom branding
- CSV export
For teams and multiple storefronts.
- Everything in Pro
- 5 team seats
- Multiple stores
- Custom checkout domain
- Priority support
- Advanced reports
Custom terms for high-volume and regulated businesses.
- Everything in Business
- Unlimited seats
- SLA and onboarding
- Security review
On $10,000 a month: 1% processors take $100. BitPay about $210. TapCoin Pay: $19.
The gap gets wider the more you sell. TapCoin Pay costs the same at $1,000 a month and at $1,000,000.
| Provider | Per transaction | Custody | Notes |
|---|---|---|---|
| TapCoin Pay | 0%, flat $19/mo (Pro) | Non-custodial | XRP, BTC, ETH, USDC straight to your wallet |
| CoinGate | 1% | Custodial | Settles to you on their schedule |
| BitPay | 2% + $0.25 (entry tier) | Custodial | Lower rates need higher volume tiers |
| Coinbase Business | 1% | Custodial | US only |
| NOWPayments | 1% to 1.5% | Custodial | Not available in the US |
| BTCPay Server | 0% | Non-custodial | Self-hosted server required; you run and maintain it |
Competitor pricing as published September 2026; verify on their sites. Network fees are paid by the sender on every provider, including TapCoin Pay.
One request to create a checkout. One webhook to close the loop.
A small, predictable REST API with Stripe-style objects. Idempotency keys, signed webhooks, test mode.
curl https://tapcoinpay.com/v1/checkouts \ -H "Authorization: Bearer tcp_live_…" \ -H "Idempotency-Key: order_1043" \ -H "Content-Type: application/json" \ -d '{ "amount": 25000, "currency": "USD", "description": "Consulting retainer", "assets": ["XRP", "USDC"], "redirect_url": "https://atlaspro.co/thanks", "metadata": { "order_id": "1043" } }'
const res = await fetch("https://tapcoinpay.com/v1/checkouts", { method: "POST", headers: { Authorization: `Bearer ${process.env.TAPCOIN_KEY}`, "Idempotency-Key": "order_1043", "Content-Type": "application/json", }, body: JSON.stringify({ amount: 25000, currency: "USD", description: "Consulting retainer", assets: ["XRP", "USDC"], redirect_url: "https://atlaspro.co/thanks", }), }); const { data: checkout } = await res.json(); // send the customer to checkout.checkout_url
$ch = curl_init('https://tapcoinpay.com/v1/checkouts'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . getenv('TAPCOIN_KEY'), 'Idempotency-Key: order_1043', 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'amount' => 25000, 'currency' => 'USD', 'description' => 'Consulting retainer', 'assets' => ['XRP', 'USDC'], ]), ]); $checkout = json_decode(curl_exec($ch), true)['data']; header('Location: ' . $checkout['checkout_url']);
Amounts are integer minor units: 25000 is $250.00.
Verify a webhook
Every delivery carries TapCoin-Signature: t=<unix>,v1=<hex>. Sign "<t>.<rawBody>" with your endpoint secret and compare.
import { createHmac, timingSafeEqual } from "node:crypto"; function verify(rawBody, header, secret) { const { t, v1 } = Object.fromEntries( header.split(",").map(p => p.split("="))); const expected = createHmac("sha256", secret) .update(`${t}.${rawBody}`).digest("hex"); return Math.abs(Date.now()/1000 - t) < 300 && timingSafeEqual(Buffer.from(v1), Buffer.from(expected)); }
Events
payment.created,payment.detected,payment.confirmedpayment.underpaid,payment.expiredinvoice.created,invoice.paid,invoice.expired
Straight answers.
Do you hold my crypto?
No. Never, not even for a second. Customers pay directly to the wallet address you added. TapCoin Pay only reads public blockchain data to confirm that a matching payment arrived. We do not store, ask for or derive private keys.
Which coins do you support?
XRP on the XRP Ledger, Bitcoin, Ether on Ethereum mainnet and USDC as an ERC-20 on Ethereum mainnet. More assets are added when we can monitor them reliably, not before.
What if a customer underpays?
The checkout shows the exact amount, so this is rare. When it happens, the checkout is marked underpaid, you get a webhook and a dashboard flag, and the customer sees the outstanding balance with the same address. The funds that did arrive are already in your wallet; you decide whether to accept the partial payment or ask for the rest.
Do I need to run a node?
No. TapCoin Pay does the monitoring. You paste a receiving address (or an xpub for Bitcoin) and we watch the chain for you. If you would rather run everything yourself, BTCPay Server is a good self-hosted option.
Is this legal in the US?
TapCoin Pay is non-custodial software: we never take possession of funds, so we do not operate as a money transmitter. Accepting crypto for goods and services is legal in the United States. Tax treatment, record keeping and licensing vary by business and jurisdiction, so we recommend you consult counsel for your situation.
Can I use it in person?
Yes. Open the dashboard on your phone, enter an amount, and show the QR code. The customer scans and pays, and the screen turns green when the chain confirms. No hardware required.
How is the crypto amount calculated?
At checkout time we fetch the current price for the selected asset in your currency from our price feed, convert your fiat price, and lock that amount for 15 minutes. The customer sends exactly that figure. If the quote expires before payment, the customer can refresh it.
What happens with XRP destination tags?
Every XRP checkout gets a unique destination tag, and the QR encodes it along with your address. That is how we match an incoming payment to a specific checkout on a single address. If a customer omits the tag we show a clear warning before they pay, and if a payment arrives without a tag we flag it in your dashboard so you can match it by hand.
Non-custodial checkout for the web.
Add a wallet address, create a payment link, and take your first crypto payment in the next five minutes. Free for 20 payments a month.