> For the complete documentation index, see [llms.txt](https://docs.truedat.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.truedat.io/v8.12/api-integrations/authentication-management/groups.md).

# Groups

## List groups

> Returns every group known to the authorization service, including the users that belong to each group.\
> \
> Requires an account with administrative privileges (\*\*administrator or service account\*\*).<br>

```json
{"openapi":"3.0.0","info":{"title":"td-auth","version":"Truedat 8.12.0"},"paths":{"/api/groups":{"get":{"description":"Returns every group known to the authorization service, including the users that belong to each group.\n\nRequires an account with administrative privileges (**administrator or service account**).\n","operationId":"TdAuthWeb.GroupController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupListResponse"}}},"description":"Groups list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHUnauthorizedMessageResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List groups","tags":["Groups"]}}},"components":{"schemas":{"GroupListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Group"},"type":"array"}},"required":["data"],"title":"GroupListResponse","type":"object"},"Group":{"additionalProperties":false,"description":"Full group representation returned by the group management endpoints. When `users` is present, it lists the members of the group.","properties":{"alias":{"description":"Short, human readable alias used in listings.","nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"id":{"description":"Unique group identifier.","type":"integer"},"name":{"description":"Group name. Unique across groups.","type":"string"},"users":{"description":"Members of the group. Present on list, show and update responses; may be absent on creation responses.","items":{"$ref":"#/components/schemas/UserEmbedded"},"type":"array"}},"required":["id","name"],"title":"Group","type":"object"},"UserEmbedded":{"additionalProperties":true,"description":"Compact user representation embedded inside an ACL entry.","properties":{"email":{"nullable":true,"type":"string"},"full_name":{"nullable":true,"type":"string"},"id":{"type":"integer"},"role":{"nullable":true,"type":"string"},"user_name":{"nullable":true,"type":"string"}},"required":["id"],"title":"UserEmbedded","type":"object"},"AUTHUnauthorizedMessageResponse":{"additionalProperties":false,"description":"Response emitted by the authentication pipeline when credentials are missing or invalid.","properties":{"message":{"description":"Error type, e.g. \"unauthorized\".","type":"string"}},"required":["message"],"title":"AUTHUnauthorizedMessageResponse","type":"object"},"AUTHForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHForbiddenResponse","type":"object"},"AUTHInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHInternalServerErrorResponse","type":"object"}}}}
```

## Create group

> Creates a group with the supplied name, description, alias and members.\
> \
> Requires \*\*administrator\*\* access.\
> \
> The \`user\_ids\` array is a list of user IDs. Users that do not exist cause the request to fail with \`422\`.\
> \
> Group names must be unique: attempting to create a group with an existing name returns \`422\` with a \`"taken"\` error on \`name\`.\
> \
> The response includes a \`Location\` header pointing at the newly created group.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-auth","version":"Truedat 8.12.0"},"paths":{"/api/groups":{"post":{"description":"Creates a group with the supplied name, description, alias and members.\n\nRequires **administrator** access.\n\nThe `user_ids` array is a list of user IDs. Users that do not exist cause the request to fail with `422`.\n\nGroup names must be unique: attempting to create a group with an existing name returns `422` with a `\"taken\"` error on `name`.\n\nThe response includes a `Location` header pointing at the newly created group.\n","operationId":"TdAuthWeb.GroupController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupCreateRequest"}}},"description":"Group creation payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}},"description":"Group created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHUnauthorizedMessageResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHUnprocessableEntityChangesetResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create group","tags":["Groups"]}}},"components":{"schemas":{"GroupCreateRequest":{"additionalProperties":false,"properties":{"group":{"additionalProperties":false,"properties":{"alias":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"name":{"description":"Group name. Must be unique.","type":"string"},"user_ids":{"description":"Identifiers of the users to add as members of the group.","items":{"type":"integer"},"nullable":true,"type":"array"}},"required":["name"],"type":"object"}},"required":["group"],"title":"GroupCreateRequest","type":"object"},"GroupResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Group"}},"required":["data"],"title":"GroupResponse","type":"object"},"Group":{"additionalProperties":false,"description":"Full group representation returned by the group management endpoints. When `users` is present, it lists the members of the group.","properties":{"alias":{"description":"Short, human readable alias used in listings.","nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"id":{"description":"Unique group identifier.","type":"integer"},"name":{"description":"Group name. Unique across groups.","type":"string"},"users":{"description":"Members of the group. Present on list, show and update responses; may be absent on creation responses.","items":{"$ref":"#/components/schemas/UserEmbedded"},"type":"array"}},"required":["id","name"],"title":"Group","type":"object"},"UserEmbedded":{"additionalProperties":true,"description":"Compact user representation embedded inside an ACL entry.","properties":{"email":{"nullable":true,"type":"string"},"full_name":{"nullable":true,"type":"string"},"id":{"type":"integer"},"role":{"nullable":true,"type":"string"},"user_name":{"nullable":true,"type":"string"}},"required":["id"],"title":"UserEmbedded","type":"object"},"AUTHUnauthorizedMessageResponse":{"additionalProperties":false,"description":"Response emitted by the authentication pipeline when credentials are missing or invalid.","properties":{"message":{"description":"Error type, e.g. \"unauthorized\".","type":"string"}},"required":["message"],"title":"AUTHUnauthorizedMessageResponse","type":"object"},"AUTHForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHForbiddenResponse","type":"object"},"AUTHUnprocessableEntityChangesetResponse":{"additionalProperties":false,"description":"Response emitted for Ecto.Changeset validation failures. Keys under `errors` are the invalid field names and values are lists of messages.","properties":{"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"}},"required":["errors"],"title":"AUTHUnprocessableEntityChangesetResponse","type":"object"},"AUTHInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHInternalServerErrorResponse","type":"object"}}}}
```

## Search groups

> Returns the groups whose name, description or alias matches the query, up to a configured maximum number of results. Further matches are silently truncated.\
> \
> \`query\` is a partial, case-insensitive match applied to the group \`name\`, \`description\` and \`alias\`.\
> \
> When \`query\` is omitted or empty, the endpoint returns up to the configured maximum number of groups in arbitrary order.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-auth","version":"Truedat 8.12.0"},"paths":{"/api/groups/search":{"post":{"description":"Returns the groups whose name, description or alias matches the query, up to a configured maximum number of results. Further matches are silently truncated.\n\n`query` is a partial, case-insensitive match applied to the group `name`, `description` and `alias`.\n\nWhen `query` is omitted or empty, the endpoint returns up to the configured maximum number of groups in arbitrary order.\n","operationId":"TdAuthWeb.GroupSearchController.create","parameters":[{"description":"Partial, case-insensitive match against group name, description or alias.","in":"query","name":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupSearchResponse"}}},"description":"Matching groups"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHUnauthorizedMessageResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search groups","tags":["Groups"]}}},"components":{"schemas":{"GroupSearchResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/GroupBasic"},"type":"array"}},"required":["data"],"title":"GroupSearchResponse","type":"object"},"GroupBasic":{"additionalProperties":false,"description":"Compact group representation returned by the search endpoint. Members are reduced to their `id`.","properties":{"alias":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"users":{"description":"Identifiers of the members of the group.","items":{"$ref":"#/components/schemas/GroupUserIdRef"},"type":"array"}},"required":["id","name","users"],"title":"GroupBasic","type":"object"},"GroupUserIdRef":{"additionalProperties":false,"description":"Minimal user identifier embedded in search results. Only the `id` is exposed.","properties":{"id":{"type":"integer"}},"required":["id"],"title":"GroupUserIdRef","type":"object"},"AUTHUnauthorizedMessageResponse":{"additionalProperties":false,"description":"Response emitted by the authentication pipeline when credentials are missing or invalid.","properties":{"message":{"description":"Error type, e.g. \"unauthorized\".","type":"string"}},"required":["message"],"title":"AUTHUnauthorizedMessageResponse","type":"object"},"AUTHInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHInternalServerErrorResponse","type":"object"}}}}
```

