---
title: "User Organization User Role Retrieve"
method: GET
path: "/user/organization-user-role/{id}/"
tags: ["users"]
---

# User Organization User Role Retrieve

`GET /user/organization-user-role/{id}/`

GET/PATCH/DELETE /api/users/member/<id>/

Retrieve, update, or delete organization member role.

Permission (via ObjectOwnershipMixin config in SuperAdminMixin):
- User can GET their OWN role (read-only)
- Org Admin can GET/PATCH/DELETE any role in org
- Superadmin: same as regular user (org-scoped, not cross-org)

Note: Member management is intentionally org-scoped even for superadmins.

Writes are admin-only. Every writable field on OrganizationUserRole
(role, permissions_override, pending, ...) is privilege-defining, so a
member must NOT be able to PATCH their own row — that is direct
self-escalation to admin/owner. ``is_requiring_org_admin_for_write``
enforces org-admin for any write while still letting members GET their
own role. Role changes go through this admin-gated path (the serializer
keeps fields writable for that flow); members have no legitimate
self-write field here.

## Path parameters

- `id` integer, required

## Headers

- `Authorization` string, required

## Response `200`

- OrganizationUserRole — Serializer for organization user roles. Security Note: Privilege escalation prevention is handled at the VIEW level (OrganizationMemberView), not here. This serializer is used by org admins to update member roles, so fields (role, permissions_override, ...) must remain writable. The view gates all writes on org admin via ``is_requiring_org_admin_for_write = True`` — a member cannot PATCH their own row to escalate. Any new write path using this serializer MUST apply the same admin gate, since the fields here are privilege-defining.
  - `id` integer, required
  - `access_level` integer, required
  - `user` UserRole, required
    - `id` integer, required
    - `email` string, required
    - `name` string, required
    - `username` string
    - `first_name` string
    - `last_name` string
    - `profile_color` string
    - `has_customized_password` boolean, required
  - `organization_name` string, required
  - `user_count` integer, required
  - `email` string
  - `role` 'member' | 'admin' | 'owner' | 'keywordsai_admin' | 'annotator' — * `member` - member * `admin` - admin * `owner` - owner * `keywordsai_admin` - keywordsai_admin * `annotator` - annotator
  - `pending` boolean
  - `hidden` boolean
  - `permissions_override` string[], nullable
  - `organization` integer, required
  - `project` string, nullable

---

[API](https://skmtc.net/keywordsai/apis/api-reference.md) · [All operations](https://skmtc.net/keywordsai/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/keywordsai/api-reference/versions/c26d550029f8/schema)
