Initial pass at api design