The Charles Schwab Trader API is live for individual developers in 2026: you register on developer.schwab.com, create an app for the Trader API (Individual), and wait for Schwab's manual approval, which the widely used schwab-py library documents as taking "up to a few days"1. Order throttling is set per app at registration: an "Order Limit" of order-related requests per minute, which schwab-py recommends setting to the maximum of 1201. Access tokens last 30 minutes and refresh tokens 7 days, so an unattended bot has to re-run the login flow weekly2. The TD Ameritrade API that preceded it stopped working in May 20243. Compare Schwab with other brokers in the Broker API Comparator.
A sourcing note: Schwab's developer portal renders client-side and did not return readable content to automated checks on 2026-10-11, so the operational details here come from the schwab-py documentation, which describes the registration form and token behaviour field by field. Confirm limits in your own app dashboard before relying on them.
Is the Schwab Trader API available to individuals?
Yes. The path is: create a developer account with your Schwab credentials, create an application, choose the API product, set the order limit and callback URL, and submit1. schwab-py notes that a new app shows "Approved - Pending" at first, which does not mean usable; the app is ready only when its status reads "Ready For Use", and that can take up to a few days1. You then receive an app key and secret for the OAuth flow.
What is the Schwab Trader API rate limit?
The documented control is the per-app Order Limit: "the number of order-related requests your app will be permitted to place each minute. If you make, cancel, or replace more than this many orders each minute, you'll be throttled and your orders will be rejected", with 120 recommended as the setting for most users1. This is an order throttle configured at registration, not a flat per-endpoint request limit, so read the effective value from your app settings and back off on throttling errors.
How long do Schwab API tokens last?
| Token | Lifetime | Consequence |
|---|---|---|
| Access token | 30 minutes | Refreshed automatically by client libraries |
| Refresh token | 7 days | Re-run the browser login flow weekly |
Source: schwab-py authentication docs, read 2026-10-112. Requests for a new access token with a refresh token older than seven days are rejected with an invalid_client error2. schwab-py suggests cycling the token before the market opens each week so it does not expire mid-session3.
What happened to the TD Ameritrade API?
It is gone. schwab-py's transition guide states that as of May 13, 2024 the API behind the old tda-api library "is no longer working", and that all former users must move to the Schwab API3. Code pointed at TD Ameritrade endpoints must be rebuilt on the Schwab Trader API, with its new app approval and seven-day token rule.
Is there a thinkorswim API?
No separate one. thinkorswim continues as a Schwab platform and thinkScript runs inside it for studies and alerts, but programmatic order placement goes through the Schwab Trader API.
Where does Schwab fit?
- Existing Schwab account holders: the natural choice for programmatic access to an account you already hold.
- Starting fresh: the app review and weekly re-login make Alpaca or IBKR faster to stand up.
- Former TD Ameritrade developers: migrate; the old API no longer works.
- Cost: stock and ETF trades are $0 online and options carry $0.65 per contract on Schwab's pricing page (read 2026-10-11)4.
Connects to
- Schwab API vs Alpaca 2026: incumbent depth versus developer simplicity.
- Choosing a Broker API in 2026: the five-broker pillar.
- Broker API Comparator: auth complexity and limits side by side.
References
Footnotes
-
schwab-py. "Getting Started" (developer account, app creation, API product, Order Limit field and the recommended 120, approval "can take up to a few days", Ready For Use status). Read 2026-10-11. https://schwab-py.readthedocs.io/en/latest/getting-started.html ↩ ↩2 ↩3 ↩4 ↩5
-
schwab-py. "Authentication and Client Creation" (access tokens valid for thirty minutes; refresh tokens older than seven days rejected). Read 2026-10-11. https://schwab-py.readthedocs.io/en/latest/auth.html ↩ ↩2 ↩3
-
schwab-py. "Transitioning from TDAmeritrade and tda-api" (old API no longer working as of May 13, 2024; seven-day tokens; weekly token cycling). Read 2026-10-11. https://schwab-py.readthedocs.io/en/latest/tda-transition.html ↩ ↩2 ↩3
-
Charles Schwab. "Pricing" ($0 online equity commissions; $0.65 per options contract). Read 2026-10-11. https://www.schwab.com/pricing ↩
Verified engine output
Show the recompute-verified inputs and outputs
| require_futures | 1 |
|---|---|
| require_options | 1 |
| 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 | ibkr |
| results › row 1 › broker › name | Interactive Brokers |
| results › row 1 › broker › url | https://www.interactivebrokers.com/ |
| results › row 1 › broker › docs url | https://www.interactivebrokers.com/en/trading/ib-api.php |
| results › row 1 › broker › auth | OAuth + TWS/IB Gateway |
| results › row 1 › broker › auth complexity | 5 |
| results › row 1 › broker › order types (10 items) | [...] |
| results › row 1 › broker › rate limits | Market-data lines / 2 requests per second (50 on the default 100 lines); small-bar history 60 requests per 10 min |
| results › row 1 › broker › market data › row 1 | Global equities via subscription bundles |
| results › row 1 › broker › market data › row 2 | Level-2 depth on most exchanges |
| results › row 1 › broker › market data › row 3 | Historical depth across asset classes |
| results › row 1 › broker › mcp | official |
| results › row 1 › broker › mcp note | Official IBKR Connector: remote MCP at api.ibkr.com, IBKR sign-in, one account; drafts trade instructions that you submit as orders yourself |
| 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 | true |
| 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 | Tiered per-share or fixed; ~$0.0035/sh tiered |
| results › row 1 › broker › good for | Multi-asset-class, international, scale |
| results › row 1 › broker › has free tier | false |
| results › row 1 › broker › notes › row 1 | Requires TWS or IB Gateway running locally |
| results › row 1 › broker › notes › row 2 | Idempotency via client-supplied orderId |
| results › row 1 › broker › notes › row 3 | Fully headless gateway is possible but under-documented |
| results › row 1 › score | 3 |
| results › row 1 › max score | 3 |
| results › row 1 › fits | true |
| results › row 2 › broker › id | alpaca |
| results › row 2 › broker › name | Alpaca |
| results › row 2 › broker › url | https://alpaca.markets/ |
| results › row 2 › broker › docs url | https://alpaca.markets/docs/ |
| results › row 2 › broker › auth | API Key + Secret |
| results › row 2 › broker › auth complexity | 1 |
| results › row 2 › broker › order types (10 items) | [...] |
| results › row 2 › broker › rate limits | Trading API 200 req/min; market data 200/min free, 10,000/min on Algo Trader Plus |
| results › row 2 › broker › market data › row 1 | IEX real-time (free) |
| results › row 2 › broker › market data › row 2 | Full SIP on Algo Trader Plus ($99/mo) |
| results › row 2 › broker › market data › row 3 | Historical bars + trades + quotes |
| results › row 2 › broker › mcp | official |
| results › row 2 › broker › mcp note | Official open-source MCP server (V2 rewrite on FastMCP/OpenAPI); data, paper and live trading |
| results › row 2 › broker › assets › stocks | true |
| results › row 2 › broker › assets › options | true |
| results › row 2 › broker › assets › futures | false |
| results › row 2 › broker › assets › crypto | true |
| results › row 2 › broker › assets › forex | false |
| results › row 2 › broker › assets › bonds | false |
| results › row 2 › broker › account minimum | 0 |
| results › row 2 › broker › commission | $0 (PFOF on equities) |
| results › row 2 › broker › good for | Solo AI operator, paper-to-live parity |
| results › row 2 › broker › has free tier | true |
| results › row 2 › broker › notes › row 1 | Free paper trading with same API surface as live |
| results › row 2 › broker › notes › row 2 | Real-time OPRA options data needs Algo Trader Plus; Basic gets the indicative feed |
| results › row 2 › broker › notes › row 3 | Python/Go SDKs mature; rate-limit backoff documented |
| results › row 2 › score | 2 |
| results › row 2 › max score | 3 |
| results › row 2 › fits | false |
| results › row 2 › fail reasons › row 1 | Futures |
| results › row 3 › broker › id | tradier |
| results › row 3 › broker › name | Tradier |
| results › row 3 › broker › url | https://tradier.com/ |
| results › row 3 › broker › docs url | https://developer.tradier.com/ |
| results › row 3 › broker › auth | OAuth 2.0 |
| results › row 3 › broker › auth complexity | 3 |
| results › row 3 › broker › order types (8 items) | [...] |
| results › row 3 › broker › rate limits | 120 req/min standard and market data, 60 req/min trading (production) |
| results › row 3 › broker › market data › row 1 | Real-time equities + options (streaming) |
| results › row 3 › broker › market data › row 2 | Historical OHLC back ~5 years |
| results › row 3 › broker › market data › row 3 | No Level-2 depth |
| results › row 3 › broker › mcp | official |
| results › row 3 › broker › mcp note | Official hosted MCP server (Streamable HTTP, personal API token); market data, accounts and order placement |
| 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 | false |
| 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 equities (PFOF), $0.35/contract options Pro |
| results › row 3 › broker › good for | Options-first retail, multi-leg strategies |
| results › row 3 › broker › has free tier | true |
| results › row 3 › broker › notes › row 1 | Free sandbox with delayed data |
| results › row 3 › broker › notes › row 2 | Strong options chain + multi-leg order API |
| results › row 3 › broker › notes › row 3 | US-only account eligibility |
| 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 | robinhood |
| results › row 4 › broker › name | Robinhood |
| results › row 4 › broker › url | https://robinhood.com/ |
| results › row 4 › broker › docs url | https://docs.robinhood.com/ |
| results › row 4 › broker › auth | API key (Crypto Trading API); Robinhood sign-in (Trading MCP) |
| results › row 4 › broker › auth complexity | 3 |
| results › row 4 › broker › order types › row 1 | market |
| results › row 4 › broker › order types › row 2 | limit |
| results › row 4 › broker › order types › row 3 | stop |
| results › row 4 › broker › order types › row 4 | stop-limit |
| results › row 4 › broker › rate limits | Not publicly documented |
| results › row 4 › broker › market data › row 1 | Delayed quotes in public tier |
| results › row 4 › broker › market data › row 2 | Limited historical depth |
| results › row 4 › broker › market data › row 3 | No public Level-2 |
| results › row 4 › broker › mcp | official |
| results › row 4 › broker › mcp note | Official Robinhood Trading MCP (Agentic Trading): long equities, options and crypto, only in a dedicated agentic account; no multi-leg options |
| 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 | true |
| 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 (PFOF), $5/mo Gold for margin + extras |
| results › row 4 › broker › good for | Agent-driven trading from an existing Robinhood account; no REST API for stocks or options |
| results › row 4 › broker › has free tier | true |
| results › row 4 › broker › notes › row 1 | Official REST API covers crypto only; stocks and options are reachable only through the Trading MCP |
| results › row 4 › broker › notes › row 2 | Trade approvals are off by default for external MCP agents |
| results › row 4 › broker › notes › row 3 | Paper trading unavailable |
| 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 | schwab |
| results › row 5 › broker › name | Schwab |
| results › row 5 › broker › url | https://www.schwab.com/ |
| results › row 5 › broker › docs url | https://developer.schwab.com/ |
| results › row 5 › broker › auth | OAuth 2.0 (3-legged) |
| results › row 5 › broker › auth complexity | 4 |
| results › row 5 › broker › order types (9 items) | [...] |
| results › row 5 › broker › rate limits | 120 req/min for non-order calls per app; order writes 0-120/min per account, set at app registration |
| results › row 5 › broker › market data › row 1 | Real-time equities + options quotes |
| results › row 5 › broker › market data › row 2 | Historical bars (1m to daily) |
| results › row 5 › broker › market data › row 3 | No exchange depth via API |
| results › row 5 › broker › mcp | community |
| results › row 5 › broker › mcp note | No official MCP; community servers wrap the Trader API (self-hosted, re-authorize when the 7-day refresh token expires) |
| 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 | false |
| 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 equities, $0.65/contract options |
| results › row 5 › broker › good for | Established retail, post-TDA API migration |
| results › row 5 › broker › has free tier | true |
| results › row 5 › broker › notes › row 1 | API rebuilt after TD Ameritrade integration; still maturing |
| results › row 5 › broker › notes › row 2 | Orders cover stocks, ETFs and options; futures and forex trade on thinkorswim, not through the API |
| results › row 5 › broker › notes › row 3 | Requires individual developer registration and app review |
| results › row 5 › broker › notes › row 4 | Token refresh flow is finicky vs Alpaca/Tradier |
| 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 | ibkr |
| fitting brokers › row 1 › broker › name | Interactive Brokers |
| fitting brokers › row 1 › broker › url | https://www.interactivebrokers.com/ |
| fitting brokers › row 1 › broker › docs url | https://www.interactivebrokers.com/en/trading/ib-api.php |
| fitting brokers › row 1 › broker › auth | OAuth + TWS/IB Gateway |
| fitting brokers › row 1 › broker › auth complexity | 5 |
| fitting brokers › row 1 › broker › order types (10 items) | [...] |
| fitting brokers › row 1 › broker › rate limits | Market-data lines / 2 requests per second (50 on the default 100 lines); small-bar history 60 requests per 10 min |
| fitting brokers › row 1 › broker › market data › row 1 | Global equities via subscription bundles |
| fitting brokers › row 1 › broker › market data › row 2 | Level-2 depth on most exchanges |
| fitting brokers › row 1 › broker › market data › row 3 | Historical depth across asset classes |
| fitting brokers › row 1 › broker › mcp | official |
| fitting brokers › row 1 › broker › mcp note | Official IBKR Connector: remote MCP at api.ibkr.com, IBKR sign-in, one account; drafts trade instructions that you submit as orders yourself |
| 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 | true |
| 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 | Tiered per-share or fixed; ~$0.0035/sh tiered |
| fitting brokers › row 1 › broker › good for | Multi-asset-class, international, scale |
| fitting brokers › row 1 › broker › has free tier | false |
| fitting brokers › row 1 › broker › notes › row 1 | Requires TWS or IB Gateway running locally |
| fitting brokers › row 1 › broker › notes › row 2 | Idempotency via client-supplied orderId |
| fitting brokers › row 1 › broker › notes › row 3 | Fully headless gateway is possible but under-documented |
| fitting brokers › row 1 › score | 3 |
| fitting brokers › row 1 › max score | 3 |
| fitting brokers › row 1 › fits | true |
Computed live at build time.
Frequently asked questions
- Is the Schwab Trader API available to individual developers in 2026?
- Yes. You create an app on developer.schwab.com for the Trader API and wait for manual approval, which the schwab-py documentation says can take up to a few days. The app is usable once its status reads Ready For Use.
- What is the Schwab Trader API rate limit?
- Order throttling is configured per app as an Order Limit: the number of order-related requests (place, cancel, replace) allowed per minute. schwab-py recommends setting it to 120. Exceeding it throttles and rejects orders.
- How long do Schwab API tokens last?
- Access tokens last 30 minutes and are refreshed automatically by client libraries. Refresh tokens last 7 days; after that the browser login flow must be repeated, so unattended bots need a weekly re-login.
- Does the TD Ameritrade API still work?
- No. schwab-py's transition guide states that as of May 13, 2024 the API behind tda-api no longer works; integrations must be rebuilt on the Schwab Trader API.