Skip to content

Wallet-as-a-Service (WaaS)

Provision and manage HD crypto wallets for your customers across 9 blockchains — with a single API.

The Rach WaaS API lets you create BIP39 HD wallets for end users, derive blockchain addresses on any supported network, monitor deposits in real-time, and send crypto programmatically — all without managing blockchain nodes or key storage infrastructure.

Base URL: https://payments-api-dev-966260606560.europe-west2.run.app
Auth: X-API-Key: live_sk_* (production) · X-API-Key: test_sk_* (sandbox)


Supported Networks

NetworkCodeTypeNativeTokensDerivation Path
BitcoinBTCUTXOBTCm/84'/0'/0'/0/n
Bitcoin CashBCHUTXOBCHm/44'/145'/0'/0/n
LitecoinLTCUTXOLTCm/44'/2'/0'/0/n
Binance Smart ChainBSCEVMBNBBEP-20 (USDT, USDC)m/44'/60'/0'/0/n
EthereumETHEVMETHERC-20 (USDT, USDC, DAI)m/44'/60'/0'/0/n
PolygonPOLEVMPOLERC-20 (USDT, USDC)m/44'/60'/0'/0/n
TronTRXAccountTRXTRC-20 (USDT)m/44'/195'/0'/0/n
SolanaSOLAccountSOLSPL (USDT, USDC)m/44'/501'/0'/0/n
XRPXRPAccountXRPm/44'/144'/0'/0/n

Plans & Wallet Limits

PlanMax Customer WalletsPrice
Starter20$13/mo
Professional100$42/mo
BusinessUnlimited$129/mo
EnterpriseUnlimitedCustom

Deriving additional addresses for an existing customer wallet does not count against the wallet cap — only creating a new POST /wallet/customers entry does.


How It Works

Your Backend

    ├── POST /api/v1/wallet/customers          → Create HD wallet per customer (mnemonic returned once)

    ├── POST /api/v1/wallet/{id}/derive        → Derive BTC address for customer
    ├── POST /api/v1/wallet/{id}/derive        → Derive ETH address for customer
    ├── POST /api/v1/wallet/{id}/derive        → Derive TRX address for customer (enable_monitoring: true)

    ├── GET  /api/v1/wallet/{id}/addresses     → List all derived addresses + live balances

    ├── Webhook: wallet.deposit.detected       → Customer sent USDT to their TRX address
    ├── Webhook: wallet.deposit.confirmed      → Confirmed — safe to credit internal balance

    └── POST /api/v1/wallet/{id}/transfer      → Send crypto out of customer wallet

Quick Start

1. Create a Customer Wallet

bash
curl -X POST 'https://payments-api-dev-966260606560.europe-west2.run.app/api/v1/wallet/customers' \
  -H 'X-API-Key: live_sk_...' \
  -H 'Content-Type: application/json' \
  -d '{ "customer_id": "user_12345", "word_count": 12 }'

Response:

json
{
  "customer_id": "user_12345",
  "wallet_id": 42,
  "mnemonic": ["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident"],
  "created_at": "2026-06-25T14:00:00Z"
}

⚠️ Store the mnemonic immediately and securely. It is shown once only and cannot be retrieved again without the wallet:reveal_seed permission.

2. Derive Deposit Addresses

bash
# Derive a Bitcoin address
curl -X POST 'https://payments-api-dev-966260606560.europe-west2.run.app/api/v1/wallet/user_12345/derive' \
  -H 'X-API-Key: live_sk_...' \
  -H 'Content-Type: application/json' \
  -d '{ "network": "BTC", "index": 0, "enable_monitoring": false }'

# Derive a monitored USDT address on Tron
curl -X POST 'https://payments-api-dev-966260606560.europe-west2.run.app/api/v1/wallet/user_12345/derive' \
  -H 'X-API-Key: live_sk_...' \
  -H 'Content-Type: application/json' \
  -d '{ "network": "TRX", "index": 0, "enable_monitoring": true }'

3. List Balances

bash
curl 'https://payments-api-dev-966260606560.europe-west2.run.app/api/v1/wallet/user_12345/addresses?refresh=true' \
  -H 'X-API-Key: live_sk_...'

4. Enable Deposit Webhooks

Set wallet_webhook_enabled: true in your webhook config:

bash
curl -X POST 'https://payments-api-dev-966260606560.europe-west2.run.app/api/v1/settings/webhook' \
  -H 'Authorization: Bearer <jwt>' \
  -H 'Content-Type: application/json' \
  -d '{ "webhook_url": "https://yoursite.com/webhooks/rach", "wallet_webhook_enabled": true }'

Next Steps

Rach Payments API