Спасибо за подсказку — я попробовал её использовать — я обновил primary_group_name, primary_group_id и даже запись в массиве groups для него [‘primary_group’] = true — при вызове update_user я получаю 200, используя gem, но пока безрезультатно. Завтра я изучу это подробнее, чтобы понять, что именно идёт не так. Пока ничего очевидного я не заметил.
Вот код, который я запустил, и сервер вернул код 200:
client = DiscourseApi::Client.new("https://myforumurl.example.com")
client.api_key = 'an api key with global permissions for testing this'
client.api_username = 'my admin username -- I think this doesnt matter though'
user = client.user('joepowell')
user['primary_group_name'] = 'dojo'
user['primary_group_id'] = 42
# это группа 42 в массиве groups
user['groups'][2]['primary_group'] = true
client.update_user('joepowell', user)