First attempt at an API. This may change in the future, it is a first
rough outline for what I think might work.