DocsAPI

API changelog

Every change to the public API, newest first, with what to update in your code.

The API is versioned in the path (/api/v1). Within v1, fields are only ever added, never removed or renamed, except where this page says so. Machine-readable error codes are stable; the human error text is not.

2026-09-19 — New address, no write limits#

Changed

  • The API moved to https://api.vortexdeployer.com: REST base https://api.vortexdeployer.com/api/v1, streams wss://api.vortexdeployer.com/ws. The old dev.vortexdeployer.com address was retired the same day — calls there now answer 404 naming this address; update your config.
  • Writes are no longer rate-limited. Buys, sells, batches and launches have no per-minute cap anymore, per key or per account. Only reads (GET) keep their bucket (300/min per key, 600/min per account), and X-RateLimit-* headers now ride read answers only. If you paced trades against the old 60/min, you can stop.
  • MCP _meta.rateLimit now appears on read tool calls only.

2026-09-19 — OAuth 2.1 for the MCP endpoint#

Added

  • The MCP endpoint is now also an OAuth 2.1 authorization server, so OAuth-only MCP clients — Claude.ai custom connectors among them — can connect: discovery (/.well-known/oauth-authorization-server and …/oauth-protected-resource at the API host root), dynamic client registration (POST /v1/oauth/register), authorization code + PKCE (S256 only) with consent in the webapp, rotating refresh tokens and revocation. See OAuth for connectors.
  • A grant is bound to one of your API keys, picked at consent. The vdo_… access token it issues works everywhere a vd_ key does — MCP, REST, streams — with that key's scopes and caps; revoking the key ends the grant.
  • A 401 on POST /mcp now carries a WWW-Authenticate header pointing at the protected-resource metadata (RFC 9728).

Changed

  • Nothing about vd_ keys: they work exactly as before, and every existing client needs no update.

2026-09-17 — Faster two-sided Volume, trading-bot markers#

Added

  • volume tasks in the Mixed style (a config with no mode, or mode: "mixed"): maxInFlight (1–50, trades out at once, one per wallet), maxSameSideStreak and maxNetBuySol (0 = off). See Volume.
  • markerPlatforms on volume (Mixed) and warmup configs: any of PHOTON, TROJAN, BULLX, AXIOM1, AXIOM2, no repeats, default []. Each trade also sends 10 lamports to that bot's fee wallet. Solana only.

Changed

  • minDelayMs / maxDelayMs on a Mixed volume config now start at 20 (was 250) and are the gap between sends, not between confirmations.
  • maxNetBuySol measures what the run still holds — the SOL it paid for the tokens it hasn't sold back — not buys minus sells. Round-trip fees and slippage made the old reading grow on their own and pin a long run at the cap while it held nothing.
  • maxConsecutiveErrors counts bad moments, not failed trades: with maxInFlight above 1 the extra trades that a single bad moment takes down with it are forgiven once (the effective threshold is maxConsecutiveErrors + min(maxInFlight, wallets) − 1).
  • Sells routed through a temporary wallet carry no markerPlatforms tag — the throwaway wallet signs them, so the tag would label the wrong wallet. POST /tasks/:id/preview names how many of the task's wallets sell that way.

2026-09-16 — Launch tasks inline on the launch#

