Add public facing API

Please review. I will work on a PR for tests and docs next so we can get this rolling :8ball: