Crear un rol
Un nombre y una lista de permisos. Lo que vuelve es más largo que lo que enviaste.
Ejecuta la llamada real contra tu espacio de trabajo, con tu propia clave.
POST /roles
Un nombre y una lista de permisos. Lo que vuelve es más largo que lo que enviaste.
Ejemplo
Requiere roles:write. Devuelve 201. Un rol personalizado tiene builtin: null, editable: true y deletable: true, y no lo tiene nadie hasta que se mueve a alguien a él.
curl -X POST "$OE/roles" -H "$AUTH" -H "Content-Type: application/json" \ -d '{ "name": "Support", "description": "Answers the shared inboxes and nothing else.", "permissions": ["emails:send", "threads:write", "labels:write", "contacts:read"] }'{ "object": "role", "id": "role_2b81de079c1f0a4b7e05d386", "name": "Support", "description": "Answers the shared inboxes and nothing else.", "permissions": [ "emails:send", "emails:read", "threads:read", "threads:write", "labels:read", "labels:write", "contacts:read" ], "builtin": null, "editable": true, "deletable": true, "members": 0, "apiKeys": 0, "createdAt": "2026-08-30T10:41:02.000Z", "updatedAt": "2026-08-30T10:41:02.000Z"}Entraron cuatro permisos y volvieron siete. emails:send implica emails:read, threads:write implica threads:read, labels:write implica labels:read. Un rol que puede archivar una conversación que no puede abrir es una casilla que alguien olvidó y no una política que nadie pretenda, así que la implicación se almacena en lugar de rechazarse. La lista vuelve además en orden canónico, que es lo que permite a un cliente comparar dos roles como JSON y decidir si el botón Guardar está habilitado.
Un permiso desconocido SÍ se rechaza aquí en lugar de descartarse: templates:writ es invalid_parameter, un 422, nombrando la cadena. El servicio normaliza en silencio porque también es la ruta de precarga y la ruta MCP, donde hacer fallar un rol entero por una palabra no reconocida sería peor. Pero está mal en una llamada que alguien hizo deliberadamente. Un 200 que devuelva un rol que no puede editar plantillas no le ha dicho nada a esa persona, y se pasará la tarde con ello.
Un nombre duplicado en el mismo espacio de trabajo es role_name_taken, un 409. El rol personalizado número 25 es role_limit_reached, un 422. Protege el tamaño que puede alcanzar una matriz antes de que nadie la audite, y no es un límite de plan.
Crear un rol no se lo da a nadie. Mover personas a él es PATCH /members/{userId}, y apuntar una clave hacia él se hace allí donde se emite la clave.