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 & path | Does |
|---|---|
GET /tasks | Your tasks |
GET /tasks/:id | One task |
GET /tasks/:id/executions | Its trades |
GET /tasks/:id/postmortem | Why a run stopped or failed |
POST /tasks | Create a task |
PATCH /tasks/:id | Edit it, even while running |
POST /tasks/:id/preview | What the next run would do |
POST /tasks/:id/start · /resume | Run it |
POST /tasks/:id/pause · /stop | Pause or stop it |
POST /tasks/stop-all | Stop every running task |
DELETE /tasks/:id | Remove it. Its history stays |
GET /tasks/presets · POST /tasks/presets · DELETE /tasks/presets/:id | Saved setups |
GET /events | Your task and trade events, newest first |
GET /warmup/candidates | Tokens 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 | |
|---|---|
type | The engine, e.g. buy, bundle, volume, dca, ladder, trailing_stop |
mint, walletIds | Token and wallets |
config | That engine's settings, the same fields as its form in the app. See the engine's own docs page |
chain, label, projectId | Optional |
autostart | true 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.
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#
- Buy, sell & batches: slow batches start a Buy task for you
- How tasks run