Skip to main content
Use this workflow when your business needs to add funds and make them available for EasyCard spend. Deposits credit fiat (default ZAR). Card funding requires USDC. Shortcut: create the deposit with fundEasyCard: true to convert and fund the corporate programme automatically after approval (see Create a deposit). The steps below are the manual path.

Before you start

Review the common prerequisites. You need an approved EasyCard application. Card limits are optional but recommended for team cards.

1. Create a treasury deposit

Create a deposit request with the amount in cents of your deposit currency (default ZAR). Optionally set fundEasyCard: true. The response includes a reference and bank details. Start here: Create a deposit

2. Make the bank transfer

Transfer fiat to the returned bank account and include the deposit reference in the payment memo. This lets EasyOnRamp match the incoming payment.

3. Submit proof of payment

Upload proof as multipart/form-data (bankId + proof file) via POST .../deposits/{id}/proof. Start here: Submit proof of payment

4. Wait for deposit approval

Use either approach. You do not need both. Option A: Poll GET /business/treasury/deposits/{id} until status is approved, declined, or expired. See Rate limits if polling. Option B: Subscribe to webhooks. See Deposits (deposit.*). Start here: Deposit status

5. Check treasury balance

After approval, confirm your fiat balance (for example ZAR available) increased. Start here: Check balance

6. Convert ZAR to USDC

Submit a buy order. Treasury is debited and credited immediately, same as retail buy/sell. Card programmes debit USDC from treasury; ZAR alone cannot fund cards. Subscribe to trade.approved or confirm with GET /business/treasury/balance. Start here: Trading

7. Fund the corporate card programme

Move USDC from business treasury to the company Rain pooled contract with POST /wallet/fund. Use either approach. You do not need both. Option A: Poll GET /wallet/funds/{id} until status is completed or failed. See Rate limits if polling. Option B: Subscribe to webhooks. See Card wallet movements (card.fund.*). Start here: Fund and withdraw Set spend limits per card with POST /cards/{cardId}/limits. See Apply spending limits.

Status events to subscribe to