There is a bug in the token refresh logic that results in permanent silent failure. This makes the entire ebapi library pointless to use because authorization tokens require frequent refreshes.
Calling the refresh() method on a FileTokens instances (used by ApiConnection) results in a NameError, but is masked by a try/except block that ignores any instance of Exception that it catches.
Comment added in code snippet below (copied from tokens.py here) identifies where the bug is located:
# snip
try:
self.user.loc[idx] = refresh_token(ref) # <-- refresh_token() is not defined (NameError)
except Exception:
pass # <-- bug is completely silenced
# snip