View a stored NSS group's audit history (auditor and above)
const url = 'https://example.com/api/admin/nss/groups/1/audit?limit=25';const options = {method: 'GET', headers: {'X-Ssoossh-Key-Secret': '<X-Ssoossh-Key-Secret>'}};
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://example.com/api/admin/nss/groups/1/audit?limit=25' \ --header 'X-Ssoossh-Key-Secret: <X-Ssoossh-Key-Secret>'The audit events about the posix_groups row with this gid, newest first: its lifecycle (created, renamed, missing, tombstoned, revived, purged), every change to its members, its collisions, and pending and accepted gid changes. The history belongs to the row, so it follows a rename or an accepted gid change. Uses cursor-based pagination (not offset), as /api/admin/users/{id}/audit does.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The group’s stored gid
Query Parameters
Section titled “Query Parameters”Audit event ID to start after (cursor): the previous page’s next_cursor; must be on this group’s history
Page size (default 25, max 100)
Example
25Responses
Section titled “Responses”Audit events
object
object
object
Action is the namespaced action name, e.g. “user.disabled”. The set grows without a wire change, so a client must render an unknown action rather than assume the list is closed.
object
UserID is the grouping key the timelines are built on. It may be empty (a system or anonymous actor) and it may no longer match any row, which does not make the rest of the snapshot less true.
Detail is the per-action specifics, passed through as decoded JSON so a new action’s fields reach the UI without a wire type change. Never carries a secret.
object
System marks an action taken by the server rather than a person, which is how a reader tells “nobody” from “not recorded”.
object
UserID is the grouping key the timelines are built on. It may be empty (a system or anonymous actor) and it may no longer match any row, which does not make the rest of the snapshot less true.
NextCursor is the after for the following page: the id of this page’s last event, absent on the last page.
Example generated
{ "data": { "events": [ { "action": "example", "actor": { "email": "example", "groups": [ "example" ], "subject": "example", "user_id": "example", "username": "example" }, "created_at": "example", "detail": { "additionalProperty": "example" }, "id": "example", "reason": "example", "system": true, "target": { "email": "example", "groups": [ "example" ], "subject": "example", "user_id": "example", "username": "example" } } ], "next_cursor": "example", "total": 1 }, "error": "example"}The gid is not a number, invalid paging parameters, an after that names no event on this history, or offset
object
Data is always null on an error response.
Error is a human-readable message. Branch on the HTTP status rather than this string; it is for humans and logs.
ErrorCode is a machine-readable error classifier. One of the error_code constants from internal/apitypes; use this to decide whether to retry or branch on the failure mode.
Example
{ "error": "certificate request \"9f1c…\" not found", "error_code": "not_found"}Not authenticated
object
Data is always null on an error response.
Error is a human-readable message. Branch on the HTTP status rather than this string; it is for humans and logs.
ErrorCode is a machine-readable error classifier. One of the error_code constants from internal/apitypes; use this to decide whether to retry or branch on the failure mode.
Example
{ "error": "certificate request \"9f1c…\" not found", "error_code": "not_found"}Not authorized as auditor
object
Data is always null on an error response.
Error is a human-readable message. Branch on the HTTP status rather than this string; it is for humans and logs.
ErrorCode is a machine-readable error classifier. One of the error_code constants from internal/apitypes; use this to decide whether to retry or branch on the failure mode.
Example
{ "error": "certificate request \"9f1c…\" not found", "error_code": "not_found"}No stored group has that gid, or NSS is disabled
object
Data is always null on an error response.
Error is a human-readable message. Branch on the HTTP status rather than this string; it is for humans and logs.
ErrorCode is a machine-readable error classifier. One of the error_code constants from internal/apitypes; use this to decide whether to retry or branch on the failure mode.
Example
{ "error": "certificate request \"9f1c…\" not found", "error_code": "not_found"}