---
title: "Create a new role"
method: POST
path: "/settings/roles"
tags: ["Admin Settings: Roles"]
---

# Create a new role

`POST /settings/roles`

## Request

- Base URL: `http://localhost:8000/api/admin`
- URL: `http://localhost:8000/api/admin/settings/roles`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/bagisto/apis/bagisto-admin-api/docs/settings/roles/post.ts> (a function with typed inputs; its response is checked against the schema)

Validates name, description, permission_type (all|custom). When permission_type=custom, permissions array is required.

## Request body

- object
  - `name` string, required
  - `description` string, required
  - `permission_type` 'all' | 'custom', required
  - `permissions` string[]

## Response `201`

Role created.

- AdminSettingsRole: Admin Settings → Roles endpoints (Block B Wave 2). REST: GET /api/admin/settings/roles GET /api/admin/settings/roles/{id} POST /api/admin/settings/roles PUT /api/admin/settings/roles/{id} DELETE /api/admin/settings/roles/{id} (guards: in-use, last-role) GraphQL: adminSettingsRoles / adminSettingsRole createAdminSettingsRole / updateAdminSettingsRole / deleteAdminSettingsRole Mirrors Webkul\Admin\Http\Controllers\Settings\RoleController 1:1.
  - `id` integer, nullable
  - `name` string, nullable
  - `description` string, nullable
  - `permissionType` string, nullable
  - `permissions` string[], nullable
  - `createdAt` string, nullable
  - `updatedAt` string, nullable
  - `message` string, nullable

## Other responses

- `400`: Invalid input
- `422`: Validation failure.

---

[API](https://skmtc.dev/bagisto/apis/bagisto-admin-api.md) - [All operations](https://skmtc.dev/bagisto/apis/bagisto-admin-api/llms.txt) - [OpenAPI document](https://skmtc.dev/bagisto/apis/bagisto-admin-api/revisions/3198f11be70f?raw)
