На самом деле, вы были абсолютно правы. Официальный API делает именно такой вызов и парсит ответ следующим образом:
curl https://meta.discourse.org/voice/rooms.json -s | jq '.rooms[] | {name: .name, transport: .expected_transport}'
Это позволяет получить транспортный уровень для комнат, доступных всем.
voice_public_access — это несуществующая настройка. О чём вы говорите?
Конечно, для того чтобы получить только те комнаты, к которым у текущего пользователя есть доступ, при вызове API rooms.json необходимо использовать аутентификацию.