Alert incidents
const url = 'https://api.flotera.com/api/v1/alerts?limit=50&state=open&severity=info';const options = { method: 'GET', headers: {cookie: '__Host-erm_session=<__Host-erm_session>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Opaque pagination cursor from a previous next_cursor.
Page size.
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.
Exclusive upper bound on the opening time.
UUID (v7 for new entities; v4 accepted during migration).
Responses
Section titled “Responses”Page of incidents.
object
One alert incident (alerts.incidents).
object
UUID (v7 for new entities; v4 accepted during migration).
UUID (v7 for new entities; v4 accepted during migration).
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.
Rule metric that opened the incident (e.g. temperature_c).
RFC 3339 UTC with microsecond precision.
RFC 3339 UTC with microsecond precision.
RFC 3339 UTC with microsecond precision, or null.
Monotonic resource version used for ETag/If-Match.
Opaque cursor for the next page; null when there are no more rows.
Over the whole filtered set, not the page.
Over the whole filtered set, not the page.
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).
RFC 9457 problem document with a stable machine code.
object
Stable machine-readable error code (03 §2.4).
UUID (v7 for new entities; v4 accepted during migration).
object
JSON Pointer to the offending field.
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).
RFC 9457 problem document with a stable machine code.
object
Stable machine-readable error code (03 §2.4).
UUID (v7 for new entities; v4 accepted during migration).
object
JSON Pointer to the offending field.
Example
{ "type": "https://ermeon.com/problems/validation", "code": "unauthorized"}Request failed validation (code=validation_failed), with per-field errors.
RFC 9457 problem document with a stable machine code.
object
Stable machine-readable error code (03 §2.4).
UUID (v7 for new entities; v4 accepted during migration).
object
JSON Pointer to the offending field.
Example
{ "type": "https://ermeon.com/problems/validation", "code": "unauthorized"}