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.7

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.7
File Size Uploaded
brokerage_connect-0.6.7.tar.gz 129.0 kB Details

Built distribution (wheel)

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

Total release size: 287.7 kB

Release files / brokerage_connect-0.6.7.tar.gz

Download URL brokerage_connect-0.6.7.tar.gz
Size 129.0 kB
Tags Source
SHA-256 checksum
How to use checksums
9aa1c1f73406b5d8fb9d3e027de51e5932eb7f7cb7bbbde406090c55c1fc0d6a
BLAKE2b-256 checksum
How to use checksums
4a4bb008ed9c42f1f67af8c4bafb8c3926a693387bb54235ffc6dcb7ed6ea58f
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.7-py3-none-any.whl

Download URL brokerage_connect-0.6.7-py3-none-any.whl
Size 158.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e839221afecf31fbe2d1a460a2af35f6ef8e0fe0cfdcbb18cac02435e1192773
BLAKE2b-256 checksum
How to use checksums
a7f729b5bc67b14e9a54f1c8b1847268ad995e2852812831163dd8dc7917dc19
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

This release

0.6.7 This release

2 release files

0.6.6

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