---
title: Migrating from v1/v2/v3
description: 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. **Old prefixes keep accepting their established operations until a separately announced sunset.** New integrations should use the Unified contract and inspect its live capability state; compatibility acceptance does not prove that every Unified runtime or native signing family is operational.

## The mapping

Equivalent operations across the previous API surfaces are grouped together.
For Superior Skills, these legacy paths are comparison-only: an agent must not
fall back to them when the Unified API has no public equivalent.

| Operation                             | Previous API                                                                                 | Unified API                                                                                            | Change                                                                              |
| ------------------------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- |
| Health check                          | `GET /health`                                                                                | `GET /health`                                                                                          | Direct                                                                              |
| Request API access                    | `POST /auth/sign-in/magic-link`                                                              | [`POST /account/register`, then `POST /account/verify`](/account/registration)                         | Replaced by an OTP flow                                                             |
| List API keys                         | `GET /auth/api-key`                                                                          | [`GET /account/keys`](/account/api-keys)                                                               | Direct                                                                              |
| Create API key                        | `POST /auth/api-key`                                                                         | [`POST /account/keys`](/account/api-keys)                                                              | Direct                                                                              |
| Delete API key                        | `DELETE /auth/api-key/{id}`                                                                  | [`DELETE /account/keys/{id}`](/account/api-keys)                                                       | Direct                                                                              |
| Rename API key                        | `PATCH /auth/api-key/{id}`                                                                   | —                                                                                                      | No public equivalent                                                                |
| Read account identity                 | No dedicated equivalent                                                                      | [`GET /account`](/account/usage)                                                                       | New account, plan, limits, and usage view                                           |
| Read account usage                    | No dedicated equivalent                                                                      | [`GET /account/usage`](/account/usage)                                                                 | New                                                                                 |
| List/read trading accounts            | `GET /v2/account`, `GET /v3/account`                                                        | [`GET /account/{venue}` and `GET /account/{venue}/{id}`](/account/trading-accounts)                    | Explicit venue scope; IDs are Unified-owned                                         |
| Create managed trading wallet         | `POST /v2/account`, `POST /v3/account`                                                       | No public Unified API equivalent                                                                     | Unified API exposes existing venue accounts only                                    |
| Rename trading account                | `PATCH /v2/account/{address}`, `PATCH /v3/account/{address}`                                 | [`PATCH /account/{venue}/{id}`](/account/trading-accounts)                                             | Explicit venue and ownership scope                                                  |
| Read a trading-account wallet         | Venue balance reads                                                                          | [`GET /account/{venue}/{id}/wallet`](/account/trading-accounts)                                        | Full managed-wallet overview for the selected account                              |
| Read venue availability               | `GET /v2/account/{address}/status/{exchange}`, `GET /v3/account/{address}/status/{exchange}` | [`GET /context/venues`](/context/venues), [`GET /wallet`](/wallet/overview)                            | Consolidated capability and wallet-readiness checks                                 |
| Set up a venue wallet                | `POST /v3/account/{address}/hyperliquid`, `/polymarket`, or `/lighter`                       | [`POST /wallet/venues/{venue}/setup`](/wallet/overview)                                                 | Explicit $50 managed-wallet allocation; poll `GET /wallet`                                             |
| List backtests                        | `GET /v1/backtesting`, `GET /v2/backtesting`                                                 | [`GET /runtime/backtests`](/runtime/backtests)                                                         | Direct                                                                              |
| Create backtest                       | `POST /v1/backtesting`, `POST /v2/backtesting`, `POST /v3/backtest`                          | [`POST /runtime/backtests`](/runtime/backtests)                                                        | Creation automatically queues the run                                               |
| Get backtest                          | Versioned `GET` by ID                                                                        | [`GET /runtime/backtests/{id}`](/runtime/backtests)                                                    | Direct                                                                              |
| Read backtest status/result           | Versioned `/status` and `/result` reads                                                      | [`GET /runtime/backtests/{id}`](/runtime/backtests)                                                    | Embedded in the resource                                                            |
| Start backtest                        | Versioned status update                                                                      | —                                                                                                      | Removed; creation queues the run                                                    |
| Update backtest                       | `PATCH /v2/backtesting/{id}`                                                                 | —                                                                                                      | No public equivalent                                                                |
| Delete or cancel backtest             | Versioned `DELETE` by ID                                                                     | [`DELETE /runtime/backtests/{id}`](/runtime/backtests)                                                 | Direct                                                                              |
| Read backtest logs                    | Versioned `GET` logs by ID                                                                   | [`GET /runtime/backtests/{id}/logs`](/runtime/backtests)                                               | Direct                                                                              |
| Check dataset availability            | `GET /v2/backtesting-data/hyperliquid`, `/binance`, or `/aerodrome`                          | [`GET /context/datasets`](/context/datasets), [`GET /runtime/backtests/dataset`](/runtime/backtests)   | Catalog plus exact-market lookup                                                    |
| Scan intelligence                     | `GET /v2/intelligence/scan`                                                                  | [`GET /context/scan`](/context/intelligence)                                                           | New parameters and response schema                                                  |
| Read symbol setup                     | `GET /v2/intelligence/setup/{pair}`                                                          | [`GET /context/setup/{symbol}`](/context/intelligence)                                                 | Renamed identifier and response model                                               |
| Search markets                        | `POST /v3/markets/search`                                                                    | [`GET /context/markets?query=…&limit=…`](/context/markets)                                             | New integrations use only `query` and `limit`                                       |
| Read leaderboard                      | `GET /v2/leaderboard-strategies`                                                             | [`GET /context/leaderboard`](/context/leaderboard)                                                     | Available; reads the apps/api-owned strategy leaderboard                            |
| List/read tracked traders             | `GET /v2/copy-trading/traders`, `GET /v2/copy-trading/traders/{wallet}`                      | [`GET /context/traders`, `GET /context/traders/{wallet}`](/context/leaderboard)                        | Planned; currently `501 feature_not_available`                                      |
| Read candles                          | No dedicated equivalent                                                                      | [`GET /context/candles`](/context/market-data)                                                         | New                                                                                 |
| Read funding                          | No dedicated equivalent                                                                      | [`GET /context/funding`](/context/market-data)                                                         | New                                                                                 |
| List runtime frameworks               | No dedicated equivalent                                                                      | [`GET /runtime/frameworks`](/runtime/frameworks)                                                       | New                                                                                 |
| List deployments                      | Versioned deployment lists                                                                   | [`GET /runtime/deployments`](/runtime/deployments)                                                     | Consolidated                                                                        |
| Create deployment                     | Versioned live and paper creation                                                            | [`POST /runtime/deployments`](/runtime/deployments)                                                    | `framework`, `venue`, and `mode` are request fields                                 |
| Get deployment                        | Versioned `GET` by ID                                                                        | [`GET /runtime/deployments/{id}`](/runtime/deployments)                                                | Direct                                                                              |
| Update deployment metadata            | `PATCH /v2/deployment/{id}`                                                                  | [`PATCH /runtime/deployments/{id}`](/runtime/deployments)                                              | Direct                                                                              |
| Delete deployment                     | Versioned `DELETE` by ID                                                                     | [`DELETE /runtime/deployments/{id}`](/runtime/deployments)                                             | Direct                                                                              |
| Read deployment status                | Versioned `/status` reads                                                                    | [`GET /runtime/deployments/{id}`](/runtime/deployments)                                                | Embedded in the resource                                                            |
| Start or stop deployment              | Versioned status operations                                                                  | [`PUT /runtime/deployments/{id}/status`](/runtime/deployments)                                         | Standardized lifecycle action                                                       |
| Attach deployment credentials         | Versioned `POST` credentials operations                                                      | [`PUT /runtime/deployments/{id}/credentials`](/runtime/credentials)                                    | Method and contract changed                                                         |
| Read deployment credentials           | `GET /v2/deployment/{id}/credentials`                                                        | —                                                                                                      | No standalone secret read; safe metadata may appear on the deployment               |
| Read deployment logs                  | Versioned `GET` logs by ID                                                                   | [`GET /runtime/deployments/{id}/logs`](/runtime/deployments)                                           | Direct                                                                              |
| Read deployment metrics               | Paper profit and pod-proxy reads                                                             | [`GET /runtime/deployments/{id}/metrics`](/runtime/deployments)                                        | Normalized across frameworks                                                        |
| Paper deployment                      | `/v2/paper-deployment` resource tree                                                         | [`POST /runtime/deployments` with `mode: "paper"`](/runtime/paper-trading)                             | Mode becomes a field, not a separate resource                                       |
| Deployment history                    | `GET /v2/deployment-history`                                                                 | [`GET /runtime/deployments`](/runtime/deployments)                                                     | No dedicated history resource                                                       |
| Exit all positions                    | Versioned deployment and portfolio `/exit` operations                                        | —                                                                                                      | No public equivalent                                                                |
| Deposit to a venue                    | Versioned Hyperliquid, Polymarket, and Lighter deposit operations                            | [`POST /wallet/venues/{venue}/setup`](/wallet/overview) after funding `GET /wallet` | Explicit, idempotent $50 minimum allocation; no extra venue or operation GET routes |
| Read deposit history                  | Venue reconciliation reads                                                                   | [`GET /wallet/deposits`](/wallet/deposits)                                                             | Read-only history, not a transfer action                                            |
| Withdraw Hyperliquid funds            | `POST /v3/portfolio/hyperliquid/withdraw` plus v2 withdrawal authorization endpoints         | [`POST /wallet/withdraw/otp` then `POST /wallet/withdraw`](/wallet/withdrawals)                        | Email-login accounts only; two-step OTP-authorized, tracked withdrawal               |
| Withdraw Lighter funds                | `POST /v3/portfolio/lighter/withdraw`                                                        | —                                                                                                      | No public equivalent                                                                |
| Read withdrawal history/status        | Venue reconciliation reads                                                                   | [`GET /wallet/withdrawals`, `GET /wallet/withdrawals/{id}`](/wallet/withdrawals)                       | Unified wallet withdrawals only                                                     |
| Hyperliquid one-time action           | `POST /v2/authorize-and-send/hyperliquid`                                                    | [`POST /runtime/executions`](/runtime/executions)                                                      | Native `{ venue, action }` envelope; existing request shapes stay compatible        |
| Polymarket one-time action            | `POST /v3/authorize-and-send/polymarket`                                                     | [`POST /runtime/executions`](/runtime/executions)                                                      | Native `{ venue, action }` envelope; existing request shapes stay compatible        |
| Lighter signed action                 | `POST /v3/authorize-and-send/lighter`                                                        | —                                                                                                      | No public equivalent                                                                |
| List/read execution records           | No dedicated equivalent                                                                      | [`GET /runtime/executions`, `GET /runtime/executions/{id}`](/runtime/executions)                       | New durable, sanitized records                                                      |
| Hyperliquid brackets                  | `/v2/bracket` resource tree                                                                  | —                                                                                                      | No bracket-resource equivalent                                                      |
| Hyperliquid wallet transfer           | `POST /v2/portfolio/hyperliquid/transfer`                                                    | —                                                                                                      | No public equivalent                                                                |
| Discover the HTTP contract            | Versioned OpenAPI documents                                                                  | [`GET /openapi.json`](/openapi)                                                                        | One authoritative contract                                                          |
| Discover or call MCP                  | No dedicated equivalent                                                                      | `GET /.well-known/mcp.json`, `POST /mcp`                                                               | New                                                                                 |

