Luxor PlatformAPI DocumentationCommanderReporting

Get performance history

Returns time-series performance data for a specified metric and date range.

GET
/v2/commander/performance/history

Authorization

LuxorAPIKey
authorization<token>

Use your API key here.

In: header

Query Parameters

site_ids?string

Comma-separated site UUIDs

miner_ids?string

Comma-separated miner IDs

metric*string

Performance metric to query

Value in

  • "hashrate"
  • "power_consumption"
  • "temperature"
  • "efficiency"
  • "hashing_miners"
start_date*string

Start date (YYYY-MM-DD)

Formatdate
end_date*string

End date (YYYY-MM-DD)

Formatdate
page_number?integer
Range1 <= value
Default1
page_size?integer
Range1 <= value
Default10

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/v2/commander/performance/history?metric=hashrate&start_date=2026-02-01&end_date=2026-02-28"
{  "timeseries": [    {      "timestamp": "2026-02-20T12:00:00.000Z",      "value": 34650.02    }  ],  "pagination": {    "page_number": 1,    "page_size": 1,    "item_count": 0,    "previous_page_url": null,    "next_page_url": null  }}
{  "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"}

Get performance summary

Returns aggregated performance KPIs including hashrate, power consumption, efficiency, and hashing miners count.

Get reports

Returns historical Commander reporting data as rows: the same figures as the Reports page and its CSV download. With `group_by=time` (the default) it returns a timeseries, one row per `tick_size` bucket; other `group_by` values return one row per combination of the requested breakdowns. A missing value is `null`, never `0`. Requires a Commander Pro subscription (403 otherwise). **Measures and compatible `group_by` values** | Measure | Unit | Allowed `group_by` | | --- | --- | --- | | `hashrate` | H/s (Sol/s for `equihash`) | `time`, `site`, `model`, `firmware`, `subaccount`, `client_id`, `miner_id` | | `power_consumption` | W | `time`, `site`, `model`, `firmware`, `subaccount`, `client_id`, `miner_id` | | `efficiency` | J/TH | `time`, `site`, `model`, `firmware`, `subaccount`, `client_id`, `miner_id` | | `temperature` | °C | `time`, `site`, `model`, `firmware`, `subaccount`, `client_id`, `miner_id` | | `energy_consumption` | kWh | `time`, `site`, `model`, `firmware`, `subaccount`, `client_id`, `miner_id` | | `site_load` | 0–1 ratio | `time`, `site` | | `online_miners` | mean concurrent count | `time`, `site`, `model`, `firmware`, `subaccount`, `client_id` | | `hashing_miners` | mean concurrent count | `time`, `site`, `model`, `firmware`, `subaccount`, `client_id` | | `failing_miners` | mean concurrent count | `time`, `site`, `model`, `firmware`, `subaccount`, `client_id` | | `new_miners` | count | `time`, `site`, `model`, `firmware`, `client_id` | | `new_errors` | count | `time`, `site`, `model`, `firmware`, `client_id` | | `unresolved_errors` | count | `time`, `site`, `model`, `firmware`, `client_id` | | `bulk_actions` | count | `time`, `site` | | `triggers_executed` | count | `time`, `site` | | `iminer_optimizations` | count | `time`, `site` | | `tickets_opened` | count | `time`, `site` | | `tickets_closed` | count | `time`, `site` | **Rules** - `miner_id` can only be combined with `time` and/or `site`, and requires a period of 31 days or less. - `efficiency` is `sha256` only. - `tick_size` is required when `group_by` includes `time`. - At most 5000 time buckets per request: `1h` covers about 208 days, `1d` covers about 13.7 years. - `start_date` must be before today (UTC), and `end_date` is clamped to the start of today: reports only cover complete days. - At most 100,000 rows in total. Narrow the period, the breakdowns or `site_ids` if you hit this. A request that breaks any rule, or names an unknown parameter or value, is rejected with 400 listing the violations found. A malformed or missing parameter is reported first, before the rules that combine parameters are checked. **Examples** Daily fleet timeseries: `GET /v2/commander/reports?start_date=2026-09-01&end_date=2026-09-28&measures=hashrate,power_consumption,hashing_miners&group_by=time&tick_size=1d` Energy by site by month: `GET /v2/commander/reports?start_date=2026-01-01&end_date=2026-06-30&measures=energy_consumption&group_by=time,site&tick_size=1M` Per-miner hashrate over a week: `GET /v2/commander/reports?site_ids=618ee7c5-bf5d-45b8-b845-b423cf5123d0&start_date=2026-09-21&end_date=2026-09-27&measures=hashrate,temperature&group_by=miner_id` Action counts by site: `GET /v2/commander/reports?start_date=2026-09-01&end_date=2026-09-28&measures=bulk_actions,triggers_executed,iminer_optimizations&group_by=site`