What to use instead of the TD Ameritrade API
The TD Ameritrade API stopped with the last Schwab conversion in May 2024. What replaces its orders, its account data and its free quotes, piece by piece.
Last updated
TD Ameritrade API
Shut downTD Ameritrade's free REST and WebSocket API for its own brokerage clients — orders, balances and positions, plus quotes, price history and option chains on the same key.
Stopped serving on .
6 replacements from the catalogue
Ordered by how little work the switch takes, least first. Paid placement does not affect this order, and no card on this list is sponsored.
- 1
Massive
If the API was only ever your quote source. Delayed US stocks with unlimited calls from 29 dollars, and no brokerage account in the way.
$29/moFree tierMCP
- 2
ThetaData
For the option chains half. OPRA quotes from 40 dollars a month and greeks from 80, which the old chains endpoint handed out for nothing.
$30/moFree tierMCP
- 3
Lumibot
Keeps the account at Schwab and the code in Python. A Schwab broker class ships in the free library, so the strategy, not the plumbing, is what you port.
$24.50/moFree tierOpen source
- 4
QuantConnect
Schwab is one of the brokers its hosted LEAN engine trades live, if the script was a strategy you would rather run on someone else's server.
$84/moFree tierOpen sourceMCP
- 5
SnapTrade
For apps that read other people's accounts. Schwab holdings are read-only, and trading there needs a Schwab commercial key you obtain yourself.
$100/moFree tierMCP
- 6
ib_async
The way out of Schwab altogether. A full broker API — orders, positions, history, chains and streams — at Interactive Brokers, through TWS or IB Gateway.
FreeFree tierOpen source
The product
The TD Ameritrade API was the developer side of a retail broker, and it was free. One OAuth app
gave a script the account — balances, positions, transactions, order entry, saved orders,
watchlists — and the market: quotes, price history, option chains and movers over REST at
api.tdameritrade.com/v1, plus a WebSocket streamer for level-one quotes, order books and news
headlines. Archived documentation from 2022 describes refresh tokens valid for 90 days, access
tokens valid for 30 minutes and non-order requests from personal applications throttled to 120 a
minute.
The part that made it a default far beyond TD Ameritrade's own clients was that the quote, price history and option chain endpoints took a bare API key: "Pass your OAuth User ID to make an unauthenticated request for delayed data." A key and a GET request returned a full delayed option chain, which very few paid providers would sell at hobbyist prices, and a generation of tutorials, Discord bots and spreadsheets was built on it.
Then the parent went. Charles Schwab completed its acquisition of TD Ameritrade on 6 October 2020, according to Schwab's 2023 annual report. The developer portal stopped taking new registrations between December 2022 and January 2023 — an archived copy from 4 January 2023 reads "New user registration for the TD Ameritrade API has been disabled in preparation for the Charles Schwab integration." Client accounts moved across in five transition groups, the first in February 2023, and the integration guide was explicit about what that meant for code: "Once an account is moved to Charles Schwab brokerage, such account will no longer be able to authenticate into the TD Ameritrade API." Schwab reported completing the final conversion on the weekend of 11–12 May 2024, in its monthly activity report of 14 May. The date on this page is the end of that weekend; the maintainer of the tda-api client library, writing the next day, dates it to 10 May.
What to use instead
Start by admitting the direct answer has no card here: if your account went to Schwab, the nearest thing is Schwab's own Trader API, at Schwab's developer portal. Its June 2023 integration update promised quotes, price history, account and transaction data, equity, option and ETF orders and a WebSocket streamer, with the same 120-a-minute ceiling on non-order requests. It is a new registration rather than a migration — TD Ameritrade's guide said no legacy app would be carried over — and an individual developer gets one app, tied to their own Schwab account. This catalogue does not carry it as a card for the reason it does not carry thinkorswim: a broker's API is paid for with the brokerage relationship, not sold at a price.
The list above is ordered for everyone else, by how little has to change, and it splits on what your code actually did.
If it only ever read market data, the account was incidental and you do not need a broker at all. Massive is the closest to the old shape for stocks — REST plus WebSocket, 15-minute delayed with unlimited calls on the 29-dollar Starter plan — with options sold as a separate subscription. ThetaData is the option-chain answer: real-time OPRA at one-minute granularity from 40 dollars, with greeks and IV from the 80-dollar Standard tier, served through a Java terminal you run locally.
If it placed orders on an account that is now at Schwab, the shortest path that is a card is a
framework that already speaks Schwab's API. Lumibot is a free Python library
whose lumibot.brokers ships a Schwab class alongside Alpaca, Interactive Brokers and Tradier;
QuantConnect runs the LEAN engine in its cloud and lists Charles Schwab
among its live brokers; live trading needs a Researcher seat ($10 a month) plus a live node (from $24), which the $84 Researcher pack bundles, and the free tier has none.
Both still need your own Schwab developer app underneath. What they replace is the client code
you would otherwise be rewriting by hand.
If it served other people's accounts, you were building a product, and TD Ameritrade's personal-use app was never the licence for that. SnapTrade is the aggregation API built for it: one API over the 40 brokerage integrations it listed in September 2026, of which Schwab is read-only unless you bring a Schwab commercial API key you obtained yourself.
If you are leaving Schwab, ib_async is the Python client for Interactive Brokers' TWS API and the most complete broker API in the catalogue — orders, positions, history, chains and streams on one connection — at the cost of a new account and a TWS or IB Gateway process that has to be running and logged in.
What you give up
Free option chains on a bare key. This is the real loss, and nothing on this page restores it. The old chains endpoint answered with an API key and no login. Every replacement either charges for OPRA — ThetaData from 40 dollars, Massive's options plans on top of its stocks plan — or, in Schwab's case, requires a funded account and an approved app before the first request.
A token that lasted a season. TD Ameritrade's refresh token was documented as valid for 90 days, so an unattended job could run for months between logins. The schwab-py client library's documentation says Schwab's refresh tokens are rejected after seven days, which turns the same job into one that needs a browser login every week. That figure is from the library's documentation rather than from Schwab's published OAuth guide, which gives no lifetime; check it against your own app before building around it.
One key for both halves. Account and market data came through one app and one rate limit. Splitting them — a data vendor for quotes, a broker or a framework for orders — means two bills, two symbol conventions and two clocks to reconcile, which is the same cost IEX Cloud's users paid for the same reason.
Migration notes
Nothing ports by changing a base URL. Schwab's Trader API is a different service with different authentication, and TD Ameritrade's guide listed saved orders, watchlists and futures, futures options and forex order entry as not carrying over. Schwab's June 2023 update added encrypted account numbers, which is the first thing a port of account code trips on. Treat the old client as a specification, not a starting point.
Expect a wait before the first request. Schwab's guides describe developer accounts and product requests going into a pending review, and schwab-py's migration notes say approval can take several days. Register before the old code's last day matters, not after.
Check what "delayed" means before comparing numbers. The old unauthenticated quotes were delayed; most of the replacements above are 15 minutes delayed on their cheap plans and real-time only on dearer ones, and OPRA real-time is a line item of its own. A script that compared a quote to a fill price needs to know which of the two it is now reading.
tda-api code is archived, not dead weight. Its maintainer kept the repository for reference and pointed users at schwab-py, written by the same author for Schwab's API. Of everything on this page, that is the port with the most familiar shape — and it is a client library for the Schwab API, not a card here, for the same reason the API itself is not.
The whole category
This page is a shortlist. Everything in Backtesting Frameworks & Algo Trading Libraries is filled in against the same schema, with the fields to narrow it yourself.
FAQ
When did the TD Ameritrade API stop working?
Account by account. TD Ameritrade's own integration guide said an account moved to Charles Schwab could no longer authenticate to the API, and that the legacy endpoints would stay up until every transition group had converted. Schwab completed the final conversion on the weekend of 11 and 12 May 2024. The maintainer of the tda-api client library dates the turn-off to 10 May.
Can I still register a TD Ameritrade developer app?
No, and you have not been able to since the turn of 2023. An archived copy of the developer portal from 4 January 2023 reads that new user registration had been disabled in preparation for the Charles Schwab integration, and by May 2024 creating, modifying or deleting an application had been disabled too.
Did my TD Ameritrade app carry over to Schwab?
No. TD Ameritrade's integration guide said no legacy application would be migrated and that a Schwab brokerage account would be required. Schwab's Trader API is a new registration, a new app approval and a new client, and saved orders, watchlists and futures, futures options and forex order entry were named as not carrying over.
What is the direct replacement?
Schwab's own Trader API, if your account went to Schwab with everyone else's. It has no card in this catalogue for the same reason thinkorswim does not — its price is the brokerage relationship — and the cards on this page are for the parts of the job you might want to buy separately, or for leaving Schwab.
Is there a free API for quotes and option chains now?
Not in the shape TD Ameritrade had, where an API key alone returned delayed quotes, price history and full chains. Massive's free tier is end-of-day at five requests a minute, ThetaData's free tier is end-of-day stocks and options a day late, and Schwab's Trader API serves market data to its own account holders.