Skip to main content

brokerage-connect

Status: CURRENT / ACTIVE REFERENCE Last reviewed: 2026-09-15 Role: Package entrypoint for brokerage-connect (install, supported integrations, BrokerAdapter sketch).

Unified Python interface for brokerage APIs. One abstract adapter, multiple brokers.

Supported Integrations

Integration Extra Status
Schwab pip install brokerage-connect[schwab] Token-based auth via schwab-py (BrokerAdapter)
SnapTrade pip install brokerage-connect[snaptrade] OAuth connection flow (BrokerAdapter)
IBKR pip install brokerage-connect[ibkr] Trade adapter and IBKR client modules (BrokerAdapter)
Plaid pip install brokerage-connect[plaid] Investments + account data APIs via plaid-python (not a BrokerAdapter trade implementation)

Install

pip install brokerage-connect

# With broker-specific dependencies:
pip install brokerage-connect[schwab]
pip install brokerage-connect[schwab,plaid]
pip install brokerage-connect[schwab,ibkr]
pip install brokerage-connect[plaid]

Quick Start

from brokerage import BrokerAdapter

# Every trade broker adapter implements the same interface (sketch; see brokerage/broker_adapter.py):
class MyBroker(BrokerAdapter):
    provider_name = "my_broker"

    def owns_account(self, account_id: str) -> bool: ...
    def list_accounts(self): ...
    def search_symbol(self, account_id, ticker, currency: str): ...
    def preview_order(
        self, account_id, ticker, side, quantity, order_type, time_in_force,
        currency: str, limit_price=None, stop_price=None, symbol_id=None,
    ): ...
    def place_order(self, account_id, order_params): ...
    def get_orders(self, account_id, state="all", days=30): ...
    def cancel_order(self, account_id, order_id): ...
    def get_account_balance(self, account_id): ...
    def refresh_after_trade(self, account_id): ...
    # Full ABC also requires: fetch_market_snapshot, get_live_positions,
    # query_open_orders, query_completed_orders, preview_roll/place_roll,
    # preview_multileg_option/place_multileg_option

Architecture

  • BrokerAdapter — abstract base class defining the trade interface
  • trade_objects — shared dataclasses (OrderResult, OrderPreview, OrderStatus, etc.)
  • schwab/, snaptrade/, ibkr/, plaid/ — broker/provider integrations
  • futures/ — futures contract specs, notionals, pricing helpers, and source adapters
  • config.py — broker configuration and credential loading via environment variables

Application integration

The wheel has no dependency on a Risk checkout. Install a provider extra before using that provider's SDK; importing the Flex parser and connection helpers does not initialize an SDK or load a checkout .env.

  • IBKRClient(authorized_accounts=...) accepts the application's account policy; absent an explicit value, it uses IBKR_AUTHORIZED_ACCOUNTS from the process environment.
  • SnapTrade connection creation accepts frontend_base_url=... (default: process FRONTEND_BASE_URL, then http://localhost:3000). A SnapTradeBrokerAdapter(..., trade_limiter=...) requires a callable that serializes/paces submissions by account. Without coordination, trading raises TradeRateLimitUnavailable; it does not submit an unpaced order.
  • brokerage.futures.load_contract_specs() reads the bundled catalog. Applications own database-backed reference-data policy. IBKR futures metadata helpers accept spec_loader=....
  • FMPFuturesPriceSource accepts fetch_monthly_close, infer_currency, and normalize_minor_currency_price callables. Pass a source to get_default_pricing_chain(fmp_source=...) or configure an application factory with configure_futures_pricing(factory=...). Unconfigured standalone pricing has no FMP source and uses IBKR.
  • At process bootstrap, applications may call brokerage._shared.budget_guard.configure_budget(guard=..., cost_per_call=...). The standalone default executes the operation directly and carries no billing rates; it does not discover a host budget service.
  • brokerage.ibkr.flex.configure_flex(ticker_alias_resolver=..., futures_spec_loader=...) binds application normalization policy before parsing. Without configuration, Flex keeps native equity symbols and reads bundled futures roots. normalize_flex_trades also accepts a per-call ticker_alias_resolver.
  • brokerage.config.CACHE_ROOT accepts an application-owned Path. Explicit IBKR_CACHE_DIR / IBKR_TIMESERIES_CACHE_DIR environment values take precedence; without application configuration, IBKR uses the user's .cache/ibkr-mcp tree.

Risk supplies these dependencies once from its own brokerage/__init__.py composition point. Its database, distributed trade limiter, logging, and FMP pricing policies remain application code and are not bundled into this wheel.

License

PolyForm-Noncommercial-1.0.0

Metadata

Release files for brokerage-connect 0.6.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for brokerage-connect 0.6.6
File Size Uploaded
brokerage_connect-0.6.6.tar.gz 129.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for brokerage-connect 0.6.6
File Interpreter ABI Platform
brokerage_connect-0.6.6-py3-none-any.whl Python 3 none any Details

Total release size: 287.7 kB

Release files / brokerage_connect-0.6.6.tar.gz

Download URL brokerage_connect-0.6.6.tar.gz
Size 129.0 kB
Tags Source
SHA-256 checksum
How to use checksums
82ff7a39d64775aa28914de840aa5c97564803fc20f70e38134e12d49700c591
BLAKE2b-256 checksum
How to use checksums
90a1128f4d6339514dbce38c977826d32f756c286c92c5dda4faca962a0b13c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.2

Release files / brokerage_connect-0.6.6-py3-none-any.whl

Download URL brokerage_connect-0.6.6-py3-none-any.whl
Size 158.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f1ed9936b7e4cac35d8402fd00a4e7d56e716b9f5712376af89bd34577c6611a
BLAKE2b-256 checksum
How to use checksums
7e2d4ed62fcf06abee62c0493aea03fa3ebcdf455b34e5be3dfd3d3e1bc17c07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.2

Release history Release notifications | RSS feed

0.6.7

2 release files

This release

0.6.6 This release

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page