## Get group

> Returns the specified group with its members.\
> \
> Requires \*\*administrator\*\* access.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-auth","version":"Truedat 8.12.0"},"paths":{"/api/groups/{id}":{"get":{"description":"Returns the specified group with its members.\n\nRequires **administrator** access.\n","operationId":"TdAuthWeb.GroupController.show","parameters":[{"description":"Group ID.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}},"description":"Group detail"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHUnauthorizedMessageResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get group","tags":["Groups"]}}},"components":{"schemas":{"GroupResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Group"}},"required":["data"],"title":"GroupResponse","type":"object"},"Group":{"additionalProperties":false,"description":"Full group representation returned by the group management endpoints. When `users` is present, it lists the members of the group.","properties":{"alias":{"description":"Short, human readable alias used in listings.","nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"id":{"description":"Unique group identifier.","type":"integer"},"name":{"description":"Group name. Unique across groups.","type":"string"},"users":{"description":"Members of the group. Present on list, show and update responses; may be absent on creation responses.","items":{"$ref":"#/components/schemas/UserEmbedded"},"type":"array"}},"required":["id","name"],"title":"Group","type":"object"},"UserEmbedded":{"additionalProperties":true,"description":"Compact user representation embedded inside an ACL entry.","properties":{"email":{"nullable":true,"type":"string"},"full_name":{"nullable":true,"type":"string"},"id":{"type":"integer"},"role":{"nullable":true,"type":"string"},"user_name":{"nullable":true,"type":"string"}},"required":["id"],"title":"UserEmbedded","type":"object"},"AUTHUnauthorizedMessageResponse":{"additionalProperties":false,"description":"Response emitted by the authentication pipeline when credentials are missing or invalid.","properties":{"message":{"description":"Error type, e.g. \"unauthorized\".","type":"string"}},"required":["message"],"title":"AUTHUnauthorizedMessageResponse","type":"object"},"AUTHForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHForbiddenResponse","type":"object"},"AUTHNotFoundResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHNotFoundResponse","type":"object"},"AUTHInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHInternalServerErrorResponse","type":"object"}}}}
```

## Update group

> Updates the group fields supplied in the request body.\
> \
> Requires \*\*administrator\*\* access.\
> \
> The \`user\_ids\` array replaces the members of the group with the supplied list. Omit it to leave membership unchanged.\
> \
> Partial updates are supported: fields not present in the payload are left untouched.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-auth","version":"Truedat 8.12.0"},"paths":{"/api/groups/{id}":{"put":{"description":"Updates the group fields supplied in the request body.\n\nRequires **administrator** access.\n\nThe `user_ids` array replaces the members of the group with the supplied list. Omit it to leave membership unchanged.\n\nPartial updates are supported: fields not present in the payload are left untouched.\n","operationId":"TdAuthWeb.GroupController.update","parameters":[{"description":"Group ID.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupUpdateRequest"}}},"description":"Group update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}},"description":"Group updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHUnauthorizedMessageResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHUnprocessableEntityChangesetResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update group","tags":["Groups"]}}},"components":{"schemas":{"GroupUpdateRequest":{"additionalProperties":false,"properties":{"group":{"additionalProperties":false,"properties":{"alias":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"user_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"}},"type":"object"}},"required":["group"],"title":"GroupUpdateRequest","type":"object"},"GroupResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Group"}},"required":["data"],"title":"GroupResponse","type":"object"},"Group":{"additionalProperties":false,"description":"Full group representation returned by the group management endpoints. When `users` is present, it lists the members of the group.","properties":{"alias":{"description":"Short, human readable alias used in listings.","nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"id":{"description":"Unique group identifier.","type":"integer"},"name":{"description":"Group name. Unique across groups.","type":"string"},"users":{"description":"Members of the group. Present on list, show and update responses; may be absent on creation responses.","items":{"$ref":"#/components/schemas/UserEmbedded"},"type":"array"}},"required":["id","name"],"title":"Group","type":"object"},"UserEmbedded":{"additionalProperties":true,"description":"Compact user representation embedded inside an ACL entry.","properties":{"email":{"nullable":true,"type":"string"},"full_name":{"nullable":true,"type":"string"},"id":{"type":"integer"},"role":{"nullable":true,"type":"string"},"user_name":{"nullable":true,"type":"string"}},"required":["id"],"title":"UserEmbedded","type":"object"},"AUTHUnauthorizedMessageResponse":{"additionalProperties":false,"description":"Response emitted by the authentication pipeline when credentials are missing or invalid.","properties":{"message":{"description":"Error type, e.g. \"unauthorized\".","type":"string"}},"required":["message"],"title":"AUTHUnauthorizedMessageResponse","type":"object"},"AUTHForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHForbiddenResponse","type":"object"},"AUTHNotFoundResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHNotFoundResponse","type":"object"},"AUTHUnprocessableEntityChangesetResponse":{"additionalProperties":false,"description":"Response emitted for Ecto.Changeset validation failures. Keys under `errors` are the invalid field names and values are lists of messages.","properties":{"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"}},"required":["errors"],"title":"AUTHUnprocessableEntityChangesetResponse","type":"object"},"AUTHInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHInternalServerErrorResponse","type":"object"}}}}
```

