full api with full test coverage