Multi-Role Feature
Add custom role
Add a custom role to a project with specific permissions and signup endpoint. Optional **`featurePermissions`** must align with app JWT gates — see `components/schemas/AppRoleFeaturePermissions` and `services/appRoleFeatureMap.js`. Accepts: OrgBearerAuth (for admin users), ProjectBearerAuth (JWT for authenticated users), or ApiKeyAuth (X-API-Key for programmatic access). Both ProjectBearerAuth and ApiKeyAuth are fully implemented.
/api/projects/{projectId}/multi-role/rolesSDK setup
Create a client and set credentials (JWT and/or API key) before calling the API. Match the authentication type shown above.
import { Configuration, MultiRoleFeatureApi } from 'mudbase-sdk';
const configuration = new Configuration({
basePath: 'https://cloud.mudbase.dev',
accessToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c3JfbW9yZ2FuX2RlIiwiZW1haWwiOiJtb3JnYW4uY2hlbkBub3J0aHdpbmQuZGV2IiwiZXhwIjoxODI1MTI5NjAwfQ.doc_preview_sig',
});
const multirolefeature = new MultiRoleFeatureApi(configuration);import { Configuration, MultiRoleFeatureApi } from 'mudbase-sdk';
const configuration = new Configuration({
basePath: 'https://cloud.mudbase.dev',
accessToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c3JfbW9yZ2FuX2RlIiwiZW1haWwiOiJtb3JnYW4uY2hlbkBub3J0aHdpbmQuZGV2IiwiZXhwIjoxODI1MTI5NjAwfQ.doc_preview_sig',
});
const multirolefeature = new MultiRoleFeatureApi(configuration);Example request
Call this endpoint using the client from SDK setup. Use View HTTP for a raw cURL example.
const { data: result } = await multirolefeature.addCustomRole(
"proj_WH6eS54ADsVY",
{
slug: "normal-depot-s88r",
name: "Micaela McClure",
description: "Our sweet-inspired Bacon brings a taste of luxury to your stunning lifestyle",
signupEndpoint: "circuit calculate",
requiresApproval: true,
requiresPayment: false,
requiresKYC: false,
defaultPermissions: "capacitor index",
collectionPermissions: "bus back up",
metadata: "bus connect",
featurePermissions: "port override"
}
);const { data: result } = await multirolefeature.addCustomRole(
"proj_WH6eS54ADsVY",
{
slug: "normal-depot-s88r",
name: "Micaela McClure",
description: "Our sweet-inspired Bacon brings a taste of luxury to your stunning lifestyle",
signupEndpoint: "circuit calculate",
requiresApproval: true,
requiresPayment: false,
requiresKYC: false,
defaultPermissions: "capacitor index",
collectionPermissions: "bus back up",
metadata: "bus connect",
featurePermissions: "port override"
}
);Playground
liveTest this endpoint with your own credentials. Your requests will be sent to the live API.
No Request Yet
Send a request to see the full inspector
Authentication
Authorization: Bearer YOUR_TOKEN header (user-facing apps, RBAC). View authentication guide →Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | — |
Request Body
{
"slug": "seller",
"name": "Seller",
"description": "Seller role with CRUD on seller-owned collections",
"signupEndpoint": "seller",
"requiresApproval": false,
"requiresPayment": false,
"requiresKYC": false,
"defaultPermissions": [
{
"resource": "panel calculate",
"actions": [
"alarm transmit"
]
}
],
"collectionPermissions": {},
"metadata": {},
"featurePermissions": {
"messaging": {
"email": true,
"sms": true,
"push": false,
"history": true,
"stats": true
},
"integration": {
"read": true,
"execute": true
},
"storage": {
"read": true,
"upload": true
}
}
}{
"slug": "seller",
"name": "Seller",
"description": "Seller role with CRUD on seller-owned collections",
"signupEndpoint": "seller",
"requiresApproval": false,
"requiresPayment": false,
"requiresKYC": false,
"defaultPermissions": [
{
"resource": "panel calculate",
"actions": [
"alarm transmit"
]
}
],
"collectionPermissions": {},
"metadata": {},
"featurePermissions": {
"messaging": {
"email": true,
"sms": true,
"push": false,
"history": true,
"stats": true
},
"integration": {
"read": true,
"execute": true
},
"storage": {
"read": true,
"upload": true
}
}
}Responses
{
"success": true,
"message": "Custom role added",
"data": {
"slug": "seller",
"name": "Seller",
"description": "Seller role with CRUD on seller-owned collections",
"isEnabled": true,
"isCustom": true,
"signupEndpoint": "seller",
"requiresApproval": false,
"requiresPayment": false,
"requiresKYC": false,
"defaultPermissions": [
{
"resource": "project",
"actions": [
"read"
]
},
{
"resource": "data",
"actions": [
"read",
"create"
]
}
],
"collectionPermissions": [
{
"collectionSlug": "listings",
"actions": [
"create",
"read",
"update",
"delete"
]
},
{
"collectionSlug": "orders",
"actions": [
"create",
"read"
],
"conditions": {
"status": "active"
}
}
],
"metadata": {},
"featurePermissions": {
"messaging": {
"email": true,
"sms": true,
"push": true,
"history": true,
"stats": true
},
"integration": {
"read": true,
"create": true,
"update": true,
"delete": false,
"execute": true,
"test": true,
"export": true,
"read_usage": true
},
"functions": {
"create": true,
"read": true,
"update": true,
"delete": false,
"execute": true,
"simulate": true
},
"data": {
"create": true,
"read": true,
"update": true,
"delete": false
},
"search": {
"query": true,
"suggestions": true,
"read_analytics": true
},
"usage": {
"read": true
},
"storage": {
"read": true,
"create": true,
"update": true,
"delete": false,
"upload": true
},
"chat": {
"read": true,
"create": true,
"update": true,
"delete": false
},
"realtime": {
"read_analytics": true,
"read_active_users": true,
"presence": true,
"read_throughput": true,
"read_history": true
},
"roleElevation": {
"request": true,
"status": true,
"documents": true
},
"webhooks": {
"config_read": true,
"config_update": true,
"test_transformation": true
}
}
}
}{
"success": true,
"message": "Custom role added",
"data": {
"slug": "seller",
"name": "Seller",
"description": "Seller role with CRUD on seller-owned collections",
"isEnabled": true,
"isCustom": true,
"signupEndpoint": "seller",
"requiresApproval": false,
"requiresPayment": false,
"requiresKYC": false,
"defaultPermissions": [
{
"resource": "project",
"actions": [
"read"
]
},
{
"resource": "data",
"actions": [
"read",
"create"
]
}
],
"collectionPermissions": [
{
"collectionSlug": "listings",
"actions": [
"create",
"read",
"update",
"delete"
]
},
{
"collectionSlug": "orders",
"actions": [
"create",
"read"
],
"conditions": {
"status": "active"
}
}
],
"metadata": {},
"featurePermissions": {
"messaging": {
"email": true,
"sms": true,
"push": true,
"history": true,
"stats": true
},
"integration": {
"read": true,
"create": true,
"update": true,
"delete": false,
"execute": true,
"test": true,
"export": true,
"read_usage": true
},
"functions": {
"create": true,
"read": true,
"update": true,
"delete": false,
"execute": true,
"simulate": true
},
"data": {
"create": true,
"read": true,
"update": true,
"delete": false
},
"search": {
"query": true,
"suggestions": true,
"read_analytics": true
},
"usage": {
"read": true
},
"storage": {
"read": true,
"create": true,
"update": true,
"delete": false,
"upload": true
},
"chat": {
"read": true,
"create": true,
"update": true,
"delete": false
},
"realtime": {
"read_analytics": true,
"read_active_users": true,
"presence": true,
"read_throughput": true,
"read_history": true
},
"roleElevation": {
"request": true,
"status": true,
"documents": true
},
"webhooks": {
"config_read": true,
"config_update": true,
"test_transformation": true
}
}
}
}