Existing account-owned legacy v2 Freqtrade backtests on Hyperliquid have a narrower compatibility boundary than newly created Unified API backtests. `GET /runtime/backtests/{id}` can read their persisted terminal `finished` or `error` record by known ID, including only the summary fields originally stored by the previous API; missing canonical result fields are not synthesized. `DELETE /runtime/backtests/{id}` can tombstone those terminal records without contacting the retired runtime workload. This path does not expand list behavior, and active `queued`/`running` status, logs, cancellation, and lifecycle ownership do not migrate through it.

## Native execution migration

Use a trade-scoped API key and `Idempotency-Key`:

```json
{
  "venue": "polymarket",
  "action": {
    "type": "placeMarketOrder",
    "tokenID": "1234567890",
    "side": "BUY",
    "amount": "10",
    "orderType": "FOK"
  }
}
```

The public schema has no action-type allowlist. Execution still requires an operational provider family, an execution-ready managed wallet, and a supported native signing family. Unsupported families return `native_action_unsupported`; incomplete runtime configuration returns `execution_provider_unavailable`. Superior owns credentials, signing, nonce, timestamp, headers, method, path, and endpoint. Never copy signed or credential-bearing fields from a versioned request into the Unified `action`.

Market search for new integrations is:

```http
GET /context/markets?query=BTC%20perpetual&limit=20
```

Deployment lifecycle changes use `PUT /runtime/deployments/{id}/status`; `PATCH /runtime/deployments/{id}` updates metadata 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` — remains available only for compatibility or Terminal-owned flows. Do not adopt it in a new integration. The Unified surface replaces it with the [managed trading wallet](/wallet/overview), [BYOK](/runtime/credentials), and the native execution envelope.

## Timeline

1. **Now** — Unified ships alongside v1/v2/v3; established versioned operations remain compatible.
2. **Runtime rollout** — each Unified capability reports whether its required backend is configured. One-time execution submits supported signing families when operational and otherwise fails closed.
3. **Deprecation** — old prefixes marked deprecated in their OpenAPI spec with `Sunset` headers on responses; migration window announced with dates, per-endpoint.
4. **Sunset** — old prefixes return `410` with a `docs_url` pointing at this page.

Existing `st_live_` keys work on both surfaces throughout — migration never requires re-registering.
