Skip to content

Telemetry graph series (1m/1h rollups)

GET
/servers/{server_id}/metrics
curl --request GET \
--url 'https://api.flotera.com/api/v1/servers/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/metrics?from=2026-07-25T10%3A15%3A30.123456Z&to=2026-07-25T10%3A15%3A30.123456Z&resolution=auto' \
--cookie __Host-erm_session=<__Host-erm_session>

Aggregated series for the server-detail graphs, served from the report cache (report:v1:{tenant}:server-metrics:...) backed by ClickHouse rollups. Ranges over 48 hours read 1h rollups, shorter ranges read 1m. Hot ranges refresh every 60 s; historical ranges are cached longer.

server_id
required

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
If-None-Match
string
<= 256 characters

Return 304 Not Modified when the entity tag still matches.

from

RFC 3339 UTC with microsecond precision.

string format: date-time

Range start (half-open [from, to)). Defaults to to - 24h.

to

RFC 3339 UTC with microsecond precision.

string format: date-time

Range end. Defaults to now.

resolution
string
default: auto
Allowed values: auto 1m 5m 1h

Bucket resolution. auto picks 5m/1h by range length. 1m is a legacy alias of 5m: minute rollups were retired 2026-08-22 and 5m is the finest history grain (04 §3.5).

metric
Array<string>
<= 20 items

Metric names to include (rollup column names, e.g. temperature_c, utilization_pct, power_w, fan_pct, cpu_usage_pct, hashrate). Omit for the default graph set.

gpu_index
integer
<= 127

Restrict GPU-level series to one GPU. Host series are unaffected.

Metric series snapshot.

Media typeapplication/json

Telemetry graph series computed from ClickHouse 1m/1h rollups.

object
generated_at
required

When this snapshot was computed.

string format: date-time
data_as_of
required

Source watermark the snapshot is based on.

string format: date-time
version
required

Snapshot form version (cache-shape version).

integer
stale
required

True when serving stale-while-revalidate data.

boolean
stale_reason
string | null
<= 256 characters
server_id
required

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
resolution
required

Effective resolution after auto selection.

string
Allowed values: 5m 1h
from
required

RFC 3339 UTC with microsecond precision.

string format: date-time
to
required

RFC 3339 UTC with microsecond precision.

string format: date-time
series
required
Array<object>
<= 200 items
object
metric
required
string
/^[a-z][a-z0-9_]{1,63}$/
scope
required
string
Allowed values: host gpu
gpu_index

Present for scope=gpu series.

integer | null
unit
string | null
<= 16 characters
points
required
Array<object>
<= 5000 items
object
t
required

Bucket start (half-open bucket [t, t+resolution)).

string format: date-time
min
number | null
max
number | null
avg
number | null
p50
number | null
p95
number | null
last
number | null
Example
{
"generated_at": "2026-07-25T10:15:30.123456Z",
"data_as_of": "2026-07-25T10:15:30.123456Z",
"resolution": "5m",
"from": "2026-07-25T10:15:30.123456Z",
"to": "2026-07-25T10:15:30.123456Z",
"series": [
{
"metric": "temperature_c",
"scope": "host",
"unit": "C",
"points": [
{
"t": "2026-07-25T10:15:30.123456Z"
}
]
}
]
}
ETag
string
<= 256 characters

Entity tag of the returned snapshot/resource version.

Not modified; the cached representation is still valid.

Missing/invalid credentials (code=unauthorized).

Media typeapplication/problem+json

RFC 9457 problem document with a stable machine code.

object
type
required
string format: uri
title
required
string
<= 256 characters
status
required
integer
>= 100 <= 599
code
required

Stable machine-readable error code (03 §2.4).

string
Allowed values: unauthorized forbidden csrf_rejected not_found conflict idempotency_conflict validation_failed rate_limited payload_too_large unsupported_agent_version temporarily_unavailable offline_queue_full online_queue_full plan_required server_limit_reached feature_not_entitled account_in_grace account_frozen payment_pending payment_expired payment_amount_mismatch change_already_pending change_already_applied change_effective reserve_not_covered direction_changed
detail
string
<= 2048 characters
instance
string
<= 512 characters
request_id

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
errors
Array<object>
<= 100 items
object
path
required

JSON Pointer to the offending field.

string
<= 512 characters
code
required
string
<= 64 characters
Example
{
"type": "https://ermeon.com/problems/validation",
"code": "unauthorized"
}

Authenticated but not permitted. code=forbidden — role/scope mismatch; code=feature_not_entitled — the plan does not include the capability; code=account_frozen — the account is frozen and this operation is declared x-ermeon-frozen: deny. The three are deliberately distinct: only the last one is fixed by a top-up (13 §5.6).

Media typeapplication/problem+json

RFC 9457 problem document with a stable machine code.

object
type
required
string format: uri
title
required
string
<= 256 characters
status
required
integer
>= 100 <= 599
code
required

Stable machine-readable error code (03 §2.4).

string
Allowed values: unauthorized forbidden csrf_rejected not_found conflict idempotency_conflict validation_failed rate_limited payload_too_large unsupported_agent_version temporarily_unavailable offline_queue_full online_queue_full plan_required server_limit_reached feature_not_entitled account_in_grace account_frozen payment_pending payment_expired payment_amount_mismatch change_already_pending change_already_applied change_effective reserve_not_covered direction_changed
detail
string
<= 2048 characters
instance
string
<= 512 characters
request_id

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
errors
Array<object>
<= 100 items
object
path
required

JSON Pointer to the offending field.

string
<= 512 characters
code
required
string
<= 64 characters
Example
{
"type": "https://ermeon.com/problems/validation",
"code": "unauthorized"
}

Resource does not exist in this tenant. Foreign identifiers also return 404 (anti-enumeration).

Media typeapplication/problem+json

RFC 9457 problem document with a stable machine code.

object
type
required
string format: uri
title
required
string
<= 256 characters
status
required
integer
>= 100 <= 599
code
required

Stable machine-readable error code (03 §2.4).

string
Allowed values: unauthorized forbidden csrf_rejected not_found conflict idempotency_conflict validation_failed rate_limited payload_too_large unsupported_agent_version temporarily_unavailable offline_queue_full online_queue_full plan_required server_limit_reached feature_not_entitled account_in_grace account_frozen payment_pending payment_expired payment_amount_mismatch change_already_pending change_already_applied change_effective reserve_not_covered direction_changed
detail
string
<= 2048 characters
instance
string
<= 512 characters
request_id

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
errors
Array<object>
<= 100 items
object
path
required

JSON Pointer to the offending field.

string
<= 512 characters
code
required
string
<= 64 characters
Example
{
"type": "https://ermeon.com/problems/validation",
"code": "unauthorized"
}

Request failed validation (code=validation_failed), with per-field errors.

Media typeapplication/problem+json

RFC 9457 problem document with a stable machine code.

object
type
required
string format: uri
title
required
string
<= 256 characters
status
required
integer
>= 100 <= 599
code
required

Stable machine-readable error code (03 §2.4).

string
Allowed values: unauthorized forbidden csrf_rejected not_found conflict idempotency_conflict validation_failed rate_limited payload_too_large unsupported_agent_version temporarily_unavailable offline_queue_full online_queue_full plan_required server_limit_reached feature_not_entitled account_in_grace account_frozen payment_pending payment_expired payment_amount_mismatch change_already_pending change_already_applied change_effective reserve_not_covered direction_changed
detail
string
<= 2048 characters
instance
string
<= 512 characters
request_id

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
errors
Array<object>
<= 100 items
object
path
required

JSON Pointer to the offending field.

string
<= 512 characters
code
required
string
<= 64 characters
Example
{
"type": "https://ermeon.com/problems/validation",
"code": "unauthorized"
}