Migrating from v1/v2/v3
How every current endpoint maps onto the unified surface.
The current API grew as an engine×venue matrix: /v1 (legacy freqtrade), /v2 (freqtrade·Hyperliquid), /v3 (Nautilus·Polymarket/Lighter) — about 138 endpoints once aliases are counted. The unified surface is ~30. Nothing breaks on day one: old prefixes keep working until a separately announced sunset, and both surfaces run against the same backend.
The mapping
| Today | Unified | Change |
|---|---|---|
POST /auth/sign-in/magic-link (key emailed) | POST /account/register + /verify | OTP relayed by a human; key returned in-band |
POST/GET/DELETE /auth/api-key | /account/keys | Rename only |
GET /v2/backtesting-data/* | GET /context/datasets | One catalog, all venues, now with gaps + releases |
POST /v3/markets/search | GET /context/markets | GET, all venues, backtest_ready flag |
GET /v2/intelligence/scan, /setup/:pair | /context/scan, /context/setup/:pair | Path move; auth now required |
GET /v2/leaderboard-strategies | GET /context/leaderboard | Path move; auth now required |
GET /v2/copy-trading/traders* | GET /context/traders* | Path move |
| (no equivalent) | GET /context/candles, /context/funding | New — datasets get an HTTP surface |
| `POST /v1 | v2/deployment, POST /v3/deployment(s)` | POST /runtime/deployments |
| `PUT | PATCH …/status` (three variants) | PUT /runtime/deployments/:id/status |
GET …/status (separate) | embedded in GET /runtime/deployments/:id | One poll target |
| `/v2 | v3/paper-deployment/*` (7 endpoints) | "mode": "paper" |
…/paper-deployment/:id/profit, pod proxy reads | GET …/metrics | Normalized across frameworks |
POST …/credentials (v2: Privy-only) | PUT …/credentials | BYOK — caller supplies a scoped key |
| `/v1 | v2/backtesting/, /v3/backtest/` | /runtime/backtests |
POST /v2/account (create wallet), /onboarding/create-privy-wallet | implicit — the managed trading wallet auto-creates on first use | No explicit wallet-creation call |
/v2/portfolio/hyperliquid/deposit, /withdraw | GET /wallet · POST /wallet/withdraw | One wallet, allocation on deploy; withdrawals to the verified login wallet only |
Slimmed from the public surface
The remaining custody plumbing — /v2|v3/portfolio transfer/exit variants, /v2|v3/authorize-and-send/*, /v2/bracket, /v3/account/:address/{hyperliquid,polymarket,lighter} bootstrap, /v2/account/login-wallet — becomes internal endpoints behind the Superior Terminal, which keeps its UX unchanged. The unified surface replaces them with two simpler primitives: the managed trading wallet (deposit → allocate-on-deploy → withdraw-to-login-wallet, venue onboarding handled at start) for the default path, and BYOK (your keys, your venue account, client-side onboard ceremony) for self-custody.
Timeline
- Now — this design published for review; current API unchanged.
- Build — unified surface ships alongside v1/v2/v3, same backend.
- Deprecation — old prefixes marked deprecated in their OpenAPI spec with
Sunsetheaders on responses; migration window announced with dates, per-endpoint. - Sunset — old prefixes return
410with adocs_urlpointing at this page.
Existing st_live_ keys work on both surfaces throughout — migration never requires re-registering.