---
updatedAt: 2026-06-04T19:58:43.000Z
agentTools:
  projectIndex: https://docs.wristband.dev/llms.txt
---

# Create Role

Creates a new role resource.

### Required Permissions

Below is the list of required permissions needed to interact with this API.  For each permission, the allowed permission boundaries are also specified.

| Permission      | Boundary              | Description                                                                                                                               |
| --------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| **role:create** | Application           | The subject can create roles within the application to which the subject belongs.                                                         |
|                 | Tenant                | The subject can create roles owned by the tenant to which the subject belongs.                                                            |
|                 | Tenant Inclusion List | The subject can create roles owned by tenants specified in the tenant inclusion list.                                                     |
|                 | Tenant Exclusion List | The subject can create roles owned by tenants that belong to the subject's application but are not included in the tenant exclusion list. |

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Resource Management APIs",
    "version": "1.0.0",
    "description": "Resource Management APIs",
    "license": {
      "name": "Private",
      "url": "https://wristband.dev/terms/"
    },
    "termsOfService": "https://wristband.dev/terms/",
    "contact": {
      "name": "Wristband Support",
      "email": "support@wristband.dev",
      "url": "https://wristband.dev/contact/"
    }
  },
  "servers": [
    {
      "url": "https://{application_vanity_domain}",
      "description": "Wristband application scoped URL.",
      "variables": {
        "application_vanity_domain": {
          "default": "yourapp-yourorg.us.wristband.dev",
          "description": "Wristband vanity domain scoped to a specific application."
        }
      }
    }
  ],
  "tags": [
    {
      "name": "Roles",
      "description": "Roles",
      "x-displayName": "Roles"
    }
  ],
  "paths": {
    "/api/v1/roles": {
      "post": {
        "summary": "Create Role",
        "operationId": "createRoleV1",
        "tags": [
          "Roles"
        ],
        "requestBody": {
          "description": "Role Resource",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Resource_Management_APIs_Role"
              },
              "examples": {
                "Example 1 - Basic Role": {
                  "value": {
                    "ownerType": "APPLICATION",
                    "ownerId": "pl4a4aa4jzydksmrf3jnu5yfcw",
                    "name": "admin-role",
                    "displayName": "Admin Role",
                    "description": "This is the admin role.",
                    "permissionBoundaryId": "jayovsssgbgbpk47ihblujcm2e",
                    "tenantVisibility": "ALL"
                  }
                },
                "Example 2 - Tenant Inclusion List": {
                  "value": {
                    "ownerType": "APPLICATION",
                    "ownerId": "pl4a4aa4jzydksmrf3jnu5yfcw",
                    "name": "admin-role",
                    "displayName": "Admin Role",
                    "description": "This is the admin role.",
                    "permissionBoundaryId": "jayovsssgbgbpk47ihblujcm2e",
                    "tenantVisibility": "TENANT_INCLUSION_LIST",
                    "tenantVisibilityInclusionList": [
                      "jayovsssgbgbpk47ihblujcm2e"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Resource_Management_APIs_Location"
              },
              "ETag": {
                "$ref": "#/components/headers/Resource_Management_APIs_ETag"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Resource_Management_APIs_Role"
                },
                "examples": {
                  "Example 1": {
                    "$ref": "#/components/examples/Resource_Management_APIs_Role"
                  },
                  "Example 2": {
                    "$ref": "#/components/examples/Resource_Management_APIs_TenantInclusionListRole"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Resource_Management_APIs_400-with-message-body"
          },
          "401": {
            "$ref": "#/components/responses/Resource_Management_APIs_401"
          },
          "403": {
            "$ref": "#/components/responses/Resource_Management_APIs_403"
          },
          "405": {
            "$ref": "#/components/responses/Resource_Management_APIs_405"
          },
          "406": {
            "$ref": "#/components/responses/Resource_Management_APIs_406"
          },
          "415": {
            "$ref": "#/components/responses/Resource_Management_APIs_415"
          },
          "500": {
            "$ref": "#/components/responses/Resource_Management_APIs_500"
          },
          "503": {
            "$ref": "#/components/responses/Resource_Management_APIs_503"
          }
        },
        "security": [
          {
            "Resource_Management_APIs_BearerAuth": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "Resource_Management_APIs_BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "schemas": {
      "Resource_Management_APIs_id": {
        "type": "string",
        "minLength": 1,
        "maxLength": 26,
        "example": "pl4a4aa4jzydksmrf3jnu5yfcw",
        "description": "Globally unique Id of the resource.",
        "readOnly": true
      },
      "Resource_Management_APIs_api-error": {
        "title": "ApiError",
        "type": "object",
        "description": "API error object",
        "x-examples": {
          "Example 1": {
            "code": "invalid_request",
            "message": "The request was invalid",
            "ticket": "11t7n71hi5e6t"
          }
        },
        "properties": {
          "type": {
            "type": "string",
            "example": "base_error",
            "minLength": 1,
            "description": "The type of the API error.",
            "readOnly": true
          },
          "code": {
            "type": "string",
            "example": "invalid_request",
            "minLength": 1,
            "description": "A code identifying the error that occurred.",
            "readOnly": true
          },
          "message": {
            "type": "string",
            "example": "The request was invalid",
            "description": "A free text message describing the error.  This error message is only meant to help developers understand the cause of the error.  It should not be used for programmatic purposes.",
            "readOnly": true
          },
          "ticket": {
            "type": "string",
            "example": "11t7n71hi5e6t",
            "description": "Ticket that can help correlate the error to the backend",
            "readOnly": true
          },
          "details": {
            "type": "object",
            "description": "A map of details about the error. The keys are defined by the API.",
            "additionalProperties": {},
            "example": {
              "attemptsRemaining": 4
            }
          }
        },
        "required": [
          "type",
          "code"
        ]
      },
      "Resource_Management_APIs_constraint-violations-api-error": {
        "title": "ConstraintViolationsApiError",
        "description": "An API error that occurred due to a constraint violation",
        "allOf": [
          {
            "$ref": "#/components/schemas/Resource_Management_APIs_api-error"
          },
          {
            "type": "object",
            "readOnly": true,
            "required": [
              "violations"
            ],
            "properties": {
              "violations": {
                "type": "object",
                "readOnly": true,
                "required": [
                  "code"
                ],
                "properties": {
                  "code": {
                    "type": "string",
                    "description": "A code identifying the constraint violation.",
                    "minLength": 1,
                    "example": "too_long"
                  },
                  "constraintAttributes": {
                    "type": "object",
                    "description": "A map of constraint attribute values.",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "example": {
                      "maxLength": "10"
                    }
                  }
                }
              }
            }
          }
        ],
        "x-examples": {
          "Example 1": {
            "type": "constraint_violations_error",
            "code": "message_body_constraint_violations",
            "message": "The request contained invalid fields",
            "ticket": "11t7n71hi5e6t",
            "violations": {
              "field1": {
                "code": "too_long",
                "constraintAttributes": {
                  "maxLength": "10"
                }
              },
              "field2": {
                "code": "not_null"
              }
            }
          }
        }
      },
      "Resource_Management_APIs_version-metadata": {
        "title": "VersionMetadata",
        "type": "object",
        "description": "Version metadata associated to a resource.",
        "properties": {
          "version": {
            "type": "string",
            "example": "1.0",
            "description": "The version of the resource",
            "readOnly": true
          },
          "lastModifiedTime": {
            "type": "string",
            "format": "date-time",
            "example": "2016-06-13T19:49:31.686Z",
            "description": "The time at which the resource was last modified",
            "readOnly": true
          },
          "creationTime": {
            "type": "string",
            "format": "date-time",
            "example": "2016-06-13T19:49:31.686Z",
            "description": "The time at which the resource was created",
            "readOnly": true
          }
        }
      },
      "Resource_Management_APIs_createOwnerId": {
        "description": "[Required on Create] The ID of the owner of the resource.",
        "type": "string",
        "minLength": 1,
        "maxLength": 26,
        "example": "d7aml4q5lza3fdi2gavzdliouy"
      },
      "Resource_Management_APIs_createOwnerType": {
        "description": "[Required on Create] The type of the owner of the resource.",
        "type": "string",
        "enum": [
          "APPLICATION",
          "TENANT"
        ],
        "minLength": 1,
        "maxLength": 30,
        "example": "APPLICATION"
      },
      "Resource_Management_APIs_Role": {
        "title": "Role",
        "description": "Role",
        "type": "object",
        "x-tags": [
          "Models"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Resource_Management_APIs_id"
          },
          "ownerType": {
            "$ref": "#/components/schemas/Resource_Management_APIs_createOwnerType"
          },
          "ownerId": {
            "$ref": "#/components/schemas/Resource_Management_APIs_createOwnerId"
          },
          "type": {
            "description": "Enum representing the type of the role.  Only `CUSTOM` role types can be created.\n\n- `PREDEFINED`: [Read-only] A predefined role.  These roles are created by Wristband.\n- `CUSTOM`: A custom role that is created by an end user.",
            "type": "string",
            "enum": [
              "PREDEFINED",
              "CUSTOM"
            ],
            "minLength": 1,
            "maxLength": 45,
            "default": "CUSTOM",
            "example": "CUSTOM"
          },
          "name": {
            "description": "[Required on Create] The name of the role. Name must be unique (case-insensitive) within an application.\nApplication-level roles are prefixed with `app:<app_domain_name>:`, and tenant-level roles\nare prefixed with `tnt:<tnt_domain_name>:`.",
            "type": "string",
            "pattern": "^[a-zA-Z0-9]+(-+[a-zA-Z0-9]+)*$",
            "minLength": 1,
            "maxLength": 40,
            "example": "admin-role"
          },
          "displayName": {
            "description": "[Required on Create] The display name of the role.",
            "type": "string",
            "minLength": 1,
            "maxLength": 60,
            "example": "Admin Role"
          },
          "description": {
            "description": "Optional description of the role.",
            "type": "string",
            "minLength": 1,
            "maxLength": 500,
            "example": "This is the admin role."
          },
          "permissionBoundaryId": {
            "description": "Optional ID of the permission boundary that is assigned to this role.",
            "type": "string",
            "maxLength": 26,
            "example": "jayovsssgbgbpk47ihblujcm2e"
          },
          "tenantVisibility": {
            "description": "[Required on Create] Enum representing the tenants that this permission boundary should be visible to.\n\n- `ALL`: The role is visible to all tenants, and it can also be assigned to all users and tenant-level clients.\n- `TENANT_INCLUSION_LIST`: The role is visible to only the tenants specified in the `tenantVisibilityInclusionList` field, and it can only be assigned to users and tenant-level clients that belong to the tenants in that list.\n- `NONE`: The role is not visible to any tenants, and it can only be assigned to application-level subjects (such as an application-level client).\n- `OWNER`: The role is only visible to the tenant that owns it, and it can only be assigned to users and tenant-level clients that belong to the owning tenant.\n\n** For `APPLICATION` owner type, visibility can be any of `ALL`, `TENANT_INCLUSION_LIST`, or `NONE`.\n** For `TENANT` owner type, visibility can only be `OWNER`.",
            "type": "string",
            "enum": [
              "ALL",
              "TENANT_INCLUSION_LIST",
              "NONE",
              "OWNER"
            ],
            "minLength": 1,
            "maxLength": 45,
            "example": "ALL"
          },
          "tenantVisibilityInclusionList": {
            "description": "The list of tenants that this role should be visible to.  This value should only be used if the `tenantVisibility` is set to  `TENANT_INCLUSION_LIST`.",
            "type": "array",
            "maxItems": 10,
            "uniqueItems": true,
            "items": {
              "description": "The ID of the tenant this role is visible to.",
              "type": "string",
              "minLength": 1,
              "maxLength": 26,
              "example": "jayovsssgbgbpk47ihblujcm2e"
            },
            "example": [
              "jayovsssgbgbpk47ihblujcm2e"
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/Resource_Management_APIs_version-metadata"
          }
        },
        "example": {
          "ownerType": "APPLICATION",
          "ownerId": "pl4a4aa4jzydksmrf3jnu5yfcw",
          "type": "CUSTOM",
          "name": "admin-role",
          "displayName": "Admin Role",
          "description": "This is the admin role.",
          "permissionBoundaryId": "jayovsssgbgbpk47ihblujcm2e",
          "tenantVisibility": "ALL"
        }
      }
    },
    "examples": {
      "Resource_Management_APIs_Role": {
        "description": "Basic example of a role JSON object with all fields present.",
        "value": {
          "id": "a4jzydksmrf3jnu5yfcwpl4a4a",
          "ownerType": "APPLICATION",
          "ownerId": "pl4a4aa4jzydksmrf3jnu5yfcw",
          "type": "CUSTOM",
          "name": "admin-role",
          "displayName": "Admin Role",
          "description": "This is the admin role.",
          "permissionBoundaryId": "jayovsssgbgbpk47ihblujcm2e",
          "tenantVisibility": "ALL",
          "metadata": {
            "version": "0.0",
            "lastModifiedTime": "2021-06-13T19:49:31.686Z",
            "creationTime": "2021-06-13T19:49:31.686Z"
          }
        }
      },
      "Resource_Management_APIs_TenantInclusionListRole": {
        "description": "Basic example of a role JSON object with visibility set to `TENANT_INCLUSION_LIST`.",
        "value": {
          "id": "a4jzydksmrf3jnu5yfcwpl4a4a",
          "ownerType": "APPLICATION",
          "ownerId": "pl4a4aa4jzydksmrf3jnu5yfcw",
          "type": "CUSTOM",
          "name": "admin-role",
          "displayName": "Admin Role",
          "description": "This is the admin role.",
          "permissionBoundaryId": "jayovsssgbgbpk47ihblujcm2e",
          "tenantVisibility": "TENANT_INCLUSION_LIST",
          "tenantVisibilityInclusionList": [
            "jayovsssgbgbpk47ihblujcm2e"
          ],
          "metadata": {
            "version": "0.0",
            "lastModifiedTime": "2021-06-13T19:49:31.686Z",
            "creationTime": "2021-06-13T19:49:31.686Z"
          }
        }
      }
    },
    "headers": {
      "Resource_Management_APIs_ETag": {
        "schema": {
          "type": "string",
          "example": "1.0",
          "minLength": 1
        },
        "description": "The version of the resource"
      },
      "Resource_Management_APIs_Location": {
        "schema": {
          "type": "string"
        },
        "description": "URL pointing to the location of the newly created resource"
      }
    },
    "responses": {
      "Resource_Management_APIs_401": {
        "description": "Unauthorized",
        "headers": {
          "WWW-Authenticate": {
            "description": "Includes details on the failed authentication condition. This header is set in accordance with the [OAuth2 specification](https://datatracker.ietf.org/doc/html/rfc6750#section-3).",
            "schema": {
              "type": "string",
              "example": "Bearer error=\"invalid_token\", error_description=\"The provided access token was invalid\""
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Resource_Management_APIs_api-error"
            },
            "examples": {
              "code - unauthenticated": {
                "value": {
                  "type": "base_error",
                  "code": "invalid_access_token",
                  "message": "The provided access token was invalid",
                  "ticket": "1u0d0edhwbjsd"
                }
              }
            }
          }
        }
      },
      "Resource_Management_APIs_403": {
        "description": "Forbidden",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Resource_Management_APIs_api-error"
            },
            "examples": {
              "code - unauthorized": {
                "value": {
                  "type": "base_error",
                  "code": "unauthorized",
                  "message": "The request failed authorization",
                  "ticket": "11t7n71hi5e6t"
                }
              }
            }
          }
        }
      },
      "Resource_Management_APIs_405": {
        "description": "Method Not Allowed",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Resource_Management_APIs_api-error"
            },
            "examples": {
              "code - method_not_supported": {
                "value": {
                  "type": "base_error",
                  "code": "method_not_supported",
                  "message": "The specified HTTP method is not supported",
                  "ticket": "11t7n71hi5e6t"
                }
              }
            }
          }
        }
      },
      "Resource_Management_APIs_406": {
        "description": "Not Acceptable",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Resource_Management_APIs_api-error"
            },
            "examples": {
              "code - not_acceptable": {
                "value": {
                  "type": "base_error",
                  "code": "not_acceptable",
                  "message": "The Accept header was invalid",
                  "ticket": "11t7n71hi5e6t"
                }
              }
            }
          }
        }
      },
      "Resource_Management_APIs_415": {
        "description": "Unsupported Media Type",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Resource_Management_APIs_api-error"
            },
            "examples": {
              "code - unsupported_media_type": {
                "value": {
                  "type": "base_error",
                  "code": "unsupported_media_type",
                  "message": "The Content-Type header was invalid",
                  "ticket": "11t7n71hi5e6t"
                }
              }
            }
          }
        }
      },
      "Resource_Management_APIs_500": {
        "description": "Internal Server Error",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Resource_Management_APIs_api-error"
            },
            "examples": {
              "code - internal_server_failure ": {
                "value": {
                  "type": "base_error",
                  "code": "internal_server_failure",
                  "message": "An unexpected error occurred while processing the request",
                  "ticket": "11t7n71hi5e6t"
                }
              }
            }
          }
        }
      },
      "Resource_Management_APIs_503": {
        "description": "Service Unavailable",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Resource_Management_APIs_api-error"
            },
            "examples": {
              "code - service_unavailable": {
                "value": {
                  "type": "base_error",
                  "code": "service_unavailable",
                  "message": "The service is currently unavailable",
                  "ticket": "11t7n71hi5e6t"
                }
              }
            }
          }
        }
      },
      "Resource_Management_APIs_400-with-message-body": {
        "description": "Bad Request",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Resource_Management_APIs_api-error"
                },
                {
                  "$ref": "#/components/schemas/Resource_Management_APIs_constraint-violations-api-error"
                }
              ]
            },
            "examples": {
              "code - invalid_request": {
                "value": {
                  "type": "base_error",
                  "code": "invalid_request",
                  "message": "The request was invalid",
                  "ticket": "11t7n71hi5e6t"
                }
              },
              "code - request_constraint_violations": {
                "value": {
                  "type": "constraint_violations_error",
                  "code": "message_body_constraint_violations",
                  "message": "The message body contained invalid fields",
                  "ticket": "11t7n71hi5e6t",
                  "violations": {
                    "field1": {
                      "code": "too_long",
                      "constraintAttributes": {
                        "maxLength": 10
                      }
                    },
                    "field2": {
                      "code": "not_null"
                    }
                  }
                }
              },
              "code - message_body_constraint_violations": {
                "value": {
                  "type": "constraint_violations_error",
                  "code": "message_body_constraint_violations",
                  "message": "The message body contained invalid fields",
                  "ticket": "11t7n71hi5e6t",
                  "violations": {
                    "field1": {
                      "code": "too_long",
                      "constraintAttributes": {
                        "maxLength": 10
                      }
                    },
                    "field2": {
                      "code": "not_null"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "Resource Management APIs",
      "tags": [
        "Applications",
        "Auth Factors",
        "Auth Sessions",
        "Auth Session Policies",
        "Bot Detection Policies",
        "Custom Claims",
        "Custom Domains",
        "Email Brandings",
        "Email Domains",
        "Email Policies",
        "External IdP Profiles",
        "External IdP Tokens",
        "Identity Providers",
        "IdP Attribute Mappings",
        "IdP Role Mappings",
        "MFA Policies",
        "OAuth2 Clients",
        "Page Brandings",
        "Password Policies",
        "Permissions",
        "Permission Boundaries",
        "Permission Groups",
        "Refresh Tokens",
        "Remembered Tenants",
        "Roles",
        "Role Assignment Policies",
        "Signing Keys",
        "Tenants",
        "Users",
        "User Schemas",
        "Vanity Domains",
        "Webhook Policies",
        "Workflow Policies"
      ]
    }
  ]
}
```