IBKR Trading
Interactive Brokers (IBKR) trading automation via Client Portal API. Use when setting up IBKR account access, authenticating sessions, checking portfolio/positions, or building trading bots. Handles I
Interactive Brokers (IBKR) trading automation via Client Portal API. Use when setting up IBKR account access, authenticating sessions, checking portfolio/positions, or building trading bots. Handles I
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Automate trading with Interactive Brokers using the Client Portal Gateway API.
This skill enables:
# Java (for Client Portal Gateway) sudo apt-get install -y openjdk-17-jre-headlessChrome + ChromeDriver (for IBeam)
sudo apt-get install -y chromium-browser chromium-chromedriver
Virtual display (headless auth)
sudo apt-get install -y xvfb
Python venv
python3 -m venv ~/trading/venv source ~/trading/venv/bin/activate pip install ibeam requests
cd ~/trading wget https://download2.interactivebrokers.com/portal/clientportal.gw.zip unzip clientportal.gw.zip -d clientportal
Create
~/trading/.env:
IBEAM_ACCOUNT=your_username IBEAM_PASSWORD='your_password' IBEAM_GATEWAY_DIR=/path/to/trading/clientportal IBEAM_CHROME_DRIVER_PATH=/usr/bin/chromedriver IBEAM_TWO_FA_SELECT_TARGET="IB Key"
# 1. Start Client Portal Gateway cd ~/trading/clientportal && bash bin/run.sh root/conf.yaml &2. Wait for startup (~20 sec)
sleep 20
3. Run IBeam authentication
cd ~/trading source venv/bin/activate source .env export DISPLAY=:99 Xvfb :99 -screen 0 1024x768x24 & python -m ibeam --authenticate
Important: User must approve IBKR Key notification on phone within ~2 minutes!
curl -sk https://localhost:5000/v1/api/iserver/auth/status
Authenticated response includes
"authenticated": true.
# List accounts curl -sk https://localhost:5000/v1/api/portfolio/accountsAccount summary
curl -sk "https://localhost:5000/v1/api/portfolio/{accountId}/summary"
# Current positions curl -sk "https://localhost:5000/v1/api/portfolio/{accountId}/positions/0"
# Search for symbol curl -sk "https://localhost:5000/v1/api/iserver/secdef/search?symbol=AAPL"Get quote (after searching)
curl -sk "https://localhost:5000/v1/api/iserver/marketdata/snapshot?conids=265598&fields=31,84,86"
curl -sk -X POST "https://localhost:5000/v1/api/iserver/account/{accountId}/orders" \ -H "Content-Type: application/json" \ -d '{ "orders": [{ "conid": 265598, "orderType": "MKT", "side": "BUY", "quantity": 1, "tif": "DAY" }] }'
Sessions expire after ~24 hours. Options:
/v1/api/tickle every 5 minimport requests import urllib3 urllib3.disable_warnings()def keepalive(): try: r = requests.post("https://localhost:5000/v1/api/tickle", verify=False, timeout=10) status = requests.get("https://localhost:5000/v1/api/iserver/auth/status", verify=False, timeout=10) return status.json().get("authenticated", False) except: return False
| Issue | Solution |
|---|---|
| Gateway not responding | Check if Java process is running: |
| Login timeout | User didn't approve IBKR Key in time - retry auth |
| Connection refused | Gateway not started - run |
| Chrome errors | Ensure Xvfb is running: and |
See
references/api-endpoints.md for complete API documentation.
See scripts/ for ready-to-use automation scripts.No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.