API reference: movement, tasks, and inventory
Walk an account, aim its head, run pathing and mining tasks, and read or click its inventory and open menus.
Before you start
Every endpoint here works on one online account: /accounts/{id}/.... If the account is not running on a backend the answer is 404 not_assigned, so connect it first. These are the same controls as Control → Movement and Control → Inventory, described in Move accounts and run tasks and Use Chat, Control, and Point of View.
Walk
POST /accounts/{id}/move walks the account in a straight line relative to where it is facing.
| Field | Type | Detail |
|---|---|---|
direction | string | forward, backward, left, or right. |
blocks | number | Distance, 1 to 1000. Use this or seconds. |
seconds | number | Duration, 1 to 300. Wins over blocks when both are sent. |
curl -X POST https://dashboard.consoleclient.com/api/v1/accounts/[email protected]/move \
-H "Authorization: Bearer $CC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"direction": "forward", "blocks": 5}'POST /accounts/{id}/stop-moving stops the walk early. No body.
Both answer { "ok": true }. A missing or invalid field answers 400 invalid_request.
Aim the head
POST /accounts/{id}/look turns the head to an exact angle.
| Field | Type | Detail |
|---|---|---|
yaw | number | -180 to 180, the same value the F3 screen shows: 0 is south, 90 is west, 180 or -180 is north, -90 is east. |
pitch | number | -90 to 90. -90 looks straight up, 0 at the horizon, 90 straight down. |
{ "ok": true, "queued": 1 }GET /accounts/{id}/look reads the current angle from the account.
{ "connected": true, "yaw": -90, "pitch": 12.5 }Reading waits for the account to answer. If it does not answer within four seconds the result is 504 command_timeout.
Pathing and mining tasks
POST /accounts/{id}/task starts a task that keeps running until it finishes or you stop it. One task runs per account, and a task ends when the account disconnects.
{
"type": "goto",
"params": { "x": 120, "y": 64, "z": -300, "sprint": true, "allowBreak": false },
"humanize": true
}| Type | Params |
|---|---|
goto | x, y, z required. sprint (default true), allowBreak (default false, lets it break blocks in the way). |
follow | username required. distance 1 to 20 blocks, default 3. |
wander | radius 4 to 96, default 20. blocks 1 to 64 waypoints, default 8. |
circle | radius 2 to 40, default 5. direction cw or ccw. Optional centerX, centerY, centerZ; without them it circles where it stands. |
axis | axis north, south, east, or west. blocks 1 to 2000, default 16. |
mine | blockName such as iron_ore, or mineAll true. count 1 to 2000, default 16. radius 8 to 96, default 32. noMovement true mines only what is in reach. |
stay | duration 5 to 3600 seconds, default 60. |
humanize defaults to true and makes movement look less mechanical. An unknown type or a missing required param answers 400 invalid_request.
GET /accounts/{id}/task reports the running task.
{
"active": true,
"type": "goto",
"desc": "goto",
"startedAt": 1790000470000,
"elapsedMs": 8200,
"params": { "x": 120, "y": 64, "z": -300, "sprint": true, "allowBreak": false }
}With no task running the answer is { "active": false }.
POST /accounts/{id}/task/stop stops the task. No body.
Read the inventory
GET /accounts/{id}/inventory reads the inventory live from the account, plus any chest, shop, or menu it has open.
{
"inventory": {
"accountId": "[email protected]",
"username": "Steve",
"edition": "java",
"selectedHotbarSlot": 0,
"player": {
"id": 0,
"type": "minecraft:inventory",
"title": "",
"slotCount": 46,
"inventoryStart": 9,
"inventoryEnd": 45,
"items": [
{
"slot": 36,
"type": 841,
"name": "diamond_pickaxe",
"displayName": "Diamond Pickaxe",
"count": 1,
"metadata": 0,
"stackSize": 1,
"customName": "",
"lore": [],
"enchantments": [{ "id": "efficiency", "level": 5 }]
}
],
"cursor": null
},
"container": null,
"dialog": null
}
}| Field | Meaning |
|---|---|
player | The account’s own inventory. Only filled slots are listed in items. cursor is the item held on the mouse cursor, if any. |
container | The open chest, shop, or server menu in the same shape, with its title, or null when nothing is open. While a container is open, its slots come first and the player’s slots start at inventoryStart. |
dialog | An open server dialog (Minecraft 1.21.6 and newer), or null. |
selectedHotbarSlot | The held hotbar position, 0 to 8. |
Errors: 409 not_connected when the account is offline, 504 timeout when it did not answer in time, 404 not_assigned or account_missing when it is not running.
Click, drop, hold, and close
Each of these answers with the fresh inventory in the same shape as above, so you can read the result of your click straight from the response.
| Endpoint | Body | What it does |
|---|---|---|
POST /accounts/{id}/inventory/click | slot, mouseButton, mode, optional playerOnly | Clicks a slot in the open container, or in the player inventory when nothing is open. playerOnly true always targets the player inventory. |
POST /accounts/{id}/inventory/drop | slot, optional dropAll | Drops one item from the slot, or the whole stack with dropAll true. |
POST /accounts/{id}/inventory/hold | slot | Selects a hotbar slot: 0 to 8, or the inventory numbering 36 to 44. |
POST /accounts/{id}/inventory/close | none | Closes the open container or menu. |
| Click field | Values |
|---|---|
slot | The slot number from items, 0 to 500. |
mouseButton | 0 left, 1 right. |
mode | Minecraft’s click mode: 0 normal click, 1 shift click, 2 number key swap (the key goes in mouseButton), 3 middle click, 4 drop. For a shop or menu button use 0. |
curl -X POST https://dashboard.consoleclient.com/api/v1/accounts/[email protected]/inventory/click \
-H "Authorization: Bearer $CC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"slot": 13, "mouseButton": 0, "mode": 0}'Check the troubleshooting guide or return to all guides.