> ## Documentation Index
> Fetch the complete documentation index at: https://docs.metabind.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Role

> Create a new role

## Path Parameters

<ParamField path="organizationId" type="string" required>
  Organization ID
</ParamField>

## Request Body

<ParamField body="name" type="string" required>
  Role name (must be unique within organization)
</ParamField>

<ParamField body="description" type="string" required>
  Role description
</ParamField>

<ParamField body="permissions" type="object" required>
  Permission settings for each resource type. Every resource type except `mcp` is required, with every action set.
</ParamField>

### Example Request

```json theme={null}
{
  "name": "content-writer",
  "description": "Can create and edit content drafts without publishing",
  "permissions": {
    "organizations": {
      "read": true,
      "update": false,
      "delete": false
    },
    "projects": {
      "create": false,
      "read": true,
      "update": false,
      "delete": false
    },
    "users": {
      "create": false,
      "read": false,
      "update": false,
      "delete": false
    },
    "roles": {
      "create": false,
      "read": false,
      "update": false,
      "delete": false
    },
    "apiKeys": {
      "create": false,
      "read": false,
      "update": false,
      "delete": false
    },
    "components": {
      "create": false,
      "read": true,
      "update": false,
      "delete": false
    },
    "packages": {
      "create": false,
      "read": true,
      "update": false,
      "delete": false
    },
    "contentTypes": {
      "create": false,
      "read": true,
      "update": false,
      "publish": false,
      "delete": false
    },
    "content": {
      "create": true,
      "read": true,
      "update": true,
      "publish": false,
      "delete": false
    },
    "assets": {
      "create": true,
      "read": true,
      "update": false,
      "delete": false
    }
  }
}
```

## Response

Returns the created Role object.

```json theme={null}
{
  "data": {
    "id": "role789",
    "name": "content-writer",
    "description": "Can create and edit content drafts without publishing",
    "permissions": {
      "organizations": { "read": true, "update": false, "delete": false },
      "content": { "create": true, "read": true, "update": true, "publish": false, "delete": false }
    },
    "createdAt": "2024-03-22T10:00:00Z",
    "updatedAt": "2024-03-22T10:00:00Z"
  }
}
```

## Error Responses

### Role Name Already Exists

```json theme={null}
{
  "error": {
    "code": "ROLE_NAME_ALREADY_EXISTS",
    "message": "Role with name \"content-writer\" already exists"
  }
}
```

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.metabind.ai/app/v1/organizations/org123/roles" \
    -H "Authorization: Bearer YOUR_JWT" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "content-writer",
      "description": "Can create and edit content",
      "permissions": {
        "organizations": { "read": true, "update": false, "delete": false },
        "projects": { "create": false, "read": true, "update": false, "delete": false },
        "users": { "create": false, "read": false, "update": false, "delete": false },
        "roles": { "create": false, "read": false, "update": false, "delete": false },
        "apiKeys": { "create": false, "read": false, "update": false, "delete": false },
        "components": { "create": false, "read": true, "update": false, "delete": false },
        "packages": { "create": false, "read": true, "update": false, "delete": false },
        "contentTypes": { "create": false, "read": true, "update": false, "publish": false, "delete": false },
        "content": { "create": true, "read": true, "update": true, "publish": false, "delete": false },
        "assets": { "create": true, "read": true, "update": false, "delete": false }
      }
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://api.metabind.ai/app/v1/organizations/org123/roles',
    {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_JWT',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        name: 'content-writer',
        description: 'Can create and edit content',
        permissions: {
          organizations: { read: true, update: false, delete: false },
          projects: { create: false, read: true, update: false, delete: false },
          users: { create: false, read: false, update: false, delete: false },
          roles: { create: false, read: false, update: false, delete: false },
          apiKeys: { create: false, read: false, update: false, delete: false },
          components: { create: false, read: true, update: false, delete: false },
          packages: { create: false, read: true, update: false, delete: false },
          contentTypes: { create: false, read: true, update: false, publish: false, delete: false },
          content: { create: true, read: true, update: true, publish: false, delete: false },
          assets: { create: true, read: true, update: false, delete: false }
        }
      })
    }
  );

  const { data: role } = await response.json();
  console.log(`Created role: ${role.id}`);
  ```
</CodeGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.