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).
Authorization
LuxorAPIKey Use your API key here.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v2/commander/actions" \ -H "Content-Type: application/json" \ -d '{ "action_type": "Reboot", "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811", "miner_ids": [ "string" ] }'{ "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"}{ "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"}{ "statusCode": 503, "code": "UNAVAILABLE", "error": "Service Unavailable", "message": "Something went wrong. Share this error code with support for assistance: 4bf92f3577b34da6a3ce929d0e0e4736"}