separate group api from core implementation