Control LED blinking
URI: /cgi-bin/blink.cgi
Request Method: POST
Function: Control the LED on the miner control board to flash for miner positioning.
Request Content:
{"blink": true} // Turn on blinking.
{"blink": false} // Turn off blinking.
Response Content:
{"code":"B000"} // Parse to {"blink":true}and execute.
{"code":"B100"} // Parse to {"blink":false}and execute.
{"code":"B001"} // Others.
Curl Command Demonstration:
curl --digest -u root:root -X POST -H "Content-Type: application/json" -d '{"blink": true}' http://192.168.1.1/cgi-bin/blink.cgi
Get LED status
URI: /cgi-bin/get_blink_status.cgi
Request Method: GET
Function: Get miner LED information.(whether it is flashing, whether the miner positioning function is turned on.)
Request Content: Empty
Response Content:
{"blink": true} // Blinking.
{"blink": false} // Not blinking.
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/get_blink_status.cgi
Get list of log dates
URI: /cgi-bin/dlog.cgi
Request Method: GET
Function: Get log date list of the miner.
Request Content: Empty
Response Content: Log date list.
{
"dlog": true,
"log_list":[
"/2025-06/18", // Year-Month/Day.
"/2025-06/19",
"/2025-06/20",
"/2025-06/21",
"/2025-06/22",
"/2025-06/23",
"/2025-06/24",
"/2025-06/25",
"/2025-07/08"
]
}
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/dlog.cgi
Backup logs
URI: /cgi-bin/create_log_backup.cgi
Request Method: POST
Function: Back up logs.
Request Content: The date on which the log will be saved.Check the dates on which logs can be saved from Get list of log dates.Supports log backup for one or more days.
[
"/2025-07/04", // Year-Month/Day.
"/2025-07/05"
]
Response Content: If successful, a file named "antminer_log_202507-04_202507-05.tar" is generated, where 202507-04 is the earliest date of the log and 202507-05 is the latest date of the log.If you only back up one day's log, the file name is "antminer_log2025-07-04.tar",2025-07-04 is the backup date.
{"stats":"success","code":"L000","msg":"antminer_log_2025-07-04_2025-07-05.tar"} // The backup was successful.
{"stats":"error","code":"L[code]","msg":"[msg]"} // Get the failure reason based on "code" and "msg".
Curl Command Demonstration:
curl --digest -u root:root -X POST -H "Content-Type: application/json" -d '["/2025-07/04","/2025-07/05"]' http://192.168.1.1/cgi-bin/create_log_backup.cgi
If the execution is successful, download the log to your local machine using the following command.
curl --digest -u root:root -O http://192.168.1.1/log/antminer_log_2025-07-04_2025-07-05.tar
Get historical logs
URI: /cgi-bin/hlog.cgi
Request Method: GET
Function: Get historical logs of the miner.
Request Content: Empty
Response Content: Log
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/hlog.cgi
Get miner log data
URI: /cgi-bin/log.cgi
Request Method: GET
Function: Get log data of the miner.
Request Content: Empty
Response Content: Log
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/log.cgi
Get miner type and build information
URI: /cgi-bin/miner_type.cgi
Request Method: GET
Function: Get the miner's type and build information.
Request Content: Empty
Response Content:
{
"miner_type": "Antminer S21+",
"subtype": "AMLCtrl_A3HB70XXX",
"fw_version": "Fri Apr 18 16:15:41 CST 2025"
}
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/miner_type.cgi
Get miner’s pool information
URI: /cgi-bin/pools.cgi
Request Method: GET
Function: Get mining pool information for the miner.
Request Content: Empty
Response Content: Mining pool information.
{
"STATUS": {
"STATUS": "S",
"when": 1751944006,
"Msg": "pools",
"api_version": "1.0.0"
},
"INFO": {
"miner_version": "platform[AML]",
"CompileTime": "Fri Apr 18 16:15:41 CST 2025"
},
"POOLS": [
{
"index": 0,
"url": "YOUR_URL_1", // Pool 1 url.
"user": "YOUR_USER_1", // Pool 1 username.
"status": "Alive", // Connection status.
"priority": 0, // Use priority,the smaller the value, the higher the priority.
"getworks": 308, // Number of times the work was requested.
"accepted": 0, // The total number of shares accepted by the pool.
"rejected": 0, // Total number of shares rejected by the pool.
"discarded": 0, // Total number of shares discarded.
"stale": 0, // Total number of shares submitted but expired.
"diff": "1.05M", // The current target difficulty of the pool.
"diffa": 0, // The cumulative difficulty of the accepted shares.
"diffr": 0, // The cumulative difficulty of rejected shares.
"diffs": 0, // The cumulative difficulty of outdated shares.
"lsdiff": 0, // The last successfully submitted share difficulty.
"lstime": "0" // Time since the last share submission.
},
{
"index": 1,
"url": "YOUR_URL_2", // Pool 2 url.
"user": "YOUR_USER_2", // Pool 2 username.
"status": "Dead",
"priority": 1,
"getworks": 0,
"accepted": 0,
"rejected": 0,
"discarded": 0,
"stale": 0,
"diff": "0",
"diffa": 0,
"diffr": 0,
"diffs": 0,
"lsdiff": 0,
"lstime": "0"
},
{
"index": 2,
"url": "YOUR_URL_3", // Pool 3 url.
"user": "YOUR_USER_3", // Pool 3 username.
"status": "Dead",
"priority": 2,
"getworks": 0,
"accepted": 0,
"rejected": 0,
"discarded": 0,
"stale": 0,
"diff": "0",
"diffa": 0,
"diffr": 0,
"diffs": 0,
"lsdiff": 0,
"lstime": "0"
}
]
}
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/pools.cgi
Reboot miner
URI: /cgi-bin/reboot.cgi
Request Method: GET
Function: Reboot the miner.
Request Content: Empty
Response Content:
Status 200 // Executed successfully.
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/reboot.cgi
Clear miner configuration
URI: /cgi-bin/reset_conf.cgi
Request Method: GET
Function: Clear miner configuration.
Request Content: Empty
Response Content:
Status 200 // Executed successfully.
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/reset_conf.cgi
Get IP configuration
URI: /cgi-bin/get_network_info.cgi
Request Method: GET
Function: Get IP configuration information.
Request Content: Empty
Response Content: IP configuration information.
{
"nettype": "DHCP",
"netdevice": "eth0",
"macaddr": "02:34:DA:F1:EB:5D",
"ipaddress": "192.168.1.99",
"netmask": "255.255.255.0",
"conf_nettype": "DHCP",
"conf_hostname": "Antminer",
"conf_ipaddress": "",
"conf_netmask": "",
"conf_gateway": "",
"conf_dnsservers": ""
}
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/get_network_info.cgi
Modify IP configuration
URI: /cgi-bin/set_network_conf.cgi
Request Method: POST
Function: Modify IP configuration.This API is typically used to enable static IP mode.
Request Content:
For static IP mode, please use the following JSON configuration:
{
"ipHost": "YOUR_HOSTNAME",
"ipPro": 2, // IP address allocation method. 1:DHCP 2:static
"ipAddress":"YOUR_IP_Address",
"ipSub": "YOUR_SUBNET_MASK",
"ipGateway":"YOUR_GATEWAY_IP",
"ipDns": "YOUR_DNS_SERVER_IP"
}
For DHCP mode, please use the following JSON configuration:
{
"ipHost": "YOUR_HOSTNAME",
"ipPro": 1
}
Response Content:
{"stats":"success","code":"N000","msg":"OK!"} // Modification successful.
{"stats":"error","code":"N[code]","msg":"[msg]"} // Get the failure reason based on "code" and "msg".
Curl Command Demonstration:
curl --digest -u root:root -X POST -H "Content-Type: application/json" -d '{"ipHost":"Antminer","ipPro":2,"ipAddress":"192.168.137.4","ipSub":"255.255.255.0","ipGateway":"192.168.137.1","ipDns":"8.8.8.8"}' http://192.168.1.1/cgi-bin/set_network_conf.cgi
Get miner configuration
URI: /cgi-bin/get_miner_conf.cgi
Request Method: GET
Function: Get the configuration of the miner.(mining pool, running mode)
Request Content: Empty
Response Content:
{
"pools": [
{
"url": "", // Pool 1 url.
"user": "", // Pool 1 username.
"pass": "" // Pool 1 password.
},
{
"url": "", // Pool 2 url.
"user": "", // Pool 2 username.
"pass": "" // Pool 2 password.
},
{
"url": "", // Pool 3 url.
"user": "", // Pool 3 username.
"pass": "" // Pool 3 password.
}
],
"bitmain-user-ip-cat": false, // Whether to append IP as a suffix to the pool username.
"bitmain-fan-ctrl": false, // Whether the fan can be controlled manually.
"bitmain-fan-pwm": 100, // The fan's current PWM(0-100).
"bitmain-work-mode": 0 // Operation mode: 0:Normal mode, 1:Sleep mode, 2:High-performance mode, 3:Low-power mode.
}
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/get_miner_conf.cgi
Get adjustable range of hashrate percent
URI: /cgi-bin/get_adjustment_params.cgi
Request Method: GET
Function: Get an adjustable range of hashrate.
Request Content: Empty
Response Content:
{
"hashrate_percent_min": 50,
"hashrate_percent_max": 100
}
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/get_adjustment_params.cgi
Modify miner configuration
URI: /cgi-bin/set_miner_conf.cgi
Request Method: POST
Function: Modify miner configuration.(mining pool, operation mode, hashrate percent)
Request Content: All key-value pairs that need modification.
{
"bitmain-work-mode":"2", // Operation mode: 0:Normal mode, 1:Sleep mode, 2:High-performance mode, 3:Low-power mode.
"bitmain-hashrate-percent": "98", // The hashrate-percent that will be set.Adjustable range reference: Get adjustable range of hashrate.
"pools":[
{"url":"YOUR_NEW_URL_1", // Pool 1 url.
"user":"YOUR_NEW_USER_1", // Pool 1 username.
"pass":"YOUR_NEW_PASS_1" // Pool 1 password.
},
{"url":"YOUR_NEW_URL_2", // Pool 2 url.
"user":"YOUR_NEW_USER_2", // Pool 2 username.
"pass":"YOUR_NEW_PASS_2" // Pool 2 password.
},
{"url":"YOUR_NEW_URL_3", // Pool 3 url.
"user":"YOUR_NEW_USER_3", // Pool 3 username.
"pass":"YOUR_NEW_PASS_3" // Pool 3 password.
}
]
}
Response Content:
{"stats": "success", "code": "M000", "msg": "OK!"} // Modification successful.
{"stats": "error", "code": "M001", "msg": "Illegal request!"} // Modification failed.
Curl Command Demonstration:
curl --digest -u root:root -X POST -H "Content-Type: application/json" -d '{"bitmain-work-mode":"2","bitmain-hashrate-percent": "98","bitmain-energy-consumption":"31","pools":[{"url":"YOUR_NEW_URL_1","user":"YOUR_NEW_USER_1","pass":"YOUR_NEW_PASS_1"},{"url":"YOUR_NEW_URL_2","user":"YOUR_NEW_USER_2","pass":"YOUR_NEW_PASS_2"},{"url":"YOUR_NEW_URL_3","user":"YOUR_NEW_USER_3","pass":"YOUR_NEW_PASS_3"}]}' http://192.168.1.1/cgi-bin/set_miner_conf.cgi
ATTENTION:
Supports individual configuration of key-value pairs. For firmware versions before May 20th, if only the mode is switched without changing the pool, the pool settings will be reset to zero.
Get miner status
URI: /cgi-bin/stats.cgi
Request Method: GET
Function: Get the status of the miner.
Request Content: Empty
Response Content:
{
"STATUS": {
"STATUS": "S",
"when": 1751944531,
"Msg": "stats",
"api_version": "1.0.0"
},
"INFO": {
"miner_version": "platform[AML]",
"CompileTime": "Fri Apr 18 16:15:41 CST 2025",
},
"STATS": [
{
"elapsed": 0, // Elapsed time.
"rate_5s": 0.00, // Hashrate in the last 5 seconds.
"rate_30m": 0.00, // Hashrate in the last 30 minutes.
"rate_avg": 0.34, // Average Hashrate.
"rate_ideal": 16830.0, // Theoretical Hashrate.
"rate_sale": 225000, // Sales of Hashrate.
"rate_unit": "GH/s",
"chain_num": 3,
"fan_num": 4,
"fan": [
4560, // Fan speed.
4560,
4530,
4530
],
"miner-mode": 0, // Operation mode: 0:Normal mode, 1:Sleep mode, 2:High-performance mode, 3:Low-power mode.
"freq-level-mode": false, // Whether to enable dynamic frequency adjustment.
"freq-level-min": 50, // Miner minimum frequency level.
"freq-level": 100, // Current frequency level of the miner.
"watt": 0, // Power consumption.
"jt": 0.00, // Energy consumption per unit Hashrate.
"ambient_temp": 34.50, // Ambient temperature.
"chain": [
{
"index": 0,
"freq_avg": 708, // The average frequency of the chain.
"rate_ideal": 5610.0, // Theoretical Hashrate.
"rate_real": 0.00, // Real Hashrate.
"asic_num": 55,
"temp_pic": [
40,
40,
50,
50
],
"temp_pcb": [
50,
50,
60,
60
],
"temp_chip": [
55,
55,
65,
65
],
"eeprom_loaded": true, // Whether the EEPROM configuration loaded.
"sn": "JYZZYT0BEJCAH002M", // Serial number.
"eeprom_level": 1,
"eeprom_vol": 1331,
"eeprom_freq": 708,
"eeprom_bin": 2,
"eeprom_ft": "F1V01B4C2",
"tpl": [ // ASIC arrangement in chain.
[1,2,3,4,5],
[10,9,8,7,6],
[11,12,13,14,15],
[20,19,18,17,16],
[21,22,23,24,25],
[30,29,28,27,26],
[31,32,33,34,35],
[40,39,38,37,36],
[41,42,43,44,45],
[50,49,48,47,46],
[51,52,53,54,55]
]
},
{
"index": 1,
"freq_avg": 710,
"rate_ideal": 5610.0,
"rate_real": 0.00,
"asic_num": 55,
"temp_pic": [
40,
40,
49,
49
],
"temp_pcb": [
50,
50,
59,
59
],
"temp_chip": [
55,
55,
64,
64
],
"eeprom_loaded": true,
"sn": "JYZZYT0BEJCAH002J",
"eeprom_level": 1,
"eeprom_vol": 1331,
"eeprom_freq": 710,
"eeprom_bin": 2,
"eeprom_ft": "F1V01B4C2",
"tpl": [
[1,2,3,4,5],
[10,9,8,7,6],
[11,12,13,14,15],
[20,19,18,17,16],
[21,22,23,24,25],
[30,29,28,27,26],
[31,32,33,34,35],
[40,39,38,37,36],
[41,42,43,44,45],
[50,49,48,47,46],
[51,52,53,54,55]
]
},
{
"index": 2,
"freq_avg": 710,
"rate_ideal": 5610.0,
"rate_real": 0.00,
"asic_num": 55,
"temp_pic": [
39,
39,
48,
48
],
"temp_pcb": [
49,
49,
58,
58
],
"temp_chip": [
54,
54,
63,
63
],
"eeprom_loaded": true,
"sn": "JYZZYT0BEJCAH002P",
"eeprom_level": 1,
"eeprom_vol": 1331,
"eeprom_freq": 710,
"eeprom_bin": 2,
"eeprom_ft": "F1V01B4C2",
"tpl": [
[1,2,3,4,5],
[10,9,8,7,6],
[11,12,13,14,15],
[20,19,18,17,16],
[21,22,23,24,25],
[30,29,28,27,26],
[31,32,33,34,35],
[40,39,38,37,36],
[41,42,43,44,45],
[50,49,48,47,46],
[51,52,53,54,55]
]
}
]
}
]
}
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/stats.cgi
Get hashrate
URI: /cgi-bin/chart.cgi
Request Method: GET
Function: Get the real-time and historical hashrate of chains.
Request Content: Empty
Response Content:
{
"STATUS": {
"STATUS": "S",
"when": 1751532202,
"Msg": "rate",
"api_version": "1.0.0"
},
"INFO": {
"miner_version": "platform[AML]",
"CompileTime": "Fri Apr 18 16:15:41 CST 2025",
},
"RATE": [
{
"unit": "GH/s",
"xAxis": [ // Time point.
"0min",
"10min",
"20min",
"30min",
"40min",
"50min",
"60min",
"70min"
],
"series": [
{
"name": "chain0",
"data": [
72347, // Hashrate at the corresponding time point.
72388,
72758,
72772,
72531,
72054,
71891,
72619
]
},
{
"name": "chain1",
"data": [
74180,
72615,
72281,
72536,
73227,
72681,
72954,
73240
]
},
{
"name": "chain2",
"data": [
75829,
73786,
73308,
73839,
74180,
73370,
74453,
73746
]
}
]
}
]
}
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/chart.cgi
Get DROA runtime logs
URI: /cgi-bin/get_droa.cgi
Request Method: GET
Function: Get droa logs.
Request Content: Empty
Response Content: Log
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/get_droa.cgi
Get system information
URI: /cgi-bin/get_system_info.cgi
Request Method: GET
Function: Get system information.
Request Content: Empty
Response Content:
{
"nettype": "DHCP",
"netdevice": "eth0",
"macaddr": "02:34:DA:F1:EB:5D",
"hostname": "Antminer",
"ipaddress": "192.168.1.99",
"netmask": "255.255.255.0",
"gateway": "",
"dnsservers": "",
"system_mode": "GNU/Linux",
"system_kernel_version": "Linux 4.9.113 #1 SMP PREEMPT Fri Apr 18 16:41:29 CST 2025",
"system_filesystem_version": "FD-1.5(250418-S21+)",
"firmware_type": "Factory",
"serinum": "JYZZG4UBEJCAH000F"
}
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/get_system_info.cgi
Change password
URI: /cgi-bin/passwd.cgi
Request Method: POST
Function: Change the password.
Request Content:
{
"curPwd": "root",
"newPwd": "newpassword",
"confirmPwd": "newpassword"
}
Response Content:
{"stats":"success","code":"P000","msg":"OK!"} // The setup was successful.
{"stats":"error","code":"P[code]","msg":"[msg]"} // Get the failure reason based on "code" and "msg".
Curl Command Demonstration:
curl --digest -u root:root -X POST -H "Content-Type: application/json" -d '{"curPwd": "root","newPwd": "newpassword","confirmPwd": "newpassword"}' http://192.168.1.1/cgi-bin/passwd.cgi
Get an overview of the miner
URI: /cgi-bin/summary.cgi
Request Method: GET
Function: Get an overview of the miner.
Request Content: Empty
Response Content:
{
"STATUS": {
"STATUS": "S",
"when": 1751945786,
"Msg": "summary",
"api_version": "1.0.0"
},
"INFO": {
"miner_version": "platform[AML]",
"CompileTime": "Fri Apr 18 16:15:41 CST 2025",
},
"SUMMARY": [
{
"elapsed": 818, // Elapsed time.
"rate_5s": 232436.76, // Hashrate in the last 5 seconds.
"rate_30m": 231431.07, // Hashrate in the last 30 minutes.
"rate_avg": 231429.72, // Average Hashrate.
"rate_ideal": 232866.0, // Theoretical Hashrate.
"rate_unit": "GH/s",
"bestshare": 0, // Bestshare value submitted to the pool.
"status": [
{
"type": "rate",
"status": "s", // s:normal, e:abnormal.
"code": 0,
"msg": ""
},
{
"type": "network",
"status": "s",
"code": 0,
"msg": ""
},
{
"type": "fans",
"status": "s",
"code": 0,
"msg": ""
},
{
"type": "temp",
"status": "s",
"code": 0,
"msg": ""
}
]
}
]
}
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/summary.cgi
Upgrading the firmware
URI: /cgi-bin/upgrade.cgi
Request Method: POST
Function: Upgrade the firmware and keep the configuration.
Request Content: Firmware path and file.
file=@<firmware_file_path>
Response Content:
{"stats":"success","code":"U000","msg":"OK!"} // Upgrade successfully.
{"stats":"error","code":"U[code]","msg":"[msg]"} // Upgrade failed.The following are the reasons for the error:
// 1.Incorrect firmware signature, damaged file.
// 2.Subtype mismatch.
// 3.Unsupported firmware version.
Curl Command Demonstration:
curl --digest -u root:root -v -H "Expect:" -F "file=@<firmware_file_path>" http://192.168.1.1/cgi-bin/upgrade.cgi
Upgrading the firmware(clear the configuration)
URI: /cgi-bin/upgrade_clear.cgi
Request Method: POST
Function: Upgrade the firmware and clear the configuration.
Request Content: Firmware path and file.
file=@<firmware_file_path>
Response Content:
{"stats":"success","code":"U000","msg":"OK!"} // Upgrade successfully.
{"stats":"error","code":"U[code]","msg":"[msg]"} // Upgrade failed.The following are the reasons for the error:
// 1.Incorrect firmware signature, damaged file.
// 2.Subtype mismatch.
// 3.Unsupported firmware version.
Curl Command Demonstration:
curl --digest -u root:root -v -H "Expect:" -F "file=@<firmware_file_path>" http://192.168.1.1/cgi-bin/upgrade_clear.cgi
Get device abnormality warnings
URI: /cgi-bin/warning.cgi
Request Method: GET
Function: Get device abnormality warnings.
Request Content: Empty
Response Content:
Go to https://service.bitmain.com/support/productManual to download and review the User Guide for the device.
Curl Command Demonstration:
curl --digest -u root:root http://192.168.1.1/cgi-bin/warning.cgi