## Delete group

> Permanently deletes the specified group.\
> \
> Requires \*\*administrator\*\* access.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-auth","version":"Truedat 8.12.0"},"paths":{"/api/groups/{id}":{"delete":{"description":"Permanently deletes the specified group.\n\nRequires **administrator** access.\n","operationId":"TdAuthWeb.GroupController.delete","parameters":[{"description":"Group ID.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Group deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHUnauthorizedMessageResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete group","tags":["Groups"]}}},"components":{"schemas":{"AUTHUnauthorizedMessageResponse":{"additionalProperties":false,"description":"Response emitted by the authentication pipeline when credentials are missing or invalid.","properties":{"message":{"description":"Error type, e.g. \"unauthorized\".","type":"string"}},"required":["message"],"title":"AUTHUnauthorizedMessageResponse","type":"object"},"AUTHForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHForbiddenResponse","type":"object"},"AUTHNotFoundResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHNotFoundResponse","type":"object"},"AUTHInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHInternalServerErrorResponse","type":"object"}}}}
```

## Update group

> Updates the group fields supplied in the request body.\
> \
> Requires \*\*administrator\*\* access.\
> \
> The \`user\_ids\` array replaces the members of the group with the supplied list. Omit it to leave membership unchanged.\
> \
> Partial updates are supported: fields not present in the payload are left untouched.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-auth","version":"Truedat 8.12.0"},"paths":{"/api/groups/{id}":{"patch":{"description":"Updates the group fields supplied in the request body.\n\nRequires **administrator** access.\n\nThe `user_ids` array replaces the members of the group with the supplied list. Omit it to leave membership unchanged.\n\nPartial updates are supported: fields not present in the payload are left untouched.\n","operationId":"TdAuthWeb.GroupController.update (2)","parameters":[{"description":"Group ID.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupUpdateRequest"}}},"description":"Group update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}},"description":"Group updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHUnauthorizedMessageResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHUnprocessableEntityChangesetResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AUTHInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update group","tags":["Groups"]}}},"components":{"schemas":{"GroupUpdateRequest":{"additionalProperties":false,"properties":{"group":{"additionalProperties":false,"properties":{"alias":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"user_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"}},"type":"object"}},"required":["group"],"title":"GroupUpdateRequest","type":"object"},"GroupResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Group"}},"required":["data"],"title":"GroupResponse","type":"object"},"Group":{"additionalProperties":false,"description":"Full group representation returned by the group management endpoints. When `users` is present, it lists the members of the group.","properties":{"alias":{"description":"Short, human readable alias used in listings.","nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"id":{"description":"Unique group identifier.","type":"integer"},"name":{"description":"Group name. Unique across groups.","type":"string"},"users":{"description":"Members of the group. Present on list, show and update responses; may be absent on creation responses.","items":{"$ref":"#/components/schemas/UserEmbedded"},"type":"array"}},"required":["id","name"],"title":"Group","type":"object"},"UserEmbedded":{"additionalProperties":true,"description":"Compact user representation embedded inside an ACL entry.","properties":{"email":{"nullable":true,"type":"string"},"full_name":{"nullable":true,"type":"string"},"id":{"type":"integer"},"role":{"nullable":true,"type":"string"},"user_name":{"nullable":true,"type":"string"}},"required":["id"],"title":"UserEmbedded","type":"object"},"AUTHUnauthorizedMessageResponse":{"additionalProperties":false,"description":"Response emitted by the authentication pipeline when credentials are missing or invalid.","properties":{"message":{"description":"Error type, e.g. \"unauthorized\".","type":"string"}},"required":["message"],"title":"AUTHUnauthorizedMessageResponse","type":"object"},"AUTHForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHForbiddenResponse","type":"object"},"AUTHNotFoundResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHNotFoundResponse","type":"object"},"AUTHUnprocessableEntityChangesetResponse":{"additionalProperties":false,"description":"Response emitted for Ecto.Changeset validation failures. Keys under `errors` are the invalid field names and values are lists of messages.","properties":{"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"}},"required":["errors"],"title":"AUTHUnprocessableEntityChangesetResponse","type":"object"},"AUTHInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"AUTHInternalServerErrorResponse","type":"object"}}}}
```
