Interactive Brokers (IBKR)
Analyze global markets
- Category
- Finance
- Primary Subcategory
- Trading & Live Market Data Platforms
Integration details
Description
Connect your Interactive Brokers account to ChatGPT and manage your portfolio through natural language. Ask about positions, balances, P&L, allocations, and open orders, or request real-time quotes and historical market data. You can also prompt ChatGPT to draft trade instructions — for example, "Buy 100 shares of AAPL at a limit of $200" — which are sent to your IBKR account for your review and approval. ChatGPT never submits orders directly to the market. Any trading symbols displayed or discussed are for illustrative purposes only and are not intended to portray recommendations. Member SIPC.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Trading & Live Market Data Platforms
- Secondary Subcategories
- None listed
- Brand
- Interactive Brokers
- Access
- Account required
- First tracked
- 2026-06-04
- Tool count
- 34
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Get alerts for Interactive Brokers (IBKR)
Get updates when Interactive Brokers (IBKR)’s Discoverability Score or category rank changes.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Trading & Live Market Data Platforms
View Category34 tools agents can invoke
Creates an alert with a single condition on an instrument's price, volume, percent change, fee rate, or shortable shares — or on the caller's account margin cushion or daily P&L. Returns the new alert's id. Platform limitation: Alerts created via this tool are currently only visible and manageable in IBKR Desktop. They will not appear in IBKR Mobile, TWS, or Client Portal. Always tell the user this before creating an alert, so they aren't surprised when it doesn't show up outside Desktop. If no email is provided, the user is notified only in IBKR Desktop when the alert triggers and receives no notification otherwise (no push, no SMS, no other email). Before calling this tool without an email parameter, confirm with the user that they intend to rely on in-app-only notification, or ask if they would like to supply an email.
create_alert
Creates a new instruction. An instruction is not a live order. The returned URL deep-links to the instruction in the IBKR platforms where a user can review and submit it. After submission, the instruction is converted into a live order. Supports Stocks (STK), Futures (FUT), single-leg Options (OPT), single-leg Futures Options (FOP), and OPT–OPT option combos/spreads. Combo/spread support is limited to equity-option (OPT) legs only; FOP, FUT, STK, and mixed-type combos are not supported.
create_order_instruction
Creates a new watchlist with the given name and an initial set of instruments. Watchlist names must be non-blank. Returns the new watchlist's id and hash.
create_watchlist
Permanently deletes one or more alerts. This action is irreversible. Confirm with the user before calling. Call get_alerts first to find the ids of the alerts to delete.
delete_alert
Deletes an existing instruction by its ID.
delete_order_instruction
Permanently deletes a watchlist. This action is irreversible. Confirm with the user before calling. Call get_watchlists first to resolve the watchlist name to its id.
delete_watchlist
Updates a watchlist's name and instruments (id, name, and instruments are all required — full-replace semantics). The instruments list is full-replace: the submitted list becomes the watchlist's complete new content. To add or remove instruments: call get_watchlist first to retrieve the current name and instruments, then submit the full updated list here (get_watchlist → modify → edit_watchlist). Source the current name from get_watchlist — it is required and not returned by this call. Call get_watchlists first to resolve the watchlist name to its id.
edit_watchlist
Retrieves cash balances and market values broken down by currency. Returns one entry per currency.
get_account_balances
Retrieves the list of live orders for the user. Each order includes order ID, symbol, side, order type, status, quantity, price, and fill information.
get_account_orders
Retrieves all open positions. Each position includes quantity, price, market value, P&L, and cost basis.
get_account_positions
Retrieves account-level financial metrics: net liquidation value, equity with loan value, available funds, buying power, initial and maintenance margin, day trading status, and alike.
get_account_summary
Retrieves a snapshot of trades for the user over the requested time period. Each trade includes trade ID, symbol, side, size, price, commission, and trade time. All date boundaries are calculated in UTC.
get_account_trades
Returns the full detail of one alert: id, name, status, expiry_date, tif, email, email_note, and condition (contract_id, exchange, condition_type, operator, value). Call get_alerts first to find the id of the alert to inspect. Call this before update_alert — update_alert is a full-replace PUT, so you need the current settings to avoid clearing fields you didn't mean to change.
get_alert
Returns a summary of the user's alerts. Status is ACTIVE or PAUSED (set via set_alert_status) Deleted alerts no longer appear in results. Call get_alert for the full detail of a specific alert.
get_alerts
Creates a combo contract identifier from EQUITY OPTION (OPT) legs only. Only OPT–OPT combos are supported. Every leg must be a standard equity/index option (security type OPT) from an OPT option chain. Futures options (FOP), futures (FUT), stocks (STK), and any mixed-type combination are NOT supported and will fail when passed to create_order_instruction. Do NOT call this tool with FOP legs. If the user wants a futures-options spread, tell them multi-leg FOP combos aren't supported and offer to place each leg as a separate single-leg FOP order via create_order_instruction instead. Use this before create_order_instruction when placing a spread or multi-leg options strategy. Each leg requires a `contract_id_ex` (pass call_contract_id_ex or put_contract_id_ex from get_option_data verbatim) and a `size` (positive integer for BUY legs, negative for SELL legs). Returns a `contract_id_ex` string that identifies the combo — pass it directly to create_order_instruction as contract_id_ex. The response also includes a `description` (human-readable strategy summary) and `strategy_name` (e.g. "Bull", "Combo").
get_combo_identifier
Return a company's competitors, products, and geographic exposure (countries and regions of operation). Also includes sectors/trends but with supporting evidence explaining each connection. Use when the user asks 'who are Pepsi's competitors', 'what does Tesla sell', 'where does Shell operate', or wants a full business overview. Requires the company's contract_id — resolve with search_contracts first if you only have a name or ticker. Relationship to get_company_themes: that tool is the lightweight choice when you only need sectors/trends + ranked peers. Use get_company_connections for the broader profile (products/geography/competitors) or when you want evidence explaining WHY a connection exists. To restrict to sectors/trends only, set link_types=['COMPANY_THEME'].
get_company_connections
Given a company, return the sectors, trends, and industries it belongs to, and for each one the top peer companies ranked by relevance. Use for questions like 'what sectors is NVIDIA in?', 'what trends is Tesla part of?', or 'who are Apple's closest peers?' Requires the company's contract_id. If you only have a name or ticker, call search_contracts first to resolve it. Choose this over get_company_connections when you only need sectors/trends + ranked peers. If you need the company's products, countries, regions, broader competitor view, or evidence text explaining each link, use get_company_connections instead.
get_company_themes
Returns the option chain for one expiration: a row per strike with `strike`, `call_contract_id_ex`, `call_contract_id`, `call_description`, `put_contract_id_ex`, `put_contract_id`, and `put_description`. The `*_description` strings carry option contract details such as expiration, strike and futures options include the contract multiplier in parentheses (e.g. '(50)' for ES, '(20)' for NQ). Use these when presenting a contract to the user. The response also contains a top-level `currency` field (e.g. "USD") and a top-level `exchange` field (e.g. "SMART") for the contracts in the chain. Works for both equity options and futures options — the security type is inherited from the get_option_parameters call that produced the `expiration_id`. This tool returns contract structure only — it does NOT return prices, implied volatility, open interest, or volume. To obtain those, call get_price_snapshot using the numeric call_contract_id or put_contract_id together with the response's top-level exchange field. Before choosing a range, fetch the underlying's spot price via get_price_snapshot and center min_strike/max_strike around it. Use a range wide enough to include at least 5 strikes on each side of the spot price in a single call. Omitting all strike bounds on a liquid name can return hundreds of rows — always bound the range unless the user explicitly wants the full chain. `expiration_id` must be a value taken verbatim from expirations[].id returned by get_option_parameters — never construct it. call_contract_id_ex and put_contract_id_ex are the full contract identifiers (e.g. "832609990@SMART" for equity/index options, or "@CME" suffix for futures options). Pass these verbatim to create_order_instruction (as contract_id_ex) for single-leg OPT or FOP orders. Only OPT (equity option) ids may be passed to get_combo_identifier — FOP ids are not valid combo legs. Use the numeric call_contract_id and put_contract_id together with the top-level exchange for get_price_snapshot / get_price_history (with security_type="OPT" or "FOP"). Note: each row's `strike` is returned as a STRING (e.g. "292.5") even though min_strike/max_strike inputs are numbers — cast `strike` to a number before performing numeric comparisons or arithmetic. call_contract_id_ex/put_contract_id_ex and expiration IDs are internal identifiers used for chaining tool calls. Never display them to the user. Present results using symbol, expiry date, strike and exchange.
get_option_data
Returns available option expirations and the exchange list for an underlying. The response includes an `exchanges` array of valid option exchanges and `current_exchange` (the preferred/default exchange). Each expiration has: `id` (pass to get_option_data), `date` (YYYYMMDD), `regular` (true = standard monthly, false = weekly or daily/zero-days-to-expiration), and `trading_class` (present on every expiration row). `current_expiration` is the id of the preferred (first regular) expiration. For equity options (option_sec_type="OPT", default): call search_contracts and use the `underlying_contract_id` of the row whose symbol exactly matches the root and whose sections include OPT. For future options (option_sec_type="FOP"): call search_contracts and use the `underlying_contract_id` of the row whose symbol exactly matches the root and whose sections include FOP. Call this before get_option_data to resolve an expiration id. Duplicate-date handling: never disambiguate expirations by `date` alone — always key on `id` which is unique. A single `date` can carry multiple `trading_class` values that are DISTINCT contracts. Always prefer expiration without `trading_class` or ask user to specify one. This occurs for both equity options (e.g. 'TSLA' and '2TSLA', 'NVDA' and '2NVDA') and futures options, where a date carries a quarterly class (e.g. 'ES', 'NQ') alongside weekly classes (e.g. 'EW3', 'QN3'). Contract IDs and expiration IDs are internal identifiers used for chaining tool calls. Never display them to the user. Present results using expiry date and exchange.
get_option_parameters
Returns all saved instructions for the account. Each instruction includes an ID, description, contract identifier (contract_id_ex), trade direction (BUY/SELL), quantity, order type (MARKET/LIMIT), limit price, time in force, creation time (ISO 8601), and expiration (ISO 8601, if present).
get_order_instructions
Returns historical OHLCV (open/high/low/close/volume) price bars for an instrument over a specified time period. Use when the user asks about price trends, historical performance, or wants to compare prices across dates. Provide either period or step_count but never both. When called with an option contract_id from get_option_data, use security_type="OPT" and pass the exchange field from that row; if no exchange is available, omit it to default to SMART.
get_price_history
Retrieves a real-time market data snapshot for an instrument. Allows requesting one or more market data fields in a single call. Use this to get the current price, bid/ask spread, volume, volatility, and other live market metrics. For historical OHLCV price bars use get_price_history instead. Note on response key casing: response JSON keys use hyphens where requested field names use underscores. For example, requesting `option_midpoint_iv` returns the key `option-midpoint-iv` in the response; `bid_ask` → `bid-ask`; `option_open_interest` → `option-open-interest`. Always look up response values using the hyphenated form, not the underscore form used in market_data_names. Note: SMART routing only covers SMART-eligible instruments (US equities and equity options). For futures and futures options, pass the contract's native `exchange` (from search_futures / get_option_parameters / search_contracts) or the response will be empty.
get_price_snapshot
Return the full profile of an investment topic: its description, the companies in it ranked by relevance (rank 1 = most central — this is relevance-ranked, NOT market-cap-weighted), and optionally ETFs/mutual funds with exposure. Use after search_investment_topics when the user wants to know which companies are in a sector or trend ('which companies are in AI?', 'top battery stocks', 'what ETFs cover clean energy'). Requires a key obtained verbatim from search_investment_topics. Each returned company includes a contract_id that can be passed directly into get_company_themes or get_company_connections to go deeper. For large topics, use offset together with the returned total_count to paginate through the full company list.
get_theme_details
Returns the name, hash, and full instruments list for a specific watchlist. Returns an empty instruments array if the watchlist has no instruments. Each element of the instruments list contains: contract_id_ex (string, the instrument identifier used by create_watchlist and edit_watchlist) and contract_description (human-readable name or description of the instrument). contract_id_ex values returned here are identical in format to those accepted by create_watchlist and edit_watchlist — pass them back verbatim, no conversion needed. Call get_watchlists first to resolve the watchlist name to its id.
get_watchlist
Returns all of the user's watchlists with their id, name, and hash. Returns an empty list if the user has no watchlists. Use get_watchlist to see the instruments on a specific list.
get_watchlists
Returns the portfolio's NAV broken down along one category dimension into long and (when present) short buckets, each with a `total` and an `items` list carrying id, name, nav, and weight. `short_positions` is only present when the account holds shorts in that dimension — consumers must null-check it. Weights sum to 1.0 within each bucket independently. The long-side total denominator is category-dependent (netted of shorts for ASSET_CLASS and FINANCIAL_INSTRUMENT, gross for SECTOR/REGION/COUNTRY), so do not assume a common base across type values. Item `id` codes are opaque internal keys — display `name`, never interpret id. Related tools: get_account_positions, get_account_balances, search_contracts.
get_pa_allocation
Returns the account's performance time series for every available window (1D, 7D, MTD, 1M, YTD, 1Y). Within each period, `cps`, `nav`, and `dates` are parallel arrays of equal length indexed together. `cps` values are cumulative returns expressed as fractions measured from the period start (e.g. -0.106 = -10.6%), not percentages. The return method is reported in the top-level `portfolio_measure` field as TWR (time-weighted) or MWR (money-weighted), set by account configuration. For accounts younger than one year the 1Y series equals YTD, and inception-keyed periods may report start_nav 0.0 while the first element of the `nav` array holds the true opening value. Related tools: get_account_positions, get_account_trades, get_price_history (for benchmarking the nav series).
get_pa_performance_all_periods
Submits feature requests and customer feedback. Call this tool when (1) the user wants brokerage functionality not yet offered by IBKR tools e.g. portfolio rebalance, funding and position transfers, dividends, screeners, and alike. (2) you identify the user's sentiment towards or issues with IBKR's tools. Always show the user the exact feedback_text you intend to submit and get their confirmation before calling.
provide_customer_feedback
Search for contracts (instruments) by ticker symbol, company name, or keyword and return matching instruments with their contract identifiers (contract_id), exchanges, symbols, and available security-type sections. Returns the contract_id required by get_company_themes and get_company_connections — call this first to resolve a contract_id whenever you only have a company name or ticker. Each result row includes a sections array listing the security types available for that instrument (e.g. STK, OPT, FUT). When selecting a row for options: the primary selector is an EXACT match on the `symbol` field (e.g. for root "AAPL" select only the row where symbol == "AAPL", not "AAPU", "AAPB", etc.); having OPT in sections is necessary but NOT sufficient on its own, because many leveraged/income ETFs also carry OPT sections. When multiple rows with the exact symbol remain, prefer the primary listing using the `description` and `country_code` fields to disambiguate (e.g. the US primary listing rather than a foreign listing). Use the `underlying_contract_id` of the selected row for subsequent calls.
search_contracts
Returns the futures term structure (the full expiry ladder) for a given underlying instrument. The response is an object with a contracts array; each element has contract_id_ex, contract_id (numeric), exchange, contract_month (YYYYMM), last_trading_date (YYYYMMDD), and symbol. Use contract_id_ex verbatim for create_order_instruction only — futures contract ids are not valid get_combo_identifier legs. Each contract also includes a numeric contract_id field and a separate exchange field — pass those directly to get_price_snapshot / get_price_history. The `symbol` field is identical for every expiry rather than a per-contract code; it cannot be used to distinguish contracts and must never be displayed to the user. Identify and present an expiry using `contract_month` / `last_trading_date`. Results are NOT returned in expiry order — sort by contract_month ascending yourself; the earliest non-expired entry is the front-month contract. This earliest entry can be within days of its `last_trading_date` and about to roll; when the user wants the actively-traded contract, the next expiry may be more appropriate. To get underlying_contract_id, call search_contracts with the root symbol (optionally security_type=FUT), then take the underlying_contract_id field from the row whose symbol exactly matches the root and whose sections include FUT. Only active contracts are returned unless include_expired=true.
search_futures
Search for companies grouped by sector, industry, trend, or topic. Use when the user asks about an investment area ('who's in solar', 'AI stocks', 'clean energy companies', 'what's happening in quantum computing'). Returns matching topics as {key, name} pairs. Pass the returned key to get_theme_details for the full company list. Query tips: use short, broad, singular keywords — a single root noun ('battery', not 'batteries' or 'electric vehicle batteries'; 'robot', not 'robotics companies'). The matcher is keyword-based and narrow, so plural or multi-word queries often return nothing. If results are empty, retry with a shorter/singular form or a synonym before concluding no match exists. Never guess, construct, or modify a key — only pass keys returned by this tool.
search_investment_topics
Pauses or resumes one or more alerts without deleting them. Call get_alerts first to find the ids of the alerts to update.
set_alert_status
Replaces an existing alert's settings in full. condition_type, operator, symbol, id and value are required on every call; contract_id is required unless condition_type is MARGIN_CUSHION or DAILY_PNL; the remaining fields (tif, expiry_date, exchange, email, email_note) are optional.
update_alert
Returns recent updates, new tools, and changes to this server. Call this when the user asks what's new, what changed, or about server capabilities.
whats_new
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Interactive Brokers (IBKR) alternatives on ChatGPT?
As of 2026-09-28, Interactive Brokers (IBKR) competes with Alpaca, Alpaca Live, Alpaca Paper Trading, Bajaj Broking, Clear Street, CMC Markets, Co-Invest, Finhay, ForInvest, Fugle-Stock, Gainium, Gate Info, IG Trading: CFD Assistant, IOL invertironline, LONA Trading Assistant, Massive, Shinhan Securities Assistant, StrategyTune, TickerLayer, Twelve Data, Vantixs, Webull in ChatGPT Trading & Live Market Data Platforms, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.