Update member role
PUT /teams/{teamId}/members/{userId}/role
Changes a member's role on the team.
teams:write · Team permission:members.set_role · Rate limit: default (120 / 60s)viewer, editor and owner are no longer accepted.They named a model the product no longer has. On this endpoint owner meant "runs the team" and mapped to Admin — not the account owner — and there was no name at all for Deputy Admin, Data Manager, or a role your team built for itself. A caller sending owner was granting something other than what they asked for.Send one of admin, deputy_admin, data_manager, editor, viewer — or a roleId, which is the only way to name a custom role. There is no deprecation window; the old names return 400 BAD_REQUEST.Beyond the key's own scope, the person who created the key must hold members.set_role on the team, and the containment rules apply exactly as they do in the Hub: you cannot change your own role, you cannot change somebody whose role is not smaller than yours, and the team owner cannot be re-roled at all. Each of those has its own error code — see Errors.
Path parameters
Request body
Send exactly one of role or roleId.
admin, deputy_admin, data_manager, editor or viewer. owner is not assignable.{ "role": "data_manager" }
{ "roleId": "01930000-0000-7000-8000-000000000004" }
Request
curl -X PUT https://api.twominutereports.com/v1/teams/0190f8b0-1a2b-7c3d-8e4f-5a6b7c8d9e0f/members/0190f8a4-5e6f-7a8b-9c0d-1e2f3a4b5c6d/role \
-H "Authorization: Bearer tmrc_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "role": "data_manager" }'
Response
{
"success": true,
"data": { "updated": true }
}
{
"success": false,
"error": { "code": "BAD_REQUEST", "message": "Unknown or unassignable role \"owner\". Send one of admin, deputy_admin, data_manager, editor, viewer — or a `roleId` for a custom role." }
}
{
"success": false,
"error": { "code": "PAYMENT_REQUIRED", "message": "Your team's plan has been cancelled. Please reactivate your subscription to continue." }
}
{
"success": false,
"error": { "code": "FORBIDDEN", "message": "You do not have permission to perform this action" }
}
The role name is not one this endpoint accepts. The legacy viewer/editor/owner vocabulary was removed in September 2026.
{
"success": false,
"error": { "code": "BAD_REQUEST", "message": "Unknown or unassignable role \"owner\". Send one of admin, deputy_admin, data_manager, editor, viewer — or a `roleId` for a custom role." }
}
Nobody can change their own role, not even to reduce it.
{
"success": false,
"error": { "code": "CANNOT_ACT_ON_SELF", "message": "You cannot change your own role or seat. Ask another Admin to do it." }
}
The target holds permissions the key's holder does not. An equal role is refused too.
{
"success": false,
"error": { "code": "CANNOT_ACT_ON_MEMBER", "message": "This member holds permissions you do not have, so you cannot change or remove them. Ask an Admin." }
}
{
"success": false,
"error": { "code": "CANNOT_ACT_ON_OWNER", "message": "The team owner's role cannot be changed and they cannot be removed from the team." }
}
The key holder's role allows this, but they have no seat in the team.
{
"success": false,
"error": { "code": "SEAT_REQUIRED", "message": "You do not have a seat in this team, so you can view but not change anything. Ask an Admin for a seat." }
}
Returned when the team does not exist, or the user is not a member of it.
{
"success": false,
"error": { "code": "NOT_FOUND", "message": "Member not found in team" }
}