What the sandbox does
The Conduit sandbox cluster (https://api.sandbox.conduit.financial) mirrors production with three differences designed to make integration safe and deterministic:
Sandbox is fully isolated: no real chain activity, no third-party calls. You get deterministic outcomes and synthetic artifacts that match the shape of real ones.
- Compliance and Travel Rule are isolated. Sandbox builds never reach upstream compliance services. Outcomes are determined locally by your request data — specifically, by the destination address suffix, fiat account-number suffix, magic
bankNamevalue, or registered-address magic value you submit. - Chain broadcast is isolated. Sandbox does not sign or broadcast to any chain. Withdrawals receive a deterministic synthetic
txHashshaped like a real one, but nothing is wired to a public network and the hash is not visible on any explorer. - Scenario forcing via magic values. Specific address suffixes, account-number suffixes, and magic field values deterministically trigger compliance, Travel Rule, and chain outcomes. See the per-flow guides below.
Sandbox vs. production at a glance
Sandbox-only conveniences (not behavior you get in production).
- Ops liquidity is on-demand. The ops accounts behind every payout (the crypto ops wallet for crypto, the banking-provider account for fiat) are auto-provisioned on first use. Production requires the operator to pre-seed liquidity; sandbox does not. Your first payout never hits an ops 503.
- Chain finality auto-advances. Once a payout clears its gates (including the cosign gate — resolved explicitly via
simulate/cosign, see the warning above), broadcast and chain confirmation run automatically. Wallet creation and deposits also settle without operator action, so you can drive flows end-to-end through HTTP alone. orders/:id/simulate/rate-lock-expiredcancels orders in about 3 seconds via an immediate sweep tick (not the 30-second scheduled sweep).- Forced-failure reasons round-trip 1:1.
transactions/:id/simulate/terminal { outcome: "failed", reason },orders/:id/simulate/conversion-failed { reason }, and address-suffix scenarios all flow the operator-supplied text to the polledGETand to the webhook payload identically. - Force-failing a payout at the cosign gate frees the wallet immediately; the next payout on the same wallet is accepted within milliseconds, with no cooldown.
Where to start
New to the sandbox? Follow the Quickstart to complete your first end-to-end transaction in about 10 minutes. For detailed guides on each transaction type:- Deposits — fiat and crypto deposit simulation, suffix catalog, sender-information gate
- Withdrawals — crypto and fiat withdrawal simulation, chain and cosign scenarios
- Conversions — the FX conversion leg inside orders, rate-stale and provider-unavailable paths
- Onramps — fiat-in to crypto-out orders, full lifecycle
- Offramps — crypto-in to fiat-out orders, full lifecycle
Driving scenarios
Five mechanisms cover every meaningful failure mode:- Crypto destination address suffix (last 8 hex chars on EVM; last 8 Base58 chars on Tron/Solana) — drives compliance and Travel Rule outcomes for crypto withdrawals. See Withdrawal failure paths and Travel Rule scenarios.
- Registered-address magic values — drive the sanctions-screening verdict when registering a wallet address: an address starting with
0x999parks the registration aspending_screening(202), resolved self-service viaPOST /v2/sandbox/wallets/registered-addresses/:id/simulate/compliance-decision; dedicated magic addresses force an immediate rejection (409). See Registered Addresses — Testing in sandbox. - Fiat account-number suffix (last 8 digits of
recipient.accountNumberfor payouts, orsenderInfo.accountNumberfor source deposits) — drives settlement outcomes for fiat payouts and source-funding compliance outcomes for fiat source deposits. See Withdrawals, Deposits, and ONRAMP orders. autoPayout.recipient.bankNamemagic value (SANDBOX_AML_REJECTED,SANDBOX_AML_SANCTIONED) — drives compliance outcomes on the fiat payout leg of OFFRAMP orders. See Offramps.POST /v2/sandbox/.../simulate/*endpoints — advance asynchronous state without waiting for automatic timers: chain finality (payouts/:id/simulate/confirm), fiat settlement (payouts/:id/simulate/settled), order-level failure (orders/:id/simulate/conversion-failed), rate-lock expiry (orders/:id/simulate/rate-lock-expired), counterparty webhook overrides (payouts/:id/simulate/counterparty-webhook), and transaction-level terminal simulation (transactions/:id/simulate/terminal) for withdrawals, deposits, onramps, and offramps. Internal-transfer rows are not simulatable. Conduit-internal movements (conversion legs, ops-to-ops sweeps) settle automatically; their failure paths are still testable via the suffix protocol or armed failure knobs at create-time. See Withdrawal failure paths + chain reference.
Notes
- Suffixes are matched against the last 8 characters of the rail-canonical destination address (lowercased hex for EVM; Base58 verbatim for Tron and Solana).
- Magic suffixes are sandbox-only. Sending the same address against the live API screens through real compliance and Travel Rule services — the suffix has no meaning there.
- Real-customer collision probability for an 8-char hex suffix is ~1 in 4.3 billion. Don’t use magic suffixes in production address books.
- The Sandbox group at the end of the API Reference enumerates every sandbox-only endpoint. These routes exist only on the sandbox host; calling them against the live API returns 404.