API overview & keys
Trade, launch and run tasks from your own code with an API key — what a key can do, how to call it, and how to keep it safe.
The VortexDeployer API does everything the app does: buy, sell, launch, run tasks, read your wallets and PnL, and stream live trades. Every call acts as your account, so a trade made from code shows up on your Dashboard, Portfolio and Tasks pages exactly like one made by hand.
Open API in the header, the footer or the avatar menu to manage keys, see usage, read these docs and request new API features.
Base URLs#
| What | URL |
|---|---|
| REST | https://evm.vortexdeployer.com/evm/api/v1 |
| Live streams | wss://evm.vortexdeployer.com/evm/ws |
| OpenAPI 3.1 | https://evm.vortexdeployer.com/evm/api/v1/openapi.json — the whole REST surface, for Postman, Insomnia or a client generator. No key needed |
| MCP | https://evm.vortexdeployer.com/evm/api/v1/mcp — the same operations as tools for Claude, Cursor or any MCP client (MCP for AI agents) |
| API index | GET https://evm.vortexdeployer.com/evm/api/v1 — these addresses as JSON, no key needed |
| For agents | http://localhost:3000/llms.txt — the docs index for AI agents; every page is also Markdown at its address plus .md (Build an agent on the API) |
Every REST call sends the key as a bearer token:
curl https://evm.vortexdeployer.com/evm/api/v1/me \
-H "Authorization: Bearer vd_1a2b3c4d_…"A key looks like vd_1a2b3c4d_…. The short part after vd_ is the prefix, shown in the hub so you can tell keys apart; the rest is the secret.
GET /me returns your user, and the key's name, scopes and limits:
{
"user": { "id": "1", "username": "yourname" },
"key": {
"id": "29",
"name": "my trading bot",
"prefix": "1a2b3c4d",
"scopes": ["read", "trade", "stream"],
"settings": {},
"restricted": false
}
}restricted is true when the key has any limit (a cap, a wallet list or sandbox). A restricted key cannot create, edit or start tasks — see Per-key limits.
What every answer looks like#
- JSON, camelCase. Every field is camelCase (
createdAt,poolAddress,expectedOut), in answers and in the bodies you send. Wallet ids and mints used as map keys are left exactly as they are. - Amounts are strings when they are in a chain's smallest unit (lamports, wei, token base units), so nothing is rounded. Amounts in whole coin (
amountSol,devBuySol) are numbers. - Ids are strings (
"812"), including numeric ones. - Lists are wrapped:
{ "wallets": […] },{ "tasks": […] },{ "executions": […] }. The long ones take?limit=&offset=and reportX-Total-Count— see Paging long lists. - Every error carries a stable
codeyou can switch on, a humanerrorand atraceId— see Limits, retries & errors. - Dates are ISO-8601 strings in UTC.
OPTIONSon any route answers204with the allowed methods.
The full contract, route by route, is the OpenAPI document above.
Create a key#
- API → Keys → Create key.
- Name it after the bot or script that will use it.
- Tick the scopes it needs, and nothing more.
- Set limits if you want them (below).
- Enter your account password if you have one set. Keys that can move funds need it.
- Copy the secret. It is shown once. If you lose it, revoke the key and create a new one.
Anyone holding a key with trade or launch can spend from your wallets. Never put a key in a website, a public repo or a shared chat. Revoke it at once if it leaks.
Scopes#
| Scope | Allows |
|---|---|
read | Wallets, balances, portfolio, projects, PnL, task lists and details |
trade | Buy, sell, batches, creating wallets, creating and running tasks |
launch | Launching tokens |
stream | The txs and pnl live streams |
A call outside the key's scopes returns 403.
Per-key limits#
All limits are optional. Set them when you want a key to do less than your account can.
| Setting | Effect |
|---|---|
| Max per buy | Refuses any single buy above this amount of the chain's coin (SOL on Solana, ETH on EVM) |
| Daily cap | Refuses buys once the key has spent this much today (UTC). A buy that was sent counts even if it failed on chain |
| IP allowlist | The key only works from these IP addresses or ranges |
| Default slippage | Used when a call leaves slippageBps out |
| Allowed wallets | The key may only trade from these wallet ids, and cannot import private keys |
| Sandbox | Only dryRun: true calls go through. Nothing is ever sent on chain |
A key with any cap, a wallet list or sandbox is a restricted key. Task amounts run later and can't be checked against a cap up front, so a restricted key cannot create, edit or start tasks, and may only simulate launches. Use a key with no limits for those.
Create a sandbox key first and send your whole flow with dryRun: true. When it behaves the way you expect, create a real key.
Revoke, edit, delete#
- Revoke stops the key on its next call and closes its live streams. It can't be undone.
- Revoke all stops every key on the account in one go.
- Edit changes name, scopes and limits. The key's open streams close, so reconnect after editing.
- Signing out of the app does not revoke keys.
Revoked keys stay listed under Revoked so you can still see their past usage.
Usage#
API → Usage shows calls per day, how many were accepted, refused (4xx) or failed (5xx), and the busiest keys and routes.