# Rach > Developer documentation for Rach — crypto payment gateway, WaaS, CaaS stablecoin wallets, swaps, 24/7 monitoring and webhooks. ## Docs - [Rach Developer Docs](https://docs.rach.finance/index.md): One platform for crypto payments, programmable wallets, stablecoins and swaps. - [Quickstart](https://docs.rach.finance/guides/quickstart.md): Make your first API-key call in minutes. - [Get your API keys](https://docs.rach.finance/guides/api-keys.md): Where to find your Payments and CaaS API keys. - [Authentication](https://docs.rach.finance/guides/authentication.md): Authenticate server-to-server with your API key. - [Test vs Live](https://docs.rach.finance/guides/environments.md): Sandbox and production — the key prefix decides which. - [Making requests](https://docs.rach.finance/guides/making-requests.md): Base URLs, headers, JSON, idempotency and pagination. - [Errors](https://docs.rach.finance/guides/errors.md): HTTP status codes and error shapes returned by the API. - [Crypto Payment Gateway](https://docs.rach.finance/products/crypto-gateway.md): Accept crypto with hosted checkout or deposit addresses that settle to you. - [Wallet-as-a-Service (WaaS)](https://docs.rach.finance/products/wallet-as-a-service.md): A programmable HD wallet per customer across 9 chains. - [Swap](https://docs.rach.finance/products/swap.md): Same-chain and cross-chain token swaps with quotes and slippage protection. - [CaaS — Money to any phone](https://docs.rach.finance/products/caas.md): Move real money to anyone in the world with a phone number — or run pure USDC/USDT wallets. - [Market Data](https://docs.rach.finance/products/market-data.md): Real-time crypto prices — REST + a streaming WebSocket. - [24/7 Wallet Monitoring](https://docs.rach.finance/products/wallet-monitoring.md): Every WaaS and CaaS wallet is watched around the clock; deposits fire webhooks. - [Webhooks](https://docs.rach.finance/guides/webhooks.md): Signed, retried events with the exact payloads Rach sends. - [Payments API Reference](https://docs.rach.finance/api-reference/introduction.md): Every public Rach Payments endpoint, with live "try it" and code samples. - [List deposit addresses (USDT-USDC only)](https://docs.rach.finance/api-reference/checkout-crypto-gateway/list-deposit-addresses-usdt-usdc-only.md) - [Create a payment session](https://docs.rach.finance/api-reference/checkout-crypto-gateway/create-a-payment-session.md): Creates a hosted crypto payment session. Returns a `payment_url` pointing to the hosted payment page (`/pay/{uuid}`). Requires API key + KYC + business account type. - [List payment sessions](https://docs.rach.finance/api-reference/checkout-crypto-gateway/list-payment-sessions.md) - [Get payment gateway statistics](https://docs.rach.finance/api-reference/checkout-crypto-gateway/get-payment-gateway-statistics.md) - [Verify a payment session status](https://docs.rach.finance/api-reference/checkout-crypto-gateway/verify-a-payment-session-status.md): Checks whether a payment session has been paid. - [Execute a swap](https://docs.rach.finance/api-reference/swap/execute-a-swap.md): Executes a token swap from the customer's WaaS wallet. The routing (on-chain DEX vs cross-chain bridge) is determined automatically — the merchant does not need to know or specify how the swap is fulfilled. - [Get swap history for a customer](https://docs.rach.finance/api-reference/swap/get-swap-history-for-a-customer.md): Returns a paginated list of all swaps executed from this customer's wallet, including status, token pairs, amounts, and transaction hashes. - [Get a swap quote](https://docs.rach.finance/api-reference/swap/get-a-swap-quote.md): Returns a price quote for swapping tokens between any two supported networks and token pairs. No authentication required. - [List all derived addresses across all customers](https://docs.rach.finance/api-reference/waas-wallet-as-a-service/list-all-derived-addresses-across-all-customers.md) - [List all customer wallets](https://docs.rach.finance/api-reference/waas-wallet-as-a-service/list-all-customer-wallets.md) - [Create customer HD wallet](https://docs.rach.finance/api-reference/waas-wallet-as-a-service/create-customer-hd-wallet.md): Creates a BIP39 HD wallet for a customer. The mnemonic is returned only on creation — it is encrypted at rest and is not retrievable again except via `/seed`. Requires API key + KYC + business account. - [Get WaaS fee earnings summary](https://docs.rach.finance/api-reference/waas-wallet-as-a-service/get-waas-fee-earnings-summary.md): Returns the merchant's WaaS transfer fee earnings dashboard: aggregated totals by currency/network, and a paginated recent-fees ledger. Fees are shown in human-readable amounts (not base units). Requires API key authentication + KYC + business account. - [List addresses for a customer](https://docs.rach.finance/api-reference/waas-wallet-as-a-service/list-addresses-for-a-customer.md) - [Live on-chain balances for a customer](https://docs.rach.finance/api-reference/waas-wallet-as-a-service/live-on-chain-balances-for-a-customer.md): Returns **live**, freshly-read on-chain balances for every derived address of the customer wallet — native coin plus supported stablecoins (USDT/USDC where applicable). - [Derive a blockchain address](https://docs.rach.finance/api-reference/waas-wallet-as-a-service/derive-a-blockchain-address.md): Derives a blockchain address for the specified network at the given BIP-44 index. Set `enable_monitoring: true` to have the payment monitor watch this address for incoming deposits and push webhooks. - [Export private key for an address](https://docs.rach.finance/api-reference/waas-wallet-as-a-service/export-private-key-for-an-address.md): Returns the raw private key for a derived address. Requires `wallet:export_key` permission. Use with extreme caution. - [Retrieve seed phrase](https://docs.rach.finance/api-reference/waas-wallet-as-a-service/retrieve-seed-phrase.md): Returns the BIP39 mnemonic for the customer wallet. Requires `wallet:reveal_seed` permission. - [Get transaction history for customer](https://docs.rach.finance/api-reference/waas-wallet-as-a-service/get-transaction-history-for-customer.md) - [Send crypto from customer wallet](https://docs.rach.finance/api-reference/waas-wallet-as-a-service/send-crypto-from-customer-wallet.md): Broadcasts a signed blockchain transaction from the customer's derived address at the given index. - [List top 250 coins by market cap](https://docs.rach.finance/api-reference/market-data/list-top-250-coins-by-market-cap.md): Returns a paginated list of coins ranked by market capitalisation. Data is served from Rach's edge cache — no external quota is consumed per merchant request. - [Get full detail for one coin](https://docs.rach.finance/api-reference/market-data/get-full-detail-for-one-coin.md) - [Market data health check](https://docs.rach.finance/api-reference/market-data/market-data-health-check.md): Returns whether the market data cache is fresh. No authentication required. - [Batch price lookup](https://docs.rach.finance/api-reference/market-data/batch-price-lookup.md): Returns current USD prices for up to 100 coin symbols in one request. - [Single coin price](https://docs.rach.finance/api-reference/market-data/single-coin-price.md) - [CaaS API Reference](https://docs.rach.finance/api-reference/caas-introduction.md): Every Rach CaaS endpoint, with live "try it" and code samples. - [Get FX Conversion Quote](https://docs.rach.finance/api-reference/b2b--fx/get-fx-conversion-quote.md): Returns a locked exchange rate for converting local fiat (XOF, NGN, KES, etc.) to USDC. The returned quote_id must be passed to POST /v1/transfers/send for fiat-denominated transfers. Quotes expire in 60 seconds — check expires_at before use. For direct crypto-to-crypto transfers without FX conversi… - [Swap USDC to USDT](https://docs.rach.finance/api-reference/swaps/swap-usdc-to-usdt.md): Swaps one stablecoin for the other on the customer's smart-contract wallet via the FiatSwapV2 DEX router. Gas is sponsored by the paymaster; Rach's per-chain fee is deducted from the input amount and routed to treasury in the same atomic UserOperation. The response is `202 Accepted` with a `swap_id`… - [Get swap status](https://docs.rach.finance/api-reference/swaps/get-swap-status.md): Returns the in-flight or terminal status of a swap you initiated, including the real on-chain EVM transaction hash once settled. Only swaps belonging to your business are visible. - [Send to any phone or wallet (instant, on-chain)](https://docs.rach.finance/api-reference/b2b--transfers/send-to-any-phone-or-wallet-instant-on-chain.md): Moves USDC between two customer SCWs on Polygon PoS via an ERC-4337 UserOperation. Settlement is on-chain and final within seconds — no banks, no correspondents, no cut-off times. - [Get Customer Stablecoin Balances](https://docs.rach.finance/api-reference/b2b--users/get-customer-stablecoin-balances.md): Returns the live on-chain balances for a customer's Smart Contract Wallet, read directly from Polygon PoS via eth_call — both `balance_usdc` and `balance_usdt`, since Rach supports the two stablecoins equally. Balances reflect settled on-chain state; there is no caching or internal ledger. Phone num… - [Fund Customer SCW (On-Ramp)](https://docs.rach.finance/api-reference/b2b--users/fund-customer-scw-on-ramp.md): Credits a customer's Smart Contract Wallet with USDC on Polygon PoS. This triggers an ERC-20 transfer from the Rach treasury EOA to the customer's SCW address. Debits your internal tenant USDC balance atomically before dispatching — returns 402 if your balance is insufficient. Idempotent: supply a s… - [Confirm Wallet Link with OTP (Consent Step 2)](https://docs.rach.finance/api-reference/b2b--users/confirm-wallet-link-with-otp-consent-step-2.md): Completes linking by submitting the one-time code the customer received. On success your business becomes an operator of the wallet — you can then send and withdraw on the customer's behalf. All existing members are notified via the `user.linked` webhook. - [Request to Link an Existing Wallet (Consent Step 1)](https://docs.rach.finance/api-reference/b2b--users/request-to-link-an-existing-wallet-consent-step-1.md): Starts the consent flow for gaining operating rights on a customer's existing wallet that belongs to another merchant. A one-time code is SMSed to the customer's phone; the customer shares it with you to approve. Complete with POST /v1/users/link/confirm. - [Confirm Phone Number Change with OTP (Consent Step 2)](https://docs.rach.finance/api-reference/b2b--users/confirm-phone-number-change-with-otp-consent-step-2.md): Completes the phone change by submitting the code sent to the new number. The wallet's lookup key is re-pointed to the new phone; the SCW address, balance and history are unchanged. All members of the wallet are notified via the `user.phone_changed` webhook. - [Request Phone Number Change (Consent Step 1)](https://docs.rach.finance/api-reference/b2b--users/request-phone-number-change-consent-step-1.md): Starts a consent-gated phone number change. A one-time code is SMSed to the NEW number — receiving it proves the person controls the destination SIM. The wallet address, balance and history are preserved. Only a member of the wallet may initiate. Complete with POST /v1/users/phone-change/confirm. - [Provision User SCW Address](https://docs.rach.finance/api-reference/b2b--users/provision-user-scw-address.md): Registers a customer by computing their unique deterministic ERC-4337 smart contract wallet (SCW) address on Polygon PoS. The address is derived offline from a cryptographic identity salt — no gas, no on-chain transaction. Safe to call multiple times; returns ALREADY_EXISTS with the same address if… - [Update Customer Phone Number](https://docs.rach.finance/api-reference/b2b--users/update-customer-phone-number.md): Migrates a customer's identity to a new phone number while preserving their exact SCW address, on-chain USDC balance, and full transaction history. Use when a customer loses their SIM or changes their number. Only the phone lookup index is updated — the wallet address is immutable. - [Initiate Off-Ramp Withdrawal](https://docs.rach.finance/api-reference/b2b--users/initiate-off-ramp-withdrawal.md): Sweeps USDC from a customer SCW to the Rach treasury via an ERC-4337 UserOperation on Polygon PoS. Once USDC is confirmed on-chain (CRYPTO_RECEIVED), Rach disburses XOF to the customer via the specified mobile money network. Monitor status via GET /v1/dashboard/withdrawals/{id}. Status lifecycle: PE… ## OpenAPI Specs - [openapi](https://docs.rach.finance/api-reference/openapi.json) - [caas-openapi](https://docs.rach.finance/api-reference/caas-openapi.json)