There is no standalone thinkorswim API in 2026. All programmatic automation on Schwab/thinkorswim routes through the Schwab Trader API, the OAuth-2.0 REST API Schwab built after absorbing TD Ameritrade. thinkScript remains an in-platform scripting language for studies and alerts inside the thinkorswim app; it cannot place orders from an external program. If you want an agent to trade a Schwab account, you register a Schwab Trader API app, not a thinkorswim one. Compare the broker field with the Broker API Comparator.
TL;DR
- No thinkorswim API. The legacy TD Ameritrade API was retired during the Schwab migration; thinkorswim itself never had a separate public order-placement API for external programs in 2026.
- Schwab Trader API is the path. OAuth 2.0, REST + streaming, covers equities, options, and (per the official product) multi-asset trading. Order-placement throttle is configurable from 0 to 120 requests/minute per account (verified 2026-05-25, archived official Schwab Trader API documentation).
- thinkScript is not an API. It runs studies, scans, and alerts inside thinkorswim; it does not expose programmatic order placement to outside code.
- No paper trading via the developer API. The Schwab developer API supports live trading only.
thinkScript vs a real API
The confusion is understandable: thinkorswim is the trading platform many retail traders know, and thinkScript is its scripting language. But thinkScript is a charting and alerting language. It computes custom studies, runs scans, and fires alerts inside the thinkorswim desktop/mobile app. It does not let an external Python or Node program authenticate, read account state, and submit orders. For that you need a real REST API with OAuth, and on Schwab that is exactly one thing: the Schwab Trader API.
So the practical distinction:
| Capability | thinkScript | Schwab Trader API |
|---|---|---|
| Custom indicators/studies in-app | Yes | No (data only) |
| Scans + alerts in thinkorswim | Yes | No |
| External program reads account/positions | No | Yes |
| External program places orders | No | Yes |
| OAuth-authenticated REST access | No | Yes |
What an automated trader actually uses on Schwab in 2026
The real answer to "thinkorswim API for automated trading" is: register for the Schwab Trader API — Individual product on the Schwab Developer Portal, complete OAuth 2.0 setup, and call the REST endpoints. Verified facts from the official (archived) Schwab Trader API documentation, checked 2026-05-25:
- The product line is "Trader API - Individual Accounts and Trading," available to individual (retail) developers, not only institutions.
- Authentication is OAuth 2.0 with access tokens and a refresh-token lifecycle.
- Order endpoints (PUT/POST/DELETE) are throttled per account; the documentation states the order throttle "can be set from zero (0) to 120 requests per minute per account" based on the application's registered properties.
- Environments are Sandbox (test data) and Production (live). The developer API does not offer simulated/paper order execution; it is live trading.
The individual-developer approval is a manual app-review step on the developer portal; community reports put the turnaround at roughly 1 to 3 business days, though Schwab does not publish a guaranteed SLA, so treat the timeline as community-reported, not official.
Status of the legacy TD Ameritrade thinkorswim endpoints
The TD Ameritrade developer API was sunset as part of the Schwab integration, and legacy TDA API keys no longer work. Any tutorial or library still pointing at TD Ameritrade endpoints is dead; the functional successor is the Schwab Trader API, which ported the core quote/order/account capabilities into Schwab's own OAuth-2.0 system.
The comparator's view
For a Schwab-style profile, the Broker API Comparator scenario below requires options and futures coverage with an auth-complexity ceiling of 4 (Schwab's OAuth 2.0 three-legged flow scores 4). Schwab is the only broker in the catalogue that fits, scoring 3/3: it clears options, futures, and the auth ceiling where Interactive Brokers fails the auth gate and Alpaca/Tradier/Robinhood fail futures. The verified output block at the foot of the page is computed live from the shipped engine bundle. (The comparator does not encode the thinkScript-vs-API distinction, which is why this page exists alongside it.)
Decision guidance
- You want an agent to trade your Schwab account: register the Schwab Trader API — Individual product. There is no thinkorswim-specific alternative.
- You want custom in-app studies/alerts: use thinkScript inside thinkorswim; it is not for external automation.
- You need paper trading before live: the Schwab developer API is live-only; paper-test against a different broker (Alpaca's paper environment mirrors its live API) or risk small live capital.
- You are porting old TD Ameritrade code: rewrite against the Schwab Trader API; the TDA endpoints are gone.
Related in this series
- Charles Schwab Trader API Status 2026: the approval/status deep-dive.
- Choosing a Broker API 2026: the five-broker decision framework.
- Robinhood API: Official or Unofficial 2026: the other "does an API exist?" question.
- Broker APIs Compared 2026: the AI-agent lens across brokers.
Connects to
- Broker API Comparator: the engine behind this page's comparison.
- Finance MCP Directory: MCP-server availability per broker.
- Backtest to Paper to Live Playbook: how the live-only constraint affects deployment.
References
- Charles Schwab. "Trader API - Individual Accounts and Trading, Production Specifications." developer.schwab.com (official documentation, archived copy verified 2026-05-25): order throttle 0-120 req/min per account, OAuth 2.0, Sandbox/Production environments.
- Charles Schwab Developer Portal. "Trader API — Individual." developer.schwab.com/products/trader-api--individual, accessed 2026-05-25.
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 | 4 |
| 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 | 4 |
| 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 | 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 | 200 req/min (free), higher on paid tiers |
| 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 MCP V2, 61 actions, idempotent order submission |
| 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 | Options require Algo Trader Plus tier |
| 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 market data, 60 req/min trading |
| 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 | community |
| results › row 3 › broker › mcp note | Community MCP; idempotency is a manual patch |
| 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 | OAuth 2.0 (unofficial endpoints) |
| results › row 4 › broker › auth complexity | 4 |
| 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 › order types › row 5 | gtc |
| results › row 4 › broker › order types › row 6 | ioc |
| results › row 4 › broker › rate limits | Not publicly documented; low throughput |
| 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 | none |
| results › row 4 › broker › mcp note | No MCP; unofficial SDKs only |
| 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 | Casual retail; not recommended for agents |
| results › row 4 › broker › has free tier | true |
| results › row 4 › broker › notes › row 1 | No officially supported public API in 2026 |
| results › row 4 › broker › notes › row 2 | Community SDKs break on auth changes without notice |
| 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 | ibkr |
| results › row 5 › broker › name | Interactive Brokers |
| results › row 5 › broker › url | https://www.interactivebrokers.com/ |
| results › row 5 › broker › docs url | https://www.interactivebrokers.com/en/trading/ib-api.php |
| results › row 5 › broker › auth | OAuth + TWS/IB Gateway |
| results › row 5 › broker › auth complexity | 5 |
| results › row 5 › broker › order types (10 items) | [...] |
| results › row 5 › broker › rate limits | ~50 msg/sec per connection; 50 orders/sec burst |
| results › row 5 › broker › market data › row 1 | Global equities via subscription bundles |
| results › row 5 › broker › market data › row 2 | Level-2 depth on most exchanges |
| results › row 5 › broker › market data › row 3 | Historical depth across asset classes |
| results › row 5 › broker › mcp | community |
| results › row 5 › broker › mcp note | Community CLI MCP; audit before production |
| results › row 5 › broker › assets › stocks | true |
| results › row 5 › broker › assets › options | true |
| results › row 5 › broker › assets › futures | true |
| results › row 5 › broker › assets › crypto | true |
| results › row 5 › broker › assets › forex | true |
| results › row 5 › broker › assets › bonds | true |
| results › row 5 › broker › account minimum | 0 |
| results › row 5 › broker › commission | Tiered per-share or fixed; ~$0.0035/sh tiered |
| results › row 5 › broker › good for | Multi-asset-class, international, scale |
| results › row 5 › broker › has free tier | false |
| results › row 5 › broker › notes › row 1 | Requires TWS or IB Gateway running locally |
| results › row 5 › broker › notes › row 2 | Idempotency via client-supplied orderId |
| results › row 5 › broker › notes › row 3 | Fully headless gateway is possible but under-documented |
| results › row 5 › score | 2 |
| results › row 5 › max score | 3 |
| results › row 5 › fits | false |
| results › row 5 › fail reasons › row 1 | Auth ≤ 4 |
| 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 |
Computed live at build time.
Frequently asked questions
- Is there a thinkorswim API for automated trading in 2026?
- No standalone one. All external automation on Schwab/thinkorswim goes through the Schwab Trader API (OAuth 2.0 REST). thinkScript is an in-app scripting language and cannot place orders from outside programs (verified 2026-05-25).
- Can thinkScript place trades automatically?
- No. thinkScript builds studies, scans, and alerts inside thinkorswim. Programmatic order placement requires the Schwab Trader API.
- What is the Schwab Trader API rate limit?
- Order endpoints are throttled per account; the official documentation states the order throttle can be set from 0 to 120 requests per minute per account.
- Does the Schwab developer API support paper trading?
- No. The developer API supports live trading only; there is a Sandbox environment for test data but not simulated order execution.