Interactive Brokers OAuth
Project description
IBKR Authentication Workflow
Interactive Brokers provides an extensive API that can be used for trading and account management.
It's also possible to authenticate for the API via OAuth.
ibauth is a Python client for handling the full Interactive Brokers (IBKR) Web API authentication flow.
It wraps the OAuth2 + session lifecycle steps (access_token, bearer_token, ssodh_init, tickle, etc.) into a simple, reusable interface.
🔑 Features:
- Obtain and refresh IBKR OAuth2 tokens.
- Manage brokerage sessions (
ssodh_init,validate_sso,tickle,logout). - YAML-based configuration (easy to keep credentials outside of code).
- Logging of requests and responses for troubleshooting.
Documentation for the IBKR Web API can be found in the official reference.
Requirements
- Python 3.11+
- A valid IBKR account with Web API access enabled.
- An RSA private key (
.pem) registered with IBKR.
Installation
You can install either from PyPI (preferred) or GitHub (which may give access to updates not yet published on PyPI).
# Install from PyPI.
uv add ibauth
pip install ibauth
# Install from GitHub.
uv add "git+https://github.com/datawookie/ibkr-oauth-flow"
pip install "git+https://github.com/datawookie/ibkr-oauth-flow"
Getting Started
The package implements authentication via the IBAuth class. There are two
approaches to instantiating this class:
- directly via the constructor or
- using the
auth_from_yaml()factory function.
Authenticator Objects
Instantiate a IBAuth object (illustrative values for constructor parameters):
from ibauth import IBAuth
auth = IBAuth(
client_id = "Authenticator-Client",
client_key_id = "main",
credential = "DiV7hxH5yXAN5x",
private_key_file: "/path/to/ibkr-private-key.pem",
)
where
client_id— client ID;client_key_id— key identifier associated with your private key;credential— credential string; andprivate_key_file— path to your RSA private key (.pem).
There are a couple of other optional arguments:
domain— the API domain (defaults toapi.ibkr.combut supports numbered subdomains like1.api.ibkr.com,5.api.ibkr.com, …; andtimeout— timeout (seconds) applied to all network requests.
Configuration File
A more flexible approach is to create a YAML configuration file rather than baking those values into your code. The file might look something like this:
client_id: "Authenticator-Client"
client_key_id: "main"
credential: "DiV7hxH5yXAN5x"
private_key_file: "/path/to/ibkr-private-key.pem"
domain: "api.ibkr.com"
Then use the factory function:
from ibauth import auth_from_yaml
auth = auth_from_yaml("config.yaml")
Methods
Use the following public methods:
connect()— run the authentication flow to connect to the API; andtickle()— keep the API connection alive.
Attributes
These are some useful attributes:
bearer_token— the bearer token acquired during the authentication flow;header— the authentication header (as a dictionary);authenticated— are we authenticated?;connected— are we connected?; andcompeting— is there a competing connection?
The authenticated, connected and competing attributes are set and updated by running the tickle() method.
Development
Clone the repo and install dependencies into a virtual environment:
git clone https://github.com/datawookie/ibkr-oauth-flow.git
cd ibkr-oauth-flow
uv sync
You can test the authentication workflow:
# Use config.yaml in current directory.
uv run ibauth
# Use config.yaml in home directory and include debugging output.
uv run ibauth --config ~/config.yaml --debug
Test Suite
This project uses pytest. To run the test suite:
uv run pytest
To include coverage:
uv run pytest --cov=.
Deploy to PyPI
This requires UV_PUBLISH_TOKEN to be set to a PyPi token in environment.
make deploy
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ibauth-0.1.2.tar.gz.
File metadata
- Download URL: ibauth-0.1.2.tar.gz
- Upload date:
- Size: 15.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c95c6c4d467083565ead5ef30ec4069714f7d7162e10f73e7fb03b104bbed651
|
|
| MD5 |
e39e187cf1f1909762073a7226fa1ed8
|
|
| BLAKE2b-256 |
e61c958d72d2b880b774a1ae7a32e350e7541f56e8530afec835b0b9c8784b42
|
File details
Details for the file ibauth-0.1.2-py3-none-any.whl.
File metadata
- Download URL: ibauth-0.1.2-py3-none-any.whl
- Upload date:
- Size: 11.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c942c018ac45b2bfb7c24ac4f418c17e5183cc563ae41d0c6a41a9c65bb8221
|
|
| MD5 |
e9101590141785e5fe71e3042b88cdb0
|
|
| BLAKE2b-256 |
c1804f240da68c3b0210d55be9e990791da4fe90d9274e022d737eb00de66b1e
|