---
updatedAt: 2026-08-31T13:02:51.000Z
agentTools:
  projectIndex: https://docs.cybrid.xyz/llms.txt
---

# Sandbox Transfers

What sandbox-specific behavior should I expect when testing transfers?

## Overview

The sandbox environment supports the full transfer API surface but simulates external rails, identity verification, and on-chain networks. Use this guide to anticipate behaviors that differ from production when testing transfers.

For sandbox-specific trade behavior, see [Sandbox Trades](https://docs.cybrid.xyz/docs/sandbox-trades).

## Plaid funding cap

External bank accounts with `account_kind: plaid` are limited to **$100.00 per funding transfer** in sandbox. Transfers above $100.00 fail. There is no limit on the number of $100.00 transfers you can complete to build a balance.

See [Plaid funding](https://docs.cybrid.xyz/docs/plaid-funding) for the full deposit flow.

## Force transfer outcomes with `expected_state`

The `expected_state` field is available **only in sandbox** to force specific transfer outcomes. Add `"expected_state": "pending"` (or another state) to the `POST /api/transfers` request body to exercise your state-handling code without waiting for real rail behavior.

Supported on book transfers, funding transfers, and other transfer types where state machines matter.

## Interac E-Transfer simulation

In sandbox, **Interac E-Transfer deposits complete automatically**. The `gateway_url` returned on the transfer is **not a valid URL** because the sponsor bank does not support the interactive flow in sandbox. Treat the gateway URL as a placeholder when scripting end-to-end deposit tests.

Generating the `gateway_url` can still take time in sandbox because of sponsor bank response times. Use webhook registration with polling as a backup, the same as in production.

See [Interac E-Transfer](https://docs.cybrid.xyz/docs/interac-e-transfer) for the full flow.

## On-chain transfers

For sandbox banks, on-chain wallet addresses are created on the blockchain's associated **development network** (devnet/testnet). Production banks use mainnet. Always send sandbox test transactions on the appropriate devnet — mainnet sends will not reconcile.

### Solana rent setup (sandbox-only)

Solana requires "rent" to generate token deposit addresses. In production, Cybrid pays rent automatically and invoices at the end of the month. In sandbox, **you must fund the rent yourself** or the deposit address will remain in the `storing` state indefinitely.

Follow [Generating USDC deposit addresses on Solana for sandbox banks](https://docs.cybrid.xyz/docs/generating-usdc-deposit-addresses-on-solana-for-sandbox-banks) step-by-step before generating a USDC\_SOL deposit address.

See [Receiving On-Chain Transfers](https://docs.cybrid.xyz/docs/receiving-on-chain-transfers) for the standard on-chain deposit flow.

## Simulated KYC interactions

KYC and Plaid-connected bank account flows are simulated in sandbox. Combined with the $100 Plaid cap, this means a full customer onboarding can run end-to-end in minutes without real bank involvement.

The simulated environment makes it possible to test deposit + trade + withdrawal flows repeatedly, but balances accumulate quickly because each Plaid deposit caps at $100.

## Compliance review simulation

Sandbox transfers may pass through the same `reviewing` state as production transfers, but the hold is simulated. To test compliance-hold handling deterministically, combine `expected_state` with your transfer request to force the desired terminal state.

## Related guides

* [Plaid funding](https://docs.cybrid.xyz/docs/plaid-funding)
* [Interac E-Transfer](https://docs.cybrid.xyz/docs/interac-e-transfer)
* [Receiving On-Chain Transfers](https://docs.cybrid.xyz/docs/receiving-on-chain-transfers)
* [Generating USDC deposit addresses on Solana for sandbox banks](https://docs.cybrid.xyz/docs/generating-usdc-deposit-addresses-on-solana-for-sandbox-banks)
* [Sandbox Trades](https://docs.cybrid.xyz/docs/sandbox-trades)