Who used this account, and how it ended
const url = 'https://api.flotera.com/api/v1/audit?sort=asc';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/audit?sort=asc' \ --cookie __Host-erm_session=<__Host-erm_session>One chronological feed over three separate logs: account actions
(audit — sign-ins, token issue and revoke, denials), AI client calls
(mcp, refusals included) and notification delivery (notification).
They stay separate tables on purpose — they answer different questions, and merging them on write would lose that distinction for good. They are merged on read because a person needs one timeline: “signed in at 14:02, the model asked for a reboot at 14:03, refused at 14:03” reads as a story; three screens make you assemble it yourself.
Paging uses a <timestamp>|<id> cursor. A timestamp alone would skip
rows that share one — and refusals arrive in bursts that share one.
No request bodies, no call arguments, no addresses: source IPs are stored hashed. An access log must not become a second copy of what it is meant to guard.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Comma-separated sources. Empty means all. An unknown name is rejected.
Substring of the action name.
Responses
Section titled “Responses”Audit entries, newest first unless sorted otherwise.
object
object
Who acted — a user, an agent, the AI client, or the system.
Machine-readable reason code, never free text.
Cursor for the next page; null when the feed is exhausted.
Sources this server can return. The panel builds its filters from this, not from a list of its own — its own would fall behind.
Example
{ "entries": [ { "source": "audit" } ]}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"}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"}A dependency the endpoint needs is not configured or is temporarily unavailable (code=unavailable). The rest of the API keeps working — an absent external integration must not take the service down.
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"}