Luxor PlatformAPI DocumentationCommanderActions

Get action details

Returns detailed information for a specific commander action including progress and per-miner status.

GET
/v2/commander/actions/{action_id}

Authorization

LuxorAPIKey
authorization<token>

Use your API key here.

In: header

Path Parameters

action_id*string

Action ID

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v2/commander/actions/a-a1b2c3d4-e5f6-7890-abcd-ef1234567890"
{  "id": "a-a1b2c3d4-e5f6-7890-abcd-ef1234567890",  "action_type": "Reboot",  "status": "PENDING",  "site_id": "b0a5fad8-1234-5678-9abc-def012345678",  "created_at": "2026-02-20T12:00:00Z",  "initiated_by": "[email protected]",  "total_miners": 10,  "url": "/v2/commander/actions/a1b2c3d4-e5f6-7890-abcd-ef1234567890",  "description": "Reboot action",  "progress": 75.5,  "success_miners": 7,  "error_miners": 1,  "miners_summary": [    {      "miner_id": "string",      "status": "PENDING",      "miner_ip": "string",      "execution_log_summary": "string",      "failure_code": "string"    }  ]}
{  "statusCode": 400,  "code": "FST_ERR_VALIDATION",  "error": "Bad Request",  "message": "body/end_date Required"}
{  "statusCode": 403,  "code": "7",  "error": "Forbidden",  "message": "[permission_denied] site_id does not belong to this workspace"}
{  "statusCode": 404,  "code": "5",  "error": "Not Found",  "message": "[not_found] agent not found"}

Get actions

Returns a paginated list of commander actions with filtering by site, status and date range.

Create action

Creates a bulk miner action (execution plan) such as reboot, sleep, wake up, or configuration changes. 'Change Temperature Control' requires at least one params.temp_control field, temperatures are in degrees Celsius, and fields a miner model doesn't support are ignored. Thresholds sent together are checked server-side and rejected with 400 if out of order: chip target, hot and dangerous must ascend, and water-inlet hot and startup must not exceed water-inlet dangerous. Its fields dispatch as three groups — the ATM group (enabled, startup_minutes, post_ramp_minutes, minimum_profile, maximum_profile, temperature_buffer, chip_temperature_buffer, water_inlet_temperature_buffer), the power group (minimum_power) and the threshold group (everything else) — and a request spanning more than one produces one Action Log entry per group, of which the response returns one; find the siblings with GET /v2/commander/actions. Every 'Change Temperature Control' request requires the same subscription entitlement as 'Change ATM Settings' (403 otherwise). Both 'Change ATM Settings' and 'Change Temperature Control' can appear as a response action_type, because the two share a downstream step type: an ATM request may read back as 'Change Temperature Control'. Remote commands: 'Install Firmware' (alias 'Install LuxOS'), 'Update Firmware' (alias 'Update LuxOS'), 'Uninstall Custom Firmware' and 'Retrieve Firmware Logs' take no params; 'Retrieve Firmware Logs' targets exactly one LuxOS or Antminer miner. 'Power Configuration' (alias 'Change Mining Profile') requires params.power_settings, one entry per firmware in the selection (offline miners included): luxos takes power_target (500-8000 W) and optional power_limit and minimum_power (minimum_power <= power_target <= power_limit); antminer and whatsminer take profile_step (-1, 0 or 1); fluxos takes power_target or profile_step, not both. 'Run LuxOS Command' requires params.luxos_command with a command and its parameters, as the web form offers them (* = required; values are strings; board_id, fan speeds, min_fans and delay_secs are integers): autotunerset (enabled* true|false); disableboard and enableboard (board_id* >= 0); fanset (speed -1-100, min_speed, max_speed and power_off_speed 0-100, min_fans >= 0); hashboardoptsset (overtemp_auto_recovery true|false, no_pic_protection_mode shutdown_all_boards|shutdown_failing_board); immersionswitch (immersion_mode* on|off); ledset (led* red|green, mode* on|off|blink|auto); netset (dhcp true|false, hostname, ipaddress, netmask, gateway, dnsservers); reboot (board_id* >= 0, delay_secs >= 0); resetminer (none); tempctrlset (target_temp, hot_temp, dangerous_temp). Other parameters are rejected. disableboard, enableboard, immersionswitch, ledset and reboot send the values positionally in that order, the rest as key=value. 'Blink Miner LED' requires params.led_mode: BLINK to start, AUTO to stop. For Install Firmware, Update Firmware, Uninstall Custom Firmware, Power Configuration, Run LuxOS Command and Blink Miner LED, if any online miner in miner_ids cannot run the command on its firmware, the request is rejected with 400 and nothing is sent; offline miners are allowed. A 503 means compatibility could not be checked and nothing was sent; the request can be retried. Firmware commands, Run LuxOS Command and Power Configuration need the matching subscription entitlement (403 otherwise).