The Schwab Developer API and Interactive Brokers are the two multi-asset broker APIs a retail AI trader chooses between for options and futures, and they differ sharply on shape: Schwab is a self-serve OAuth-2.0 REST API with a documented 120 requests/minute per-endpoint limit and a 1-to-3-business-day app-review gate, while IBKR charges no API fee but runs a pacing-based model (50 messages/second from the client) through a long-lived TWS or IB Gateway process, both verified 2026-05-25. Schwab wins on REST simplicity and a clean per-minute limit; IBKR wins on unmatched multi-asset and international breadth at a zero API fee. Both clear the multi-asset bar in the Broker API Comparator.
TL;DR
| Dimension | Schwab Developer API | Interactive Brokers |
|---|---|---|
| API style | OAuth 2.0 REST | TWS API (socket) + Client Portal Web API (REST) + FIX |
| Rate model | 120 requests/minute per endpoint | 50 messages/second (client to TWS), pacing-based |
| API fee | free with brokerage account | $0 (commissions + per-exchange data fees only) |
| Onboarding | self-serve portal, 1-3 business-day review | account + gateway setup |
| Auth complexity | OAuth 2.0 three-legged | TWS session / gateway lifecycle |
| Asset breadth | equities, options, futures | broadest retail multi-asset + international |
Schwab and IBKR figures verified 2026-05-25 against each vendor's official documentation. The comparator-fit block at the foot is computed live from the shipped engine bundle.
Two rate models, two mental models
This is the defining difference. Schwab publishes a clean per-minute ceiling: 120 requests/minute per endpoint, with HTTP 429 on exceed (verified 2026-05-25). You design a per-minute budget and a 429-aware backoff, the same way you would for Alpaca or Tradier.
IBKR's TWS API is pacing-based: the client may send up to 50 messages/second to TWS, and each ticker subscription or cancellation counts as a message (verified 2026-05-25). A sustained breach does not return a tidy 429; TWS eventually closes the connection. So an IBKR client paces outbound messages under 50/second rather than counting per minute, and historical-data requests carry their own additional pacing rules on top.
For an LLM agent, Schwab's model is easier to reason about (a number per minute); IBKR's requires message-level pacing and disconnect handling.
Cost: free with an account, two different ways
Both are effectively free to use, but the cost surface differs. Schwab includes API access with a brokerage account at no separate fee; you register on the developer portal, request the Trader API - Individual product, and wait for approval (verified 2026-05-25).
IBKR charges no API subscription fee either, but real-time data is unbundled and per-exchange: $1-15/month per exchange subscription, waived once monthly commissions cross set thresholds (verified 2026-05-25). A multi-asset IBKR stack can accumulate $30-100+/month in data fees before waivers. Schwab's data comes with the account; IBKR's is à la carte unless your commission volume waives it.
Onboarding and access path
Schwab is self-serve with a review gate: create a developer account, register an app, request the Trader API - Individual product, accept terms, and submit, with approval typically taking 1 to 3 business days (verified 2026-05-25). After approval you get a client ID and secret for the OAuth flow.
IBKR has no app-review queue, but the operational setup is heavier: the classic TWS API path needs TWS or IB Gateway running as a long-lived process with periodic re-authentication and disconnect handling. The Client Portal Web API offers a more modern REST + OAuth surface without a local gateway, at the cost of its own session-keepalive complexity.
Asset coverage
Both clear options and futures, which is why both pass the multi-asset profile in the comparator below. IBKR's edge is breadth: it is the only retail broker with this depth of international and multi-asset coverage (verified 2026-05-25). If a strategy needs non-US instruments, futures across many venues, or bonds, IBKR is frequently the only retail option. For US equities, options, and US futures, Schwab covers the common ground with a far simpler REST surface.
How to choose
- US equities/options/futures with a simple REST surface: Schwab Developer API (120/min, OAuth REST, data with the account).
- International, broad multi-asset, or futures across many venues: IBKR (broadest coverage, $0 API fee).
- Want a clean per-minute rate limit to design against: Schwab.
- Cost-sensitive and high commission volume (data fees waived): IBKR.
- Avoid running a long-lived gateway process: Schwab REST, or IBKR's Client Portal Web API.
The decision reduces to "do I need IBKR's breadth and accept its pacing-and-gateway tax, or is Schwab's REST simplicity and US-multi-asset coverage enough."
Connects to
- Charles Schwab Trader API Status 2026: the Schwab spec page.
- Interactive Brokers API Pricing and Rate Limits 2026: the IBKR spec page.
- Alpaca vs Interactive Brokers API 2026: IBKR against the lighter alternative.
- Broker API Comparator: the full broker field on auth, options, futures, and free tier.
References
- Charles Schwab. "Developer Portal - Trader API - Individual product; rate limit 120 req/min per endpoint, OAuth 2.0, 1-3 business-day approval." verified 2026-05-25. https://developer.schwab.com/
- Interactive Brokers. "TWS API documentation; 50 messages/second client-to-TWS pacing, no separate API fee, per-exchange market-data subscriptions $1-15/mo with commission-threshold waivers." verified 2026-05-25. https://www.interactivebrokers.com/en/trading/ib-api.php
Verified engine output
Show the recompute-verified inputs and outputs
| require_options | true |
|---|---|
| require_futures | true |
| require_crypto | false |
| require_mcp | false |
| require_free_tier | false |
| max_auth_complexity | 5 |
| filters › require options | true |
|---|---|
| filters › require futures | true |
| filters › require crypto | false |
| filters › require mcp | false |
| filters › require free tier | false |
| filters › max auth complexity | 5 |
| results › row 1 › broker › id | schwab |
| results › row 1 › broker › name | Schwab |
| results › row 1 › broker › url | https://www.schwab.com/ |
| results › row 1 › broker › docs url | https://developer.schwab.com/ |
| results › row 1 › broker › auth | OAuth 2.0 (3-legged) |
| results › row 1 › broker › auth complexity | 4 |
| results › row 1 › broker › order types (9 items) | [...] |
| results › row 1 › broker › rate limits | 120 req/min per endpoint (published tier) |
| results › row 1 › broker › market data › row 1 | Real-time equities + options quotes |
| results › row 1 › broker › market data › row 2 | Historical bars (1m to daily) |
| results › row 1 › broker › market data › row 3 | No exchange depth via API |
| results › row 1 › broker › mcp | none |
| results › row 1 › broker › mcp note | No official or listed community MCP server |
| results › row 1 › broker › assets › stocks | true |
| results › row 1 › broker › assets › options | true |
| results › row 1 › broker › assets › futures | true |
| results › row 1 › broker › assets › crypto | false |
| results › row 1 › broker › assets › forex | true |
| results › row 1 › broker › assets › bonds | true |
| results › row 1 › broker › account minimum | 0 |
| results › row 1 › broker › commission | $0 equities, $0.65/contract options |
| results › row 1 › broker › good for | Established retail, post-TDA API migration |
| results › row 1 › broker › has free tier | true |
| results › row 1 › broker › notes › row 1 | API rebuilt after TD Ameritrade integration; still maturing |
| results › row 1 › broker › notes › row 2 | Requires individual developer registration and app review |
| results › row 1 › broker › notes › row 3 | Token refresh flow is finicky vs Alpaca/Tradier |
| results › row 1 › score | 3 |
| results › row 1 › max score | 3 |
| results › row 1 › fits | true |
| results › row 2 › broker › id | ibkr |
| results › row 2 › broker › name | Interactive Brokers |
| results › row 2 › broker › url | https://www.interactivebrokers.com/ |
| results › row 2 › broker › docs url | https://www.interactivebrokers.com/en/trading/ib-api.php |
| results › row 2 › broker › auth | OAuth + TWS/IB Gateway |
| results › row 2 › broker › auth complexity | 5 |
| results › row 2 › broker › order types (10 items) | [...] |
| results › row 2 › broker › rate limits | ~50 msg/sec per connection; 50 orders/sec burst |
| results › row 2 › broker › market data › row 1 | Global equities via subscription bundles |
| results › row 2 › broker › market data › row 2 | Level-2 depth on most exchanges |
| results › row 2 › broker › market data › row 3 | Historical depth across asset classes |
| results › row 2 › broker › mcp | community |
| results › row 2 › broker › mcp note | Community CLI MCP; audit before production |
| results › row 2 › broker › assets › stocks | true |
| results › row 2 › broker › assets › options | true |
| results › row 2 › broker › assets › futures | true |
| results › row 2 › broker › assets › crypto | true |
| results › row 2 › broker › assets › forex | true |
| results › row 2 › broker › assets › bonds | true |
| results › row 2 › broker › account minimum | 0 |
| results › row 2 › broker › commission | Tiered per-share or fixed; ~$0.0035/sh tiered |
| results › row 2 › broker › good for | Multi-asset-class, international, scale |
| results › row 2 › broker › has free tier | false |
| results › row 2 › broker › notes › row 1 | Requires TWS or IB Gateway running locally |
| results › row 2 › broker › notes › row 2 | Idempotency via client-supplied orderId |
| results › row 2 › broker › notes › row 3 | Fully headless gateway is possible but under-documented |
| results › row 2 › score | 3 |
| results › row 2 › max score | 3 |
| results › row 2 › fits | true |
| results › row 3 › broker › id | alpaca |
| results › row 3 › broker › name | Alpaca |
| results › row 3 › broker › url | https://alpaca.markets/ |
| results › row 3 › broker › docs url | https://alpaca.markets/docs/ |
| results › row 3 › broker › auth | API Key + Secret |
| results › row 3 › broker › auth complexity | 1 |
| results › row 3 › broker › order types (10 items) | [...] |
| results › row 3 › broker › rate limits | 200 req/min (free), higher on paid tiers |
| results › row 3 › broker › market data › row 1 | IEX real-time (free) |
| results › row 3 › broker › market data › row 2 | Full SIP on Algo Trader Plus ($99/mo) |
| results › row 3 › broker › market data › row 3 | Historical bars + trades + quotes |
| results › row 3 › broker › mcp | official |
| results › row 3 › broker › mcp note | Official MCP V2, 61 actions, idempotent order submission |
| results › row 3 › broker › assets › stocks | true |
| results › row 3 › broker › assets › options | true |
| results › row 3 › broker › assets › futures | false |
| results › row 3 › broker › assets › crypto | true |
| results › row 3 › broker › assets › forex | false |
| results › row 3 › broker › assets › bonds | false |
| results › row 3 › broker › account minimum | 0 |
| results › row 3 › broker › commission | $0 (PFOF on equities) |
| results › row 3 › broker › good for | Solo AI operator, paper-to-live parity |
| results › row 3 › broker › has free tier | true |
| results › row 3 › broker › notes › row 1 | Free paper trading with same API surface as live |
| results › row 3 › broker › notes › row 2 | Options require Algo Trader Plus tier |
| results › row 3 › broker › notes › row 3 | Python/Go SDKs mature; rate-limit backoff documented |
| results › row 3 › score | 2 |
| results › row 3 › max score | 3 |
| results › row 3 › fits | false |
| results › row 3 › fail reasons › row 1 | Futures |
| results › row 4 › broker › id | tradier |
| results › row 4 › broker › name | Tradier |
| results › row 4 › broker › url | https://tradier.com/ |
| results › row 4 › broker › docs url | https://developer.tradier.com/ |
| results › row 4 › broker › auth | OAuth 2.0 |
| results › row 4 › broker › auth complexity | 3 |
| results › row 4 › broker › order types (8 items) | [...] |
| results › row 4 › broker › rate limits | 120 req/min market data, 60 req/min trading |
| results › row 4 › broker › market data › row 1 | Real-time equities + options (streaming) |
| results › row 4 › broker › market data › row 2 | Historical OHLC back ~5 years |
| results › row 4 › broker › market data › row 3 | No Level-2 depth |
| results › row 4 › broker › mcp | community |
| results › row 4 › broker › mcp note | Community MCP; idempotency is a manual patch |
| results › row 4 › broker › assets › stocks | true |
| results › row 4 › broker › assets › options | true |
| results › row 4 › broker › assets › futures | false |
| results › row 4 › broker › assets › crypto | false |
| results › row 4 › broker › assets › forex | false |
| results › row 4 › broker › assets › bonds | false |
| results › row 4 › broker › account minimum | 0 |
| results › row 4 › broker › commission | $0 equities (PFOF), $0.35/contract options Pro |
| results › row 4 › broker › good for | Options-first retail, multi-leg strategies |
| results › row 4 › broker › has free tier | true |
| results › row 4 › broker › notes › row 1 | Free sandbox with delayed data |
| results › row 4 › broker › notes › row 2 | Strong options chain + multi-leg order API |
| results › row 4 › broker › notes › row 3 | US-only account eligibility |
| results › row 4 › score | 2 |
| results › row 4 › max score | 3 |
| results › row 4 › fits | false |
| results › row 4 › fail reasons › row 1 | Futures |
| results › row 5 › broker › id | robinhood |
| results › row 5 › broker › name | Robinhood |
| results › row 5 › broker › url | https://robinhood.com/ |
| results › row 5 › broker › docs url | https://docs.robinhood.com/ |
| results › row 5 › broker › auth | OAuth 2.0 (unofficial endpoints) |
| results › row 5 › broker › auth complexity | 4 |
| results › row 5 › broker › order types › row 1 | market |
| results › row 5 › broker › order types › row 2 | limit |
| results › row 5 › broker › order types › row 3 | stop |
| results › row 5 › broker › order types › row 4 | stop-limit |
| results › row 5 › broker › order types › row 5 | gtc |
| results › row 5 › broker › order types › row 6 | ioc |
| results › row 5 › broker › rate limits | Not publicly documented; low throughput |
| results › row 5 › broker › market data › row 1 | Delayed quotes in public tier |
| results › row 5 › broker › market data › row 2 | Limited historical depth |
| results › row 5 › broker › market data › row 3 | No public Level-2 |
| results › row 5 › broker › mcp | none |
| results › row 5 › broker › mcp note | No MCP; unofficial SDKs only |
| results › row 5 › broker › assets › stocks | true |
| results › row 5 › broker › assets › options | true |
| results › row 5 › broker › assets › futures | false |
| results › row 5 › broker › assets › crypto | true |
| results › row 5 › broker › assets › forex | false |
| results › row 5 › broker › assets › bonds | false |
| results › row 5 › broker › account minimum | 0 |
| results › row 5 › broker › commission | $0 (PFOF), $5/mo Gold for margin + extras |
| results › row 5 › broker › good for | Casual retail; not recommended for agents |
| results › row 5 › broker › has free tier | true |
| results › row 5 › broker › notes › row 1 | No officially supported public API in 2026 |
| results › row 5 › broker › notes › row 2 | Community SDKs break on auth changes without notice |
| results › row 5 › broker › notes › row 3 | Paper trading unavailable |
| results › row 5 › score | 2 |
| results › row 5 › max score | 3 |
| results › row 5 › fits | false |
| results › row 5 › fail reasons › row 1 | Futures |
| fitting brokers › row 1 › broker › id | schwab |
| fitting brokers › row 1 › broker › name | Schwab |
| fitting brokers › row 1 › broker › url | https://www.schwab.com/ |
| fitting brokers › row 1 › broker › docs url | https://developer.schwab.com/ |
| fitting brokers › row 1 › broker › auth | OAuth 2.0 (3-legged) |
| fitting brokers › row 1 › broker › auth complexity | 4 |
| fitting brokers › row 1 › broker › order types (9 items) | [...] |
| fitting brokers › row 1 › broker › rate limits | 120 req/min per endpoint (published tier) |
| fitting brokers › row 1 › broker › market data › row 1 | Real-time equities + options quotes |
| fitting brokers › row 1 › broker › market data › row 2 | Historical bars (1m to daily) |
| fitting brokers › row 1 › broker › market data › row 3 | No exchange depth via API |
| fitting brokers › row 1 › broker › mcp | none |
| fitting brokers › row 1 › broker › mcp note | No official or listed community MCP server |
| fitting brokers › row 1 › broker › assets › stocks | true |
| fitting brokers › row 1 › broker › assets › options | true |
| fitting brokers › row 1 › broker › assets › futures | true |
| fitting brokers › row 1 › broker › assets › crypto | false |
| fitting brokers › row 1 › broker › assets › forex | true |
| fitting brokers › row 1 › broker › assets › bonds | true |
| fitting brokers › row 1 › broker › account minimum | 0 |
| fitting brokers › row 1 › broker › commission | $0 equities, $0.65/contract options |
| fitting brokers › row 1 › broker › good for | Established retail, post-TDA API migration |
| fitting brokers › row 1 › broker › has free tier | true |
| fitting brokers › row 1 › broker › notes › row 1 | API rebuilt after TD Ameritrade integration; still maturing |
| fitting brokers › row 1 › broker › notes › row 2 | Requires individual developer registration and app review |
| fitting brokers › row 1 › broker › notes › row 3 | Token refresh flow is finicky vs Alpaca/Tradier |
| fitting brokers › row 1 › score | 3 |
| fitting brokers › row 1 › max score | 3 |
| fitting brokers › row 1 › fits | true |
| fitting brokers › row 2 › broker › id | ibkr |
| fitting brokers › row 2 › broker › name | Interactive Brokers |
| fitting brokers › row 2 › broker › url | https://www.interactivebrokers.com/ |
| fitting brokers › row 2 › broker › docs url | https://www.interactivebrokers.com/en/trading/ib-api.php |
| fitting brokers › row 2 › broker › auth | OAuth + TWS/IB Gateway |
| fitting brokers › row 2 › broker › auth complexity | 5 |
| fitting brokers › row 2 › broker › order types (10 items) | [...] |
| fitting brokers › row 2 › broker › rate limits | ~50 msg/sec per connection; 50 orders/sec burst |
| fitting brokers › row 2 › broker › market data › row 1 | Global equities via subscription bundles |
| fitting brokers › row 2 › broker › market data › row 2 | Level-2 depth on most exchanges |
| fitting brokers › row 2 › broker › market data › row 3 | Historical depth across asset classes |
| fitting brokers › row 2 › broker › mcp | community |
| fitting brokers › row 2 › broker › mcp note | Community CLI MCP; audit before production |
| fitting brokers › row 2 › broker › assets › stocks | true |
| fitting brokers › row 2 › broker › assets › options | true |
| fitting brokers › row 2 › broker › assets › futures | true |
| fitting brokers › row 2 › broker › assets › crypto | true |
| fitting brokers › row 2 › broker › assets › forex | true |
| fitting brokers › row 2 › broker › assets › bonds | true |
| fitting brokers › row 2 › broker › account minimum | 0 |
| fitting brokers › row 2 › broker › commission | Tiered per-share or fixed; ~$0.0035/sh tiered |
| fitting brokers › row 2 › broker › good for | Multi-asset-class, international, scale |
| fitting brokers › row 2 › broker › has free tier | false |
| fitting brokers › row 2 › broker › notes › row 1 | Requires TWS or IB Gateway running locally |
| fitting brokers › row 2 › broker › notes › row 2 | Idempotency via client-supplied orderId |
| fitting brokers › row 2 › broker › notes › row 3 | Fully headless gateway is possible but under-documented |
| fitting brokers › row 2 › score | 3 |
| fitting brokers › row 2 › max score | 3 |
| fitting brokers › row 2 › fits | true |
Computed live at build time.
Frequently asked questions
- Schwab Developer API vs IBKR: which has the simpler rate model?
- Schwab. It publishes a clean 120 requests/minute per-endpoint limit with HTTP 429 on exceed. IBKR uses a pacing-based model (50 messages/second from client to TWS) where a sustained breach drops the connection rather than returning 429 (verified 2026-05-25).
- Is the Schwab or IBKR API free?
- Both charge no API subscription fee. Schwab includes API access with a brokerage account; IBKR charges only commissions plus per-exchange market-data subscriptions ($1-15/month each, waived above commission thresholds) (verified 2026-05-25).
- Which has broader asset coverage, Schwab or IBKR?
- IBKR. It is the only retail broker with this depth of international and multi-asset coverage. Schwab covers US equities, options, and futures with a simpler REST surface (verified 2026-05-25).
- How long does Schwab API approval take?
- Typically 1 to 3 business days after you register an app and request the Trader API - Individual product on the Schwab Developer Portal (verified 2026-05-25).