> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://mediakind.ferndocs.com/mkio/how-to/managing-your-organization/restricted-access-tokens/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://mediakind.ferndocs.com/_mcp/server. # Restricted access tokens A restricted access token lets you provide a token to an automation system or script without exposing all of your capabilities. It cannot grant more rights than you already have. **Role-based access control (RBAC)** in MK.IO is controlled by granting permissions to users. Each permission is composed of: * A scope: defines the resources the permission applies to. * A role: defines what capabilities are granted on those resources. For more details on RBAC in MK.IO, see [Access, users and teams](/mkio/how-to/managing-your-organization/access-users-and-teams). ## View your RBAC capabilities Because a restricted access token cannot exceed your existing rights, the first step is to check what you have access to. Log in to the MK.IO application at [app.mk.io](https://app.mk.io), then open [app.mk.io/api/v1/user/rbac](https://app.mk.io/api/v1/user/rbac) in a second browser tab. The response is a JSON document that describes your capabilities. If you have access to multiple organizations, switch to the correct organization first to see the right set of capabilities. The `teams` field shows how your RBAC capabilities are derived. The `rbac` field is what you use when defining a restricted token. ```json { "rbac": { "core.customer": { "00000000-0000-0000-0000-000000000000": { "core.customer": [ "get", "update" ], "core.invite": [ "create", "delete", "get", "update" ], "core.project": [ "assign", "create", "delete", "get", "update" ] } }, "core.project": { "11111111-1111-1111-1111-111111111111": { "ams.asset": [ "create", "delete", "get", "update" ], "ams.assetfilter": [ "create", "delete", "get", "update" ] } } } } ``` This example shows capabilities on a single organization (`core.customer`) and a single project (`core.project`). ## Create a restricted token Send a POST request to the tokens endpoint with a `permissions` object that is a strict subset of the `rbac` object you received above. ```shell curl --request POST \ --url https://app.mk.io/api/v1/user/tokens \ --header 'accept: application/json' \ --header 'authorization: Bearer bearer-token' \ --header 'content-type: application/json' \ --data ' { "permissions": { "core.project": { "11111111-1111-1111-1111-111111111111": { "ams.asset": [ "create", "delete", "get", "update" ] } } }, "type": "restricted", "description": "Restricted token for automation", "expireDate": "2025-08-22T10:15:00.000Z", "organizationId": "00000000-0000-0000-0000-000000000000" } ' ``` This request creates a token scoped to asset management on project `11111111-1111-1111-1111-111111111111` only. Requests using this token will be denied for any operation outside that scope. If the request succeeds, the response includes the new token details and the JWT string. ```json { "metadata": { "id": "00000000-0000-0000-0000-000000000000", "type": "restricted", "JWT": "eyJ..." }, "spec": { ... ... } } ``` Use the returned JWT for subsequent asset management operations.