Sandbox vs. Production
How does the sandbox environment differ from the production environment?
The Cybrid sandbox provides a safe, realistic environment to test your integration without affecting live data or funds. This guide covers the key differences between sandbox and production.
Fiat Transfers
All fiat transfers in the sandbox are simulated. No real funds are pulled from or sent to actual bank accounts.
- Deposits: Simulated deposits succeed almost instantaneously.
- Withdrawals: Simulated withdrawals succeed almost instantaneously.
Automatic Funding
To streamline testing, the sandbox automatically fronts funds for operations that would otherwise fail due to a non-sufficient funds (NSF) error. This removes the need to perform deposits before experimenting with trades and withdrawals.
Operations that are auto-funded include:
- Book transfers
- Crypto withdrawals
- Funding transfers
- Trade executions
- Platform and bank fees
To test a real NSF scenario, use the expected_error parameter in your request. This bypasses the auto-funding mechanism for that specific transaction.
POST /api/transfers
{
"quote_guid": "...",
"expected_error": "non_sufficient_funds"
}Crypto Transfers
Deposits
Crypto deposits in the sandbox are on-chain and use testnets. This lets you test real-world deposit scenarios; your Cybrid account balances update to reflect each deposit.
Testnet Information
- BTC: Testnet3
- ETH: Sepolia
- USDC on Ethereum: Sepolia
- SOL: Testnet
- USDC on SOL: Testnet
- MATIC: Amoy
- XLM: Testnet
- USDC on Stellar: Testnet
- USDT on Tron: Testnet
Withdrawals
Crypto withdrawals are simulated and not settled on-chain. They succeed almost instantaneously. The sandbox also fronts funds for crypto withdrawals when an account has insufficient balance.
Liquidity providers don't support buy/sell operations on testnets, so trades can't settle on-chain. Allowing withdrawals of testnet trade funds would create a confusing experience, since the platform would show sufficient balance while the on-chain balance is zero.
Trades
Trades in the sandbox are simulated — there is no on-chain movement of crypto or fiat. They execute against real-world market prices but don't involve liquidity providers.
executedis the terminal trade state in sandbox; trades do not transition tosettlingorcompleted. Liquidity providers do not support trades on testnets, so the final on-chain settlement cannot be performed. Funds are still made available for downstream testing even thoughplatform_availableis not updated to reflect the trade. See Sandbox trades for details.- The sandbox fronts funds for trades if an account has an insufficient balance.
Trade Quote ExpirationTrade quote expiry is not configurable and can vary. Use the
expires_atfield on the quote response to determine when a quote expires.
Testing Trade Failures
The expected_error parameter allows you to simulate trade failures in the sandbox.
POST /api/trades
{
"quote_guid": "...",
"expected_error": "expired_quote"
}Valid values for expected_error are expired_quote and non_sufficient_funds. This parameter is not permitted in the production environment.
Identity Verifications
In the sandbox, you can integrate with an identity provider's sandbox API (e.g., Persona's sandbox) to simulate verification workflows.
Testing Verification Outcomes
The expected_behaviours parameter allows you to simulate specific verification results without completing the full KYC/KYB process.
POST /api/identity_verifications
{
"type": "kyc",
"method": "id_and_selfie",
"customer_guid": "...",
"expected_behaviours": ["passed_immediately"]
}| Behavior | Effect |
|---|---|
passed_immediately | Forces immediate verification approval. |
failed_immediately | Forces immediate verification failure. |
tax_id_not_checked | Simulates a tax ID verification bypass. |
KYB review in the sandboxIn the
sandbox, the Cybrid compliance team does not review identity verifications for business customers (kyb). Instead, a KYB that goes through the Persona flow and goes to review is automatically approved about 1 minute later. Inproduction, these are reviewed and approved by the Cybrid compliance team.To get a
verifiedbusiness customer without going through Persona, create thebusiness_registrationidentity verification withexpected_behaviours: ["passed_immediately"]. The verification is created already completed and skips Persona, so nopersona_inquiry_idis returned and no business associate verifications are required.
External Wallets
Wallet operations in the sandbox are simulated. Addresses aren't validated on-chain, and no blockchain transactions are executed.
API Behavior
Several API parameters are available only in the sandbox for simulating different states and errors. These are rejected in production.
| Parameter | Resource | Valid Values | Purpose |
|---|---|---|---|
expected_error | Trades | expired_quote, non_sufficient_funds | Simulate trade failures. |
expected_state | Payment Instructions, Transfers | pending, in_progress, completed | Force specific outcomes. |
expected_behaviours | Identity Verifications | passed_immediately, failed_immediately, tax_id_not_checked | Control verification results. |
expected_behaviours | Transfers | force_review | Force a transfer into the reviewing state. |
API Rate Limits
Cybrid rate-limits token generation endpoints. POST /oauth/token is limited to 100 requests per source IP every 5 minutes, and /api/customer_tokens is limited to 200 requests per source IP every 5 minutes. If you might exceed these limits, use webhooks to receive event updates and stay within the API rate limits.
Activity Limits
Activity limits in the sandbox are different from production.
- Production: See our guide on Limits and Minimums for details on production limits for individual and business customers.
- Sandbox: Activity limits for both individual and business customers are set to $15,000 daily and $50,000 weekly.
Updated 8 days ago

