Crypto Payment Gateway
Accept cryptocurrency payments from customers worldwide — no blockchain experience required.
The Rach Crypto Payment Gateway lets you accept USDT, USDC, and native crypto across 9 blockchains through a single API. You create a checkout session, hand the customer a payment_url, and we handle detection, confirmation, and merchant crediting automatically.
Base URL: https://payments-api-dev-966260606560.europe-west2.run.app
Auth: X-API-Key: live_sk_* (production) · X-API-Key: test_sk_* (sandbox)
SDKs: JavaScript · Python · Go · Flutter
How It Works
1. Your backend → POST /api/v1/checkout/create
(amount, currency, reference, customer_email)
│
2. Rach assigns a unique deposit address
per network, generates a QR code
│
3. Rach → You → { session_id, payment_url, expires_at }
│
4. You redirect customer to payment_url (/pay/{uuid})
OR embed your own UI using the Public Checkout API
│
5. Customer selects network & sends crypto
│
6. Tatum blockchain node detects the deposit
│
7. Rach fires webhook → Your endpoint
event: "payment.confirmed"
│
8. You fulfill the orderSupported Networks & Currencies
| Network | Code | USDT | USDC | Native | Confirmations | Avg Time |
|---|---|---|---|---|---|---|
| Binance Smart Chain | BSC | ✅ | ✅ | BNB | 12 blocks | ~36s |
| Ethereum | ETH | ✅ | ✅ | ETH | 12 blocks | ~3 min |
| Polygon | POL | ✅ | ✅ | POL | 128 blocks | ~4 min |
| Tron | TRX | ✅ | ❌ | TRX | Settlement delay | ~1 min |
| Solana | SOL | ✅ | ✅ | SOL | Settlement delay | ~20s |
| Bitcoin | BTC | ❌ | ❌ | BTC | 6 blocks | ~60 min |
| Bitcoin Cash | BCH | ❌ | ❌ | BCH | 6 blocks | ~60 min |
| Litecoin | LTC | ❌ | ❌ | LTC | Settlement delay | ~10 min |
| XRP | XRP | ❌ | ❌ | XRP | Settlement delay | ~5s |
TRX, SOL, LTC, BCH, XRP use a settlement delay instead of block-depth counting. Webhooks for these networks always show
"confirmations": 0even when fully confirmed — this is expected. Usestatus === "paid"as your authoritative signal.
Plans & Limits
| Plan | Monthly Transactions | Price |
|---|---|---|
| Starter | 5,000 | $13/mo |
| Professional | 50,000 | $42/mo |
| Business | 500,000 | $129/mo |
| Enterprise | Unlimited | Custom |
Limits are automatically skipped in test/sandbox mode (test_sk_*).
Quick Start
1. Install SDK
npm install rachfinance
# or
pip install rachfinance2. Create a Checkout Session
const RachFinance = require('rachfinance');
const rach = new RachFinance({ apiKey: 'live_sk_...' });
const session = await rach.checkout.create({
amount: 100,
currency: 'USD',
customerEmail: 'customer@example.com',
reference: 'ORDER-001',
callbackUrl: 'https://yoursite.com/webhooks/payment',
description: 'Premium subscription',
metadata: { orderId: 'ord_abc123', userId: 'usr_xyz' }
});
// Redirect customer
res.redirect(session.payment_url);from rachfinance import RachFinance
rach = RachFinance(api_key='live_sk_...')
session = rach.checkout.create(
amount=100,
currency='USD',
customer_email='customer@example.com',
reference='ORDER-001',
callback_url='https://yoursite.com/webhooks/payment'
)
redirect_to(session['payment_url'])c, _ := rachfinance.New(rachfinance.WithAPIKey("live_sk_..."))
session, err := c.Checkout.Create(ctx, rachfinance.CreateCheckoutRequest{
Amount: 100,
Currency: "USD",
CustomerEmail: "customer@example.com",
Reference: "ORDER-001",
CallbackURL: "https://yoursite.com/webhooks/payment",
})curl -X POST 'https://payments-api-dev-966260606560.europe-west2.run.app/api/v1/checkout/create' \
-H 'X-API-Key: live_sk_...' \
-H 'Content-Type: application/json' \
-d '{
"amount": 100.00,
"currency": "USD",
"reference": "ORDER-001",
"customer_email": "customer@example.com",
"callback_url": "https://yoursite.com/webhooks/payment",
"payment_method": "crypto"
}'Response 201 Created:
{
"session_id": "a1b2c3d4-e5f6-...",
"payment_url": "https://payments-api-dev-966260606560.europe-west2.run.app/pay/a1b2c3d4-e5f6-...",
"amount": 100,
"currency": "USD",
"status": "pending",
"expires_at": "2026-06-25T14:30:00Z"
}3. Handle the Webhook
const crypto = require('crypto');
app.post('/webhooks/payment', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.headers['x-webhook-signature'];
const expected = crypto
.createHmac('sha256', process.env.WEBHOOK_SECRET) // whsec_...
.update(req.body)
.digest('hex');
if (signature !== expected) return res.status(401).send('Invalid signature');
const event = JSON.parse(req.body);
if (event.event === 'payment.confirmed') {
const { session_id, reference, amount, currency } = event.data;
await fulfillOrder(reference);
}
res.sendStatus(200);
});Next Steps
- Checkout Flow → — Full payment lifecycle with customer UI options
- Webhooks → — Event types, signature verification, retry policy
- Payment Management → — List, verify, and refund payments
- Supported Networks → — Confirmation thresholds and token support
- Testing → — Sandbox guide and test payment simulation
- API Reference → — Complete endpoint documentation
