We should provide a "high level" client class to which the user passes API information (URL, etc.) and credentials. This client should automatically handle authenticating and refreshing the token before it expires.
This is important and needed for long living processes which use the client (e.g. StackStorm hubot adapter).
In addition to that, we should still provide "low level" client and authenticate method in case user just wants to authenticate and retrieve an auth token.
We currently do that in the CLI, but in the future when we are refactoring the Python client, we will implement this there as well.