Funding
In sandbox, the faucet drips test USDC (and a little ETH for gas) into a wallet so you can exercise payments without real money. It is TEST-only and rate-limited — see the caps in Environments.
| Asset | Default drip | Max per drip |
|---|---|---|
usdc | 250 | 1000 |
eth | 0.02 | 0.02 |
Drips are additionally rate-limited per wallet and per tenant. There is no
live faucet — funding a sb_live_ wallet this way is rejected.
Key endpoints
| Method | Path | Scope | Purpose |
|---|---|---|---|
POST | /v1/wallets/{id}/fund | wallets:fund | Drip an asset into a wallet. |
GET | /v1/faucet/drips | wallets:fund | List drips (optional walletId filter). |
GET | /v1/faucet/drips/{dripId} | wallets:fund | Get one drip. |
Fund a wallet
Body is optional — omit it to get the default 250 USDC. Both asset and
amount are optional fields on FundWalletBody.
- curl
- TypeScript
- CLI
# USDC (specific amount)
curl -X POST https://api.sandbox.safebank.ai/v1/wallets/w_1a2b3c/fund \
-H "X-SafeBank-Api-Key: $SAFEBANK_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "asset": "usdc", "amount": "250" }'
# ETH for gas
curl -X POST https://api.sandbox.safebank.ai/v1/wallets/w_1a2b3c/fund \
-H "X-SafeBank-Api-Key: $SAFEBANK_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "asset": "eth" }'
await sb.wallets.fund('w_1a2b3c', { asset: 'usdc', amount: '250' })
await sb.wallets.fund('w_1a2b3c', { asset: 'eth' }) // 0.02 ETH for gas
// Inspect drip history:
const { drips } = await sb.faucet.listDrips('w_1a2b3c')
sb wallets fund w_1a2b3c --usdc 250
sb wallets fund w_1a2b3c --eth
The response is a Drip. status starts SUBMITTED and moves to CONFIRMED
once the transfer lands (or FAILED, with a failureReason):
{
"id": "d_9z8y",
"walletId": "w_1a2b3c",
"asset": "usdc",
"amount": "250",
"chainId": 84532,
"status": "SUBMITTED",
"txHash": null,
"failureReason": null,
"createdAt": "2026-08-09T12:00:05.000Z"
}
Poll GET /v1/faucet/drips/{dripId} (or sb.faucet.getDrip(id)) until status
is CONFIRMED and txHash is populated before spending the balance.
For live funding, move real USDC into the wallet's Safe address directly on
Base (chainId 8453), or use the Bridge on-ramp surface. The faucet exists
only in sandbox.
Next
- Send a payment from the funded wallet.