---
title: "Change a member's role"
method: PATCH
path: "/groups/{id}/members/{account_id}"
tags: ["groups"]
---

# Change a member's role

`PATCH /groups/{id}/members/{account_id}`

## Request

- Base URL: `https://api.instruxi.dev/api/v1/enforcer`
- URL: `https://api.instruxi.dev/api/v1/enforcer/groups/{id}/members/{account_id}`
- Auth: one of:
  - API key in header `Authorization`
  - API key in header `X-API-Key`

Changes one membership's role in place (member | manager). joined_at and added_by are kept, and ONE group.member_role_changed audit record (metadata: account_id, from, to) is written — where remove + re-add reset joined_at and wrote two. Setting the role a member already has is a no-op success with no audit row. The role is descriptive today: no authorization rule reads it. Same ResourceAuth write on the group as every membership change. 400 invalid_role, 404 membership_not_found, 403 group_type_reserved, 409 group_archived.

## Path parameters

- `id` string, required
- `account_id` string, required

## Request body

- InternalDeliveryHttpHandlerMemberRoleRequest
  - `role` 'member' | 'manager'

## Response `200`

OK

- InternalDeliveryHttpHandlerOKResponse
  - `success` boolean

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict

---

[API](https://skmtc.dev/instruxi/apis/enforcer-api.md) · [All operations](https://skmtc.dev/instruxi/apis/enforcer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/instruxi/apis/enforcer-api/revisions/fa82bc1becc0?raw)
