So I think this is a solid pass, and now would be a good time to make it more robust in terms of error handling if they pass in crap. (With docstring comments on what exceptions we can throw.) Any Exceptions we define should be defined in api.py as well.