first pass at full api