Sandbox environment. Interpose is not a registered broker-dealer and holds no FINRA approval. Every API documented here is available in a simulated evaluation environment only — no client assets are held, no real trades are executed, and no custody is provided. The calculation engines are the production code paths; fills, custody, settlement and KYC decisioning are simulated. What is real and what is simulated →
The sandbox
The engines are real. So are the prices.
The rebalancing engine, drift calculation, performance math, tax-lot accounting and tax-loss-harvesting logic you exercise here are the production code paths — the actual software, not a walkthrough — and the securities you hold are priced by the real market data feed.
That split is deliberate and it is the point of the environment. You are evaluating whether the numbers are right, and synthetic prices would make that impossible to judge. What is simulated is everything downstream of a trading decision: fills, custody, settlement and identity verification.
What is real and what is simulated
| Capability | Status | Detail |
|---|---|---|
| Rebalancing engine | Real | Production code path — drift triggers, tolerance bands, sleeve and household logic |
| Drift calculation | Real | Multi-dimensional: cash, asset class, sector, risk, factor, sleeve, household |
| Performance (TWR / MWR) | Real | Production calculation engine |
| Tax lots, wash sales, TLH | Real | FIFO/HIFO matching, §1091 wash-sale handling, §1233 short-sale rules |
| Market data | Real | Real securities priced by the live feed, delayed rather than real-time. Your seeded book is invested, so it is marked against real prices from the moment you log in |
| Portfolio models and marketplace | Real | The same model library the product ships with |
| AI intelligence panel | Real | Rebalance, TLH and concentration-risk alerts run end to end |
| Order fills | Simulated | Routed to a local FIX 4.2 simulator |
| Custody | Simulated | No assets are held anywhere |
| Settlement | Simulated | No DTCC/NSCC submission occurs from your tenant |
| KYC / identity decisioning | Simulated | Vendor integration in progress; the decision-time figure is a target, not a measurement |
| Money movement (ACH, wires) | Simulated | Funding is a bookkeeping entry |
The boundary is enforced on your tenant, not on the platform
Your tenant's order flow is pinned to the local simulator and to native custody. An account flagged as sandbox cannot dispatch to an external custodian integration, and a request for a correspondent custodian is refused with a 403 naming the constraint — not quietly downgraded. The rule lives in one module every custody-touching path consults, and it keys off the account's own flag — not an environment variable a deploy could flip. Refusing rather than downgrading is a correction. Keeping the requested custodian label while forcing native custody underneath produced accounts labelled DRIVEWEALTH that were not at DriveWealth, and a disclosure screen telling a prospect their SSN had gone to a custodian that never received it.
Precisely: your tenant cannot reach an external custodian. Interpose's own integration testing does run vendor UAT traffic on the same infrastructure, and the isolation between it and your tenant is the same rep-code scoping every firm on the platform runs on.
Your tenant and your seeded book
You are an ordinary advisor to every service on the platform. The alternative — inventing a sandbox role — would have meant auditing roughly 1,265 endpoints across nine services and remembering the new branch in every endpoint written afterwards, which is precisely the shape of failure that produces cross-tenant leaks.
Provisioning creates a book, because an empty tenant demonstrates only that the login works. Read the last row carefully — it is the one that determines what your first few calls return.
| Entity | Count |
|---|---|
| Clients | 16, grouped into households |
| Accounts | 32 — two per client, all on native custody |
| Account types | Rotating — individual, traditional and Roth IRA, joint, trust, custodial (UTMA) |
| Portfolios | 4 — Core Growth, Balanced Income, Conservative Income, Global Diversified |
| CRM client records | 32 — one per account, so a two-account client appears twice on the Clients page |
| Funding | A ladder from $75,000 to $4.8M, not a flat figure — it straddles the $100K fee-schedule boundary and the $1M/$5M HNW bands |
| Positions | Seeded — the cash is invested by a real rebalancing run, so lots, orders and transactions are the objects a live book holds |
| History | None backdated — every lot opens on your provisioning date |
So /accounts, /portfolios and /positions all return a populated book. Performance is the one that stays thin, because nothing is backdated — see Current limits.
Trial lifecycle
| State | Meaning |
|---|---|
| PENDING_VERIFICATION | Address submitted, not yet confirmed. Nothing is provisioned. |
| ACTIVE | Tenant exists, login works. 30 days from provisioning. |
| EXPIRED | Login refused. Data is intact. An extension is one update. |
| PURGED | Access revoked across the tenant — see the note below on what this does and does not remove. |
| CONVERTED | You signed. The tenant becomes a live firm. |
Conversion is a flag flip, not a rebuild. If you go ahead, the firm you explored becomes your live one — models, configuration, fee schedules and exploration history intact. Worth knowing before you decide how much configuration effort to invest during an evaluation.
Reset is authenticated with your own login rather than by email, because an endpoint that re-issued credentials to anyone who knew your address would be a takeover mechanism. Note what it does not do — see Current limits.
Capacity and fair use
This is a small, shared environment. The limits are real and they are published so you can design around them rather than discover them.
| Limit | Value |
|---|---|
| Concurrent active sandbox tenants | 25 platform-wide |
| Accounts per tenant | 100 — exceeding it returns 429. The seeded book uses 32, leaving 68 for your own |
| Trial length | 30 days from provisioning |
| Purge grace after expiry | 15 days |
| API requests | 600/minute per IP (burst 100) |
| Auth requests | 10/minute per IP (burst 5) |
| Signup via the API | Shares the 10/minute auth limit |
| Email domains | Disposable and temp-mail rejected; free-mail accepted |
If signup returns 503 with a JSON body, the platform-wide ceiling is full — email us and we will make room, because that ceiling exists to keep the environment responsive rather than to ration access. A 503 with an HTML body is the edge rate limiter instead; back off and retry.
Sandbox activity never becomes a business figure. Sandbox portfolios are excluded from billing sweeps and from regulatory report generation, and sandbox events are tagged so downstream consumers can filter them.
Current limits
what is not built yetListed so you do not spend an afternoon proving one of them. We would rather publish this than have you find it one item at a time.
Your book has positions, but no history behind them
The seeder funds 32 accounts and invests them through a real rebalancing run, so positions, orders and tax lots are there from the start. What it does not do is backdate anything — every lot opens on your provisioning date, and no valuation snapshots exist before it. Performance, attribution and realised-gain reporting have no series behind them until time passes or you trade. Ask support if you need a book with history for your evaluation.
Reset re-issues your password; it does not re-seed your book
It resets the credential and restarts the 30-day clock, not the data. If you have made a mess of your seeded book and want a clean one, email support — do not assume reset gave you a fresh environment.
Expiry and purge run on an operator sweep, not a timer
The 30-day and 15-day transitions are performed by a sweep we run, not by a scheduler. Until it runs, an expired trial's login keeps working. Treat the durations as our policy rather than as an enforced timer.
Purge revokes access rather than deleting pillar data
PURGEDmarks the signup purged and deactivates the portal login, rep code, API keys and firm. It does not delete the accounts, portfolios and CRM records held by the pillar services. If you need your data actually removed, emailsupport@interposehq.comand ask for it explicitly; we will do it and confirm.Webhooks register, and nothing is dispatched to them
Server-Sent Events and WebSocket both work in your tenant and both carry your book only. Webhooks are the gap: you can register an endpoint and receive a signing secret, and no order, settlement or rebalance event is delivered to it today. The log behind the streams is in-memory and capped at 10,000 events, so it is a live view rather than a replay log — reconcile against REST. Full detail in Events & streaming.
A key's permission group is recorded, not enforced per route
You can issue your own machine credentials —
POST /api/v1/baas/api-keys/selfwith your portal token, ten active keys per firm — and they read resources by id like any other credential. What is not built is per-route scope enforcement, so aread_onlykey is not yet stopped from writing. The firm and rep-code scoping on the key is real and is the isolation that matters; see Authentication.Edge rate limiting returns 503, not 429
The proxy uses its default status and sends no
Retry-After. A client that backs off only on429will hot-loop. The429you will see is application-level — a tenant exceeding its 100-account cap.The SDK base URL differs from the curl base URL
SDKs take
/api/{pillar}; curl takes/api/v1/{pillar}. The clients install from a URL on this domain rather than from PyPI or npm — the commands are on SDKs & tools.