# List user roles

> **Legacy.** This endpoint is kept for existing integrations. Use the current API reference for new work.

List user roles

- Endpoint: `GET https://api.returning.ai/roles/{userId}`
- Section: Legacy / Roles and permissions
- Authentication: `Authorization: Bearer <API_KEY>` (Community API key)
- Guide: generated from the published specification
- Last updated: 26 Sep 2026
- Web page: https://docs.returning.ai/api-reference/legacy-roles-and-permissions/list-user-roles

## Authentication

- Header: `Authorization: Bearer <API_KEY>`

## Behaviour

**Legacy category**

This endpoint is retained for compatibility, historical admin tooling, or test workflows. Do not use it as the default choice for new integrations unless the backend team confirms this exact route is still supported for your community.

**What it is for**

List user roles.

**How to use it**

Send a GET request to `/roles/{userId}` with the documented body, query parameters, headers, or multipart fields. Prefer the newer authenticated `/v1/...` integration API where available.

**Successful response**

HTTP 2xx. Older endpoints may return a legacy response envelope or a resource-specific payload rather than the newer `{ status, message, data }` wrapper.

**Common error states**

- `400` invalid request body, query, ObjectId, pagination, file format, or missing required field.
- `401` missing, invalid, expired, or insufficient API key/token.
- `403` key is valid but cannot access this community/channel/user/resource, where supported by the service.
- `404` route or target resource was not found. Several legacy root routes return `404` on `https://api.returning.ai`; confirm with Returning.AI before using them.
- `409` duplicate or conflicting state for create/update operations, where applicable.
- `500` unexpected Returning.AI service error.

**Legacy status**

Compatibility endpoint retained for older integrations. Do not use this endpoint for new integrations unless Returning.AI specifically tells you to maintain a legacy flow. Prefer the current `/v1/...` endpoint in the matching non-Legacy category when one exists.

**Source-backed clarification**

These are compatibility endpoints using older server/role terminology. Use them only when maintaining an existing integration. For new public docs and integrations, prefer community/user permission language and scoped API-key permissions.

## Request

### Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `userId` | `string` | Yes | User ID in Returning.AI. |

### Headers

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `Authorization` | `string` | Yes | API key. (`Bearer <API_KEY>`) |
| `x-api-key` | `string` | Yes | Legacy server API key header. Prefer `Authorization: Bearer <API_KEY>` for `/v1/...` integration APIs. |

### Example request

```bash
curl --request GET \
  --url 'https://api.returning.ai/roles/<userId>' \
  --header 'Authorization: Bearer <API_KEY>'
```

## Response

### Response fields

| Field | Type | Presence | Description |
| --- | --- | --- | --- |
| `meta` | `object` | always | - |
| `meta.success` | `boolean` | always | - |
| `meta.message` | `string` | always | - |
| `meta.devMessage` | `string` | always | - |
| `body` | `object[]` | always | - |
| `_id` | `string` | - | - |
| `order` | `integer` | - | - |
| `billable` | `boolean` | - | - |
| `title` | `string` | - | - |
| `description` | `string` | - | - |
| `serverPermissions` | `object` | - | - |
| `serverPermissions.allow_dm` | `boolean` | always | - |
| `serverPermissions.create_invite` | `boolean` | always | - |
| `serverPermissions.kick_members` | `boolean` | always | - |
| `serverPermissions.ban_members` | `boolean` | always | - |
| `serverPermissions.manage_roles` | `boolean` | always | - |
| `serverPermissions.manage_channels` | `boolean` | always | - |
| `serverPermissions.server_administrator` | `boolean` | always | - |
| `serverPermissions.warn_members` | `boolean` | always | - |
| `serverPermissions.suspend_members` | `boolean` | always | - |
| `serverPermissions.broadcast_messages` | `boolean` | always | - |
| `serverPermissions.overwrite_language_settings` | `boolean` | always | - |
| `channelPermissions` | `object` | - | - |
| `channelPermissions.view_message_history` | `boolean` | always | - |
| `channelPermissions.manage_messages` | `boolean` | always | - |
| `channelPermissions.allow_mentions` | `boolean` | always | - |
| `channelPermissions.post_messages` | `boolean` | always | - |
| `channelPermissions.post_analysis` | `boolean` | always | - |
| `channelPermissions.attach_files` | `boolean` | always | - |
| `channelPermissions.delete_messages` | `boolean` | always | - |
| `class` | `string` | - | - |
| `serverId` | `string` | - | - |
| `createdAt` | `string` | - | - |
| `updatedAt` | `string` | - | - |
| `__v` | `integer` | - | - |

### Example response (200)

```json
{
  "meta": {
    "success": true,
    "message": "User roles fetched successfully",
    "devMessage": "User roles fetched successfully"
  },
  "body": [
    {
      "_id": "{_id}",
      "order": 1,
      "billable": true,
      "title": "Manager 2",
      "description": "Role with permissions to moderate the server",
      "serverPermissions": {
        "allow_dm": true,
        "create_invite": true,
        "kick_members": true,
        "ban_members": true,
        "manage_roles": true,
        "manage_channels": true,
        "server_administrator": true,
        "warn_members": true,
        "suspend_members": true,
        "broadcast_messages": true,
        "overwrite_language_settings": true
      },
      "channelPermissions": {
        "view_message_history": true,
        "manage_messages": true,
        "allow_mentions": true,
        "post_messages": true,
        "post_analysis": true,
        "attach_files": true,
        "delete_messages": true
      },
      "class": "red",
      "serverId": "{_id}",
      "createdAt": "2025-04-30T08:48:49.094Z",
      "updatedAt": "2025-04-30T08:48:49.094Z",
      "__v": 0
    }
  ]
}
```

## Errors

### Fix the request

| Status | Code | What to do |
| --- | --- | --- |
| 400 | - | Invalid request. Check required parameters, body fields, file format, pagination values, and ObjectId values. |
| 401 | - | Missing, invalid, expired, or insufficient API key/token. Older permission middleware may also return 401 for missing permissions. |
| 403 | - | The API key is valid but is not allowed to access this community, channel, user, or resource. |

### Fix the data

| Status | Code | What to do |
| --- | --- | --- |
| 404 | - | The requested resource, route, community, channel, user, API key, status, or job was not found. |

### Retry with backoff

| Status | Code | What to do |
| --- | --- | --- |
| 500 | - | Unexpected Returning.AI service error. |

## Next step

- [Add role to user](https://docs.returning.ai/api-reference/legacy-roles-and-permissions/add-role-to-user.md): `POST /roles/{userId}/{roleId}/add`.
