DocsAPI

Tasks API

Create, start, pause, edit and stop the same tasks the Tasks page runs.

Every engine on the Tasks page is available from code: Buy, Bundle, Volume, DCA, Ladder, Trailing stop and the rest. Reading needs read; anything that changes a task needs trade, on a key without limits (see API overview & keys).

Routes#

Method & pathDoes
GET /tasksYour tasks
GET /tasks/:idOne task
GET /tasks/:id/executionsIts trades
GET /tasks/:id/postmortemWhy a run stopped or failed
POST /tasksCreate a task
PATCH /tasks/:idEdit it, even while running
POST /tasks/:id/previewWhat the next run would do
POST /tasks/:id/start · /resumeRun it
POST /tasks/:id/pause · /stopPause or stop it
POST /tasks/stop-allStop every running task
DELETE /tasks/:idRemove it. Its history stays
GET /tasks/presets · POST /tasks/presets · DELETE /tasks/presets/:idSaved setups
GET /eventsYour task and trade events, newest first
GET /warmup/candidatesTokens the Warmup engine would trade right now

Create#

POST /tasks

{
  "type": "buy",
  "mint": "7xKX…pump",
  "walletIds": ["812", "813"],
  "label": "morning buys",
  "config": {
    "buyMode": "exact",
    "walletAmounts": { "812": 0.1, "813": 0.05 },
    "minDelayMs": 2000,
    "maxDelayMs": 9000,
    "dryRun": true
  },
  "autostart": true
}
Field
typeThe engine, e.g. buy, bundle, volume, dca, ladder, trailing_stop
mint, walletIdsToken and wallets
configThat engine's settings, the same fields as its form in the app. See the engine's own docs page
chain, label, projectIdOptional
autostarttrue starts it right away. Default false

The response is 201 with the full task:

{
  "id": "6186",
  "projectId": null,
  "chain": "solana",
  "type": "buy",
  "mint": "7xKX…pump",
  "status": "running",
  "config": { "buyMode": "exact", "walletAmounts": { "812": 0.1, "813": 0.05 }, "dryRun": true, "…": "…" },
  "walletIds": ["812", "813"],
  "label": "morning buys",
  "lastError": null,
  "startedAt": "2026-09-16T01:09:24.531Z",
  "stoppedAt": null,
  "createdAt": "2026-09-16T01:09:24.500Z"
}

Wallets must be yours; someone else's wallet id is refused with 403 and code: "wallet_not_allowed". A key with limits gets 403 and code: "key_restricted".

Read#

GET /tasks returns { "tasks": [ … ] }, each in the same shape as the object above. GET /tasks/:id returns one. Task status is idle, running, completed, stopped or failed.

GET /tasks/:id/executions returns { "executions": [ … ] }: one row per trade the task sent, newest first, with its signature, walletId, amounts in base units and whether it was simulated.

Simulate first

Most engines take "dryRun": true in config, and walk through every step without sending. Executions are marked as simulated, and nothing leaves the wallet.

Events#

GET /events is the app's activity feed: every task status change and every trade, as one row each.

{
  "events": [
    { "id": "918273", "ts": "2026-09-16T20:11:02.000Z", "category": "execution", "type": "task_execution", "severity": "success",
      "taskId": "6605", "mint": "7xKX…pump", "walletId": "812", "title": "Buy landed", "data": { "…": "…" } }
  ],
  "nextBefore": "918200"
}

Filter with category (task or execution), taskId, mint or severity (info, success, warn, error); limit up to 200. Pass nextBefore back as ?before= for the older page. You only ever see your own events.

GET /warmup/candidates?chain=solana&limit=20 lists the tokens the Warmup engine's live rule accepts at this moment, with the rule and cache stats — handy before you create a Warmup task.

Follow a task#

Subscribe to the tasks topic on the live stream with a read key. You get a snapshot of your running tasks, then every status change.

See also#