Added

  • tasks[] on POST /launch is now a typed list of launch tasks: type (one of the 14 launch engines), walletIds, config, label, autostart. No chain (the launch's) and no pre-created task. Settings are validated at the door with the engine's own rules (400 validation_failed naming tasks[i].config); wallets must be yours and on the key's list. POST /launch/affordability takes the same shape. The launch MCP tool shows the full task schema. See Launch tasks.

Changed

  • tasks[] used to be forwarded unchecked, with chain required on every task. A task with a chain field is now refused; drop it.

2026-09-16 — Everything the app does, on the API#

Every account action the app offers that makes sense from code is now a route, each with an MCP tool of the same name. Key management stays in the app on purpose (a key that could create keys would be a way around its own limits), and no route returns a private key.

Added

  • Wallets: GET/POST /wallets/groups, PATCH/DELETE /wallets/groups/:id; groupId on PATCH /wallets/:id; ?scope=all and ?groupId= on GET /wallets; GET /wallets/:id/profile; GET /wallets/cashback and POST /wallets/cashback/claim. See Wallet groups.
  • Projects: POST /projects (a draft), POST /projects/cto, PATCH/DELETE /projects/:id, GET /projects/:id/wallets, POST /projects/:id/wallets/assign, DELETE /projects/:id/wallets/:walletId, POST /projects/:id/closeout (rehearses by default), POST /pnl/wallet-totals. See Create, edit and delete a project.
  • Launch helpers: GET /launch/readiness, GET /launch/mint-address, POST /launch/clone, POST /launch/affordability, POST /launch/supply-preview, POST /launch/metadata, GET /launch/pons/launch-terms, GET /launch/otcdesks/rewards; supply plans at /supply-plans with POST /supply-plans/:id/mount. See Before you launch.
  • Trading: POST /convert/assets, /convert/quote, /convert; POST /tokens/burn and /tokens/lock (rehearse by default); GET /tokens/creator-fees and POST /tokens/creator-fees/claim. See Convert.
  • Tasks: GET /events (your activity feed, paged with before) and GET /warmup/candidates. See Events.
  • Account: GET/PATCH /settings/trading, GET/POST /kols, PATCH/DELETE /kols/:address. New page: Account settings from the API.
  • 43 new MCP tools (84 in all).

Rules for keys

  • A key with limits (caps, a wallet list or sandbox) can only rehearse a close-out; a sandbox key can only rehearse burns, locks, conversions and cashback claims.
  • A wallet-list key may only name wallets on its list, in every new route that takes wallet ids.

2026-09-16 — Rename and delete wallets#

Added

  • PATCH /wallets/:id: change a wallet's label (null clears it) or role. See Rename a wallet or change its role.
  • DELETE /wallets/:id: delete a wallet; 409 conflict while a task or a project uses it, ?force=true to delete past the project check. See Delete a wallet.
  • MCP tools update_wallet and delete_wallet.

2026-09-16 — Ask which quotes a launchpad takes#

Added

  • GET /launchpads: every launchpad with its chain, the quoteToken values it accepts and, per quote, whether a pairToken is needed and which dev-buy field applies.
  • GET /launchpads/:launchpad/quotes: what a launch on that launchpad can be quoted in right now, including the live list of tokenized stocks on pump.fun and StonkFun and the pair tokens on pons, each with the exact quoteToken and pairToken to send. See Which quotes can I launch with?.
  • MCP tools list_launchpads and launch_quotes.

2026-09-16 — Import many wallets, into a project#

Added

  • POST /wallets takes privateKeys (a list, up to 100) next to privateKey, and projectId to create or import wallets straight into one of your projects. Imports are all-or-nothing and a wallet you already hold comes back unchanged. See Create or import wallets.

Changed

  • Re-importing a wallet you already hold through POST /wallets no longer resets its role to trading; it is returned as it is.

2026-09-16 — Agent discovery#

Added

  • http://localhost:3000/llms.txt and http://localhost:3000/llms-full.txt: the docs as an index and as one Markdown file for AI agents, and every docs page as Markdown at its address plus .md.
  • GET https://evm.vortexdeployer.com/evm/api/v1 (no key): a JSON index of the REST base, OpenAPI document, MCP endpoint, WebSocket and docs.
  • Build an agent on the API: discovery, authentication and the dry-run-then-commit loop.
  • These docs no longer need sign-in: every /docs page, the API index and the OpenAPI document are readable without an account. Keys are still made in the app.
  • http://localhost:3000/agents.txt: the agent manifest — every address, how a key works, the safety rails and the rules, as Field: value lines. GET https://evm.vortexdeployer.com/evm/api/v1 names it as agentsTxt.

2026-09-16 — MCP server#

Added

  • POST https://evm.vortexdeployer.com/evm/api/v1/mcp: the API as a Model Context Protocol server for Claude, Cursor or any MCP client — one tool per operation, your key as the bearer token, stateless Streamable HTTP. See MCP for AI agents.
  • Every OpenAPI operation now has an operationId (buy, list_wallets, start_task, …). Client generators name methods by it; it is also the MCP tool name.

Removed

  • The unpublished https://evm.vortexdeployer.com/evm/api/v1 and wss://evm.vortexdeployer.com/evm/ws addresses no longer accept API keys: REST answers 404 not_found naming the real address, the socket refuses the key. Use https://evm.vortexdeployer.com/evm/api/v1 and wss://evm.vortexdeployer.com/evm/ws.

2026-09-16 — camelCase answers, error codes, paging, OpenAPI#

Breaking for early keys. If you started before this date, update your code:

  • Every answer is camelCase. pool_addresspoolAddress, expected_outexpectedOut, created_atcreatedAt, wallet_idswalletIds, and so on for every field. Wallet ids and mints used as map keys are unchanged. Live stream frames keep their on-chain snake_case names.
  • Errors carry a code, and trace_id is now traceId: { "code": "insufficient_scope", "error": "…", "traceId": "…" }. Switch on code — see the full table.
  • GET /tasks is wrapped: { "tasks": [ … ] } instead of a bare array. GET /tasks/:id/executions is { "executions": [ … ] }.
  • Internal columns are gone from task rows: user_id, run_seq, execution_epoch.
  • Projects no longer return the stored meta object. Use metadataUri for the token's metadata JSON.
  • Validation messages changed wording, e.g. Too small: expected number to be >0. Match on code: "validation_failed" and details[].path, never on the message.

Added

  • ?limit=&offset= and X-Total-Count on GET /wallets, GET /wallets/balances and GET /portfolio (Paging long lists).
  • X-RateLimit-Reset next to X-RateLimit-Limit and X-RateLimit-Remaining, and retryAfterSeconds in every 429 body.
  • GET /openapi.json: the OpenAPI 3.1 document for the whole REST surface, no key needed.
  • OPTIONS on any route answers 204 with Allow.

2026-09-16 — v1 opened#

First release: keys and scopes, buy / sell / batch, launch, wallets, portfolio and PnL, the tasks router, live streams. See API overview & keys.