Sandbox vs. Live
Sandbox is a safe place to experiment. Order execution is deterministic: you trigger specific outcomes (full fill, partial fill, cancel) by placing orders with particular field values. Webhooks, events, and the rest of the API behave the same way they do in Live, but nothing here involves real trading or regulated production flows. Live is production. Orders route through our real execution infrastructure, prices come from live market feeds, and onboarding and trading are fully regulated. Sandbox and Live are completely isolated. Each environment has its own databases, credentials, accounts, and webhook subscriptions. Data you create in Sandbox never appears in Live, and vice versa.At a glance
| Sandbox | Live | |
|---|---|---|
| API base URL | https://api-sandbox.engine.usesophic.com | https://api.engine.usesophic.com |
| Credentials | Sandbox client ID and secret (issued at onboarding) | Live client ID and secret (issued separately) |
| Data | Isolated test data | Production customer data |
| Order execution | Deterministic; trigger outcomes with specific order fields. See Testing. | Real market routing and execution |
| Prices | Simulated (market quotes where available, otherwise a fallback price) | Live market feeds |
| Webhooks & events | Same event types and delivery mechanics | Same event types and delivery mechanics |
| Onboarding | Full API flow; compliance integrations use sandbox third-party services | Production compliance and KYC |
API URLs
All endpoints share the same paths in both environments. Only the host changes.| Resource | Sandbox | Live |
|---|---|---|
| Engine API | https://api-sandbox.engine.usesophic.com | https://api.engine.usesophic.com |
| Token endpoint | POST /auth/token | POST /auth/token |
| OpenAPI spec | {base_url}/openapi.json | {base_url}/openapi.json |
Authenticating in Sandbox
Obtain a token the same way you would in Live, but call the Sandbox base URL with your Sandbox client credentials:Orders
Order placement works the same in both environments: same endpoints, request shapes, and validation. The difference is what happens after you submit. In Sandbox, we route orders through a deterministic execution simulator. You control the outcome by setting specific values on the order:- Buy orders: set
cash_amountto"5001"(cancel),"5002"(40% partial fill), or"5003"(full fill). - Sell orders: set
quantityto"20"(25% partial fill) or"12"or less (full fill). - Everything else: default full fill.
Sandbox execution does not mirror production routing, venue behavior, or FIX lifecycles. Use it to test your integration against predictable order and trade outcomes, not to validate production execution logic.
Events and webhooks
Both environments emit the same webhook events and expose them viaGET /events. Delivery mechanics (headers, signatures, retries, deduplication) are identical.
Register webhooks separately in each environment. A Sandbox webhook URL receives Sandbox events only; Live webhooks receive Live events only.
In Sandbox, order-related events fire in quick succession because execution is simulated. In Live, the timing between events reflects real processing and market conditions. See Order lifecycle for status definitions and Testing for Sandbox-specific event sequences.
Recommended workflow
Build against Sandbox
Authenticate with Sandbox credentials, register a webhook, and walk through onboarding and order flows. Use Testing to exercise every order outcome your integration handles.
Verify webhooks and event handling
Confirm signature verification, deduplication, and idempotent processing work correctly. See Verifying signatures and Deliveries & retries.