Skip to content

Alert incidents

GET
/alerts
curl --request GET \
--url 'https://api.flotera.com/api/v1/alerts?limit=50&state=open&severity=info' \
--cookie __Host-erm_session=<__Host-erm_session>

Incidents from Alerts PG. total_open/total_critical are computed over the whole filtered set, not the returned page.

cursor
string
>= 1 characters <= 512 characters

Opaque pagination cursor from a previous next_cursor.

limit
integer
default: 50 >= 1 <= 200

Page size.

from
string format: date-time

Filter by when the incident OPENED, half-open [from, to).

By opening time, not by last contact: an incident that started on Friday and is still live belongs to Friday. Filtering on last-seen would make “today” show everything that still hurts — a state, not a period.

Note this cuts both ways on open incidents: a range narrower than the oldest live incident hides it, and the oldest live incident is usually the one that matters most. The UI defaults to no range for open incidents for exactly that reason.

to
string format: date-time

Exclusive upper bound on the opening time.

state
string
default: open
Allowed values: open acknowledged resolved
severity
string
Allowed values: info warning critical
server_id

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

string format: uuid

Page of incidents.

Media typeapplication/json
object
items
required
Array<object>
<= 200 items

One alert incident (alerts.incidents).

object
id
required

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

string format: uuid
tenant_id
required

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

string format: uuid
rule_id
Any of:

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

string format: uuid
server_id
Any of:

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

string format: uuid
server_name
string | null
<= 128 characters
gpu_index

Which GPU the incident is about, when it is about one. Without it eight temperature incidents on the same server are indistinguishable in a list — same title, same server, same minute — and read as eight copies of one problem instead of eight different cards.

integer | null
state
required
string
Allowed values: open acknowledged resolved
severity
required
string
Allowed values: info warning critical
metric

Rule metric that opened the incident (e.g. temperature_c).

string | null
<= 64 characters
title
required
string
<= 256 characters
detail
string | null
<= 1024 characters
current_value
number | null
opened_at
required

RFC 3339 UTC with microsecond precision.

string format: date-time
last_seen_at
required

RFC 3339 UTC with microsecond precision.

string format: date-time
resolved_at

RFC 3339 UTC with microsecond precision, or null.

string | null format: date-time
version
required

Monotonic resource version used for ETag/If-Match.

integer
next_cursor
required

Opaque cursor for the next page; null when there are no more rows.

string | null
>= 1 characters <= 512 characters
total_open
required

Over the whole filtered set, not the page.

integer
total_critical
required

Over the whole filtered set, not the page.

integer
Example
{
"items": [
{
"state": "open",
"severity": "info",
"opened_at": "2026-07-25T10:15:30.123456Z",
"last_seen_at": "2026-07-25T10:15:30.123456Z"
}
]
}

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"
}

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"
}