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

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

Built distribution (wheel)

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

Total release size: 287.6 kB

Release files / brokerage_connect-0.6.4.tar.gz

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

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

0.6.6

2 release files

0.6.5

2 release files

This release

0.6.4 This release

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