Finalise module API
The Python API is currently public and documented in code, but still requires a fair amount of familiarity with the module to use effectively.
The scope of the API should be limited to the minimum required for the intended endpoints, with clear separation between implementation details and stable interfaces. Our ability to make sections of the code private is limited by the plugin needing to access them, but these exceptions should be made obvious to the user.