Skip to main content
Two surfaces expose the write-only alert sinks that were previously only visible in tests. Team owners can also resolve or dismiss their own alerts and track which ones they have read; the platform admin surface is read-only.

Team admin alerts

Team owners can list unresolved operational alerts for their team, resolve or dismiss them, and mark them read. These carry diagnostic payloads — every team alert route is JWT-only and cannot be used with a mio_sk_ API key.
Auth: team-owner JWT session. API keys are rejected. Query parameters: Response shape:
Results are ordered most-recent first. The list returns unresolved alerts only. read is your own read marker, never another user’s. meta.unread_count is how many of the team’s open alerts you have not read, across the whole list rather than just the current page.

Resolve, dismiss or mark read

Send at least one attribute: data.id is optional; if you send it, it must match the alert in the URL (otherwise 409 resource_id_mismatch). The response is the alert with its new status and read, plus meta.unread_count.
  • Repeating a request is safe. Sending the same status again returns 200 and keeps the original resolved_at and resolved_by.
  • A closed alert cannot be closed the other way. Asking for dismissed on a resolved alert (or the reverse) returns 409 alert_already_closed.
  • 404 — the alert does not exist, is not a valid alert id, or belongs to another team. These cases are indistinguishable by design.
  • 403 — the caller is not the team owner, or used an API key.
  • 422 — an unknown attribute, an empty attributes object, a null value, or a status other than resolved or dismissed.

Platform admin alerts

Platform admins can list unresolved cross-tenant alerts (abuse signals, infrastructure events).
Auth: platform_admin role required. Query parameters: Response shape:
Results are ordered most-recent first.

Role permissions

Platform admins can assign and remove permissions from roles without rebuilding the role.
Auth: JWT session. API keys are rejected.

Assign a permission

Returns 201 with the updated role resource. Re-assigning a permission the role already holds is a no-op that still returns 201.

Remove a permission

Returns 204 No Content. Removing a permission the role does not hold is a no-op that still returns 204. Returns 404 if the role itself does not exist.