first pass on separating the external api from the internal generated one