basic API in place, tests passing