InterposeInvest

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 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

CapabilityStatusDetail
Rebalancing engineRealProduction code path — drift triggers, tolerance bands, sleeve and household logic
Drift calculationRealMulti-dimensional: cash, asset class, sector, risk, factor, sleeve, household
Performance (TWR / MWR)RealProduction calculation engine
Tax lots, wash sales, TLHRealFIFO/HIFO matching, §1091 wash-sale handling, §1233 short-sale rules
Market dataRealReal 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 marketplaceRealThe same model library the product ships with
AI intelligence panelRealRebalance, TLH and concentration-risk alerts run end to end
Order fillsSimulatedRouted to a local FIX 4.2 simulator
CustodySimulatedNo assets are held anywhere
SettlementSimulatedNo DTCC/NSCC submission occurs from your tenant
KYC / identity decisioningSimulatedVendor integration in progress; the decision-time figure is a target, not a measurement
Money movement (ACH, wires)SimulatedFunding 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

firm         SBX{n}              flagged is_sandbox
  └── branch MAIN
        └── rep code SBX{n}R01
              └── portal user   role = advisor, scoped to that rep code

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.

EntityCount
Clients16, grouped into households
Accounts32 — two per client, all on native custody
Account typesRotating — individual, traditional and Roth IRA, joint, trust, custodial (UTMA)
Portfolios4 — Core Growth, Balanced Income, Conservative Income, Global Diversified
CRM client records32 — one per account, so a two-account client appears twice on the Clients page
FundingA ladder from $75,000 to $4.8M, not a flat figure — it straddles the $100K fee-schedule boundary and the $1M/$5M HNW bands
PositionsSeeded — the cash is invested by a real rebalancing run, so lots, orders and transactions are the objects a live book holds
HistoryNone 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

signup ──► PENDING_VERIFICATION ──verify──► ACTIVE ──30d──► EXPIRED ──15d──► PURGED
                                               │
                                               └── deal closed ──► CONVERTED
StateMeaning
PENDING_VERIFICATIONAddress submitted, not yet confirmed. Nothing is provisioned.
ACTIVETenant exists, login works. 30 days from provisioning.
EXPIREDLogin refused. Data is intact. An extension is one update.
PURGEDAccess revoked across the tenant — see the note below on what this does and does not remove.
CONVERTEDYou 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.

GET/api/v1/auth/sandbox/me
POST/api/v1/auth/sandbox/reset

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.

LimitValue
Concurrent active sandbox tenants25 platform-wide
Accounts per tenant100 — exceeding it returns 429. The seeded book uses 32, leaving 68 for your own
Trial length30 days from provisioning
Purge grace after expiry15 days
API requests600/minute per IP (burst 100)
Auth requests10/minute per IP (burst 5)
Signup via the APIShares the 10/minute auth limit
Email domainsDisposable 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 yet

Listed 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

    PURGED marks 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, email support@interposehq.com and 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/self with 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 a read_only key 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 on 429 will hot-loop. The 429 you 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.