---
title: "Read one role's permissions"
description: "Retrieve one role's table-by-table permissions: rows it can see, fields it can read, fields it can change, and rows on which it can add, edit, or delete."
canonical: "https://grid82.com/docs/builder-api/roles/get"
updated: "2026-11-13"
---

# Read one role's permissions

`GET https://studio.grid82.app/v1/apps/{appId}/roles/{roleId}`

Retrieve one role's table-by-table permissions: rows it can see, fields it can read, fields it can change, and rows on which it can add, edit, or delete.

Include the same sentence shown in Studio for each table so tools and screens describe the role consistently.

Requires the `schema:read` scope. Operation `roles.get`. MCP tool `roles_get`. CLI: `grid82 roles get` (`npx grid82`).

## Path parameters

| Name     | Type   | Required | Description |
| -------- | ------ | -------- | ----------- |
| `appId`  | string | yes      |             |
| `roleId` | string | yes      |             |

**Authorizations**

- `Authorization` (bearer, in header, required)

## Response

**200**: Success

- `data` (`object`, required)
- `data.role` (`object`, required)
- `data.role.id` (`string`, required, pattern: `^[a-z][a-z0-9_]{0,62}$`)
- `data.role.name` (`string`, required, length: `1–120 chars`)
- `data.role.description` (`string`, length: `≤ 500 chars`)
- `data.role.assistantMonthlyCredits` (`integer`, range: `0–10000000`)
- `data.role.interface` (`enum<string>`, one of: `assigned, own`)
- `data.role.automations` (`enum<string>`, one of: `none, own`)
- `data.tables` (`string | object[]`, required)
- `data.revision` (`string`, required)

```json
{
  "data": {
    "role": {
      "id": "<string>",
      "name": "<string>",
      "description": "<string>",
      "assistantMonthlyCredits": 123,
      "interface": "assigned",
      "automations": "none"
    },
    "tables": "<string>",
    "revision": "<string>"
  }
}
```

**4XX**: Refused

- `error` (`object`, required)
- `error.code` (`enum<string>`, required, one of: `not_found, forbidden, unauthenticated, validation_failed, conflict, rate_limited, payment_required, not_implemented, internal`)
- `error.message` (`string`, required)
- `error.details` (`Record<string, unknown>`)

```json
{
  "error": {
    "code": "not_found",
    "message": "<string>",
    "details": {}
  }
}
```

**Example request**

```bash
curl --request GET \
  --url 'https://studio.grid82.app/v1/apps/<appId>/roles/<roleId>' \
  --header 'Authorization: Bearer <token>'
```
