Get started with the API
Control your accounts from your own scripts, bots, and tools: what the API can do, how requests work, and your first call.
What the API is
The Console Client API lets your own code do what you would otherwise click in the dashboard: see which accounts are online, connect and disconnect them, send chat and commands, read chat, run macros, move accounts, work with inventories, and change your connection settings. It is a plain HTTPS and JSON API, so it works from any language that can make a web request.
The API is part of Tier 3 and is currently in beta. You create one API key in Settings → API, and every request carries that key.
| Area | What you can do | Reference |
|---|---|---|
| Accounts | List accounts with live status, connect, disconnect, Connect All, Stop All. | Accounts and connections |
| Chat | Send messages and commands, read the live chat and console feeds. | Chat and console |
| Macros | List saved macros, run one on an account, stop a run, see what is running. | Macros |
| Control | Walk, aim the head, run pathing and mining tasks, read and click inventories. | Movement, tasks, and inventory |
| Settings | Read and change the server address, version, join command, and reconnect settings. | Settings |
Your first request
Create your key
Open Settings → API and click Generate API key. Click Copy and store the key somewhere safe straight away. It is shown only once. API keys and the IP whitelist covers this page in full.
Turn on the IP whitelist
Recommended. Add the public IP of the machine that will send requests, then switch the whitelist on. A stolen key is useless from any other IP.
Check the key works
Call
GET /mewith the key in theAuthorizationheader. A 200 response with your plan means everything is set up.List your accounts
Call
GET /accounts. Each account has anidthat every other account endpoint uses.
curl https://dashboard.consoleclient.com/api/v1/me \
-H "Authorization: Bearer cc-api-YOUR_KEY_HERE"{
"discordId": "123456789012345678",
"plan": { "tier": 3, "maxAccounts": 20, "expiresAt": 1792540800000 },
"rateLimit": { "limit": 120, "windowSeconds": 60, "maxConcurrent": 8 },
"ipWhitelist": { "enabled": true, "count": 1 }
}Base URL and versions
Every endpoint in these guides is relative to this base URL:
https://dashboard.consoleclient.com/api/v1The API is served over HTTPS only. The v1 in the path is the version. New optional fields and new endpoints can appear at any time, so write your code to ignore fields it does not know.
How requests work
| Rule | Detail |
|---|---|
| Authentication | Send Authorization: Bearer cc-api-... on every request. There are no cookies and no sessions. |
| Request bodies | JSON with Content-Type: application/json. A POST that needs no fields can be sent with no body at all. |
| Responses | Always JSON. A successful call answers with HTTP 200. Anything else is an error with an error code, listed in Errors and rate limits. |
| Times | Timestamps are Unix time in milliseconds. 0 means never or not set. Durations say their unit in the field name, such as delayMs. |
| Paths | Lower case, as written in these guides. |
| Rate limit | 120 requests per minute per key and 8 requests in flight at once. Every response carries X-RateLimit-* headers. |
Account IDs
Every account has an id, returned by GET /accounts. For a Microsoft account it is the email you added it with, for a cookie or token account it is the generated address shown in the dashboard, and for an offline account it is the username. The ID never changes, even when the player name does, so store the ID and not the username.
The ID goes straight into the URL. An @ is fine as it is. If an ID contains a space or another unusual character, URL-encode it the way your HTTP library normally does.
POST https://dashboard.consoleclient.com/api/v1/accounts/[email protected]/connectActions are queued, not instant
Your accounts run on backend servers around the world, and the API hands each action to the server that runs the account. A successful response to connect, disconnect, chat, move, or a macro run means the action was accepted and queued, which normally takes well under a second to reach the account. It does not mean the account is already online or that the server accepted the chat message.
To confirm an outcome, read it back: poll GET /accounts/{id} until status is connected, or watch GET /chat for the server’s reply to a command. Endpoints that read live data from an account, such as the inventory, wait for the account to answer and return the real result.
Keep the key on a server
Call the API from a server, a bot, or a script you run yourself. Never put the key in a web page, a browser extension, a mobile app, or anything else you hand to other people: whoever can read the code can read the key. The API does not send CORS headers, so browsers refuse to call it from a page by design.
Where to go next
| Guide | Read it when |
|---|---|
| API keys and the IP whitelist | You are setting up the key, locking it to your IPs, or replacing a leaked key. |
| Accounts and connections | You want status, connect, and disconnect. |
| Chat and console | You want to send commands or react to chat. |
| Macros | You want to trigger the macros you built in the dashboard. |
| Movement, tasks, and inventory | You want to move an account or click through a menu. |
| Settings | You want to switch servers or versions from code. |
| Errors and rate limits | A call failed, or you are planning how often to poll. |
| Code examples | You want working Python, Node.js, and curl to start from. |
Check the troubleshooting guide or return to all guides.