implement plan api
don't expose methods that don't need to be public
moved types that have a distinct gateway to separate files
link to package docs