# 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.

*https://stockmarketstack.com/alternatives/td-ameritrade-api*

## The subject

| Field | Value |
| --- | --- |
| Product | TD Ameritrade API |
| Status | retired |
| Stopped serving | 2024-05-12 |
| Website | https://developer.tdameritrade.com |
| Category | Backtesting Frameworks & Algo Trading Libraries |

TD 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.

## Replacements

*Ordered by how little work the switch takes, least first. Paid placement does not affect this order.*

1. [Massive](https://stockmarketstack.com/tools/massive.md) — 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.
2. [ThetaData](https://stockmarketstack.com/tools/thetadata.md) — 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.
3. [Lumibot](https://stockmarketstack.com/tools/lumibot.md) — 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.
4. [QuantConnect](https://stockmarketstack.com/tools/quantconnect.md) — 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.
5. [SnapTrade](https://stockmarketstack.com/tools/snaptrade.md) — For apps that read other people's accounts. Schwab holdings are read-only, and trading there needs a Schwab commercial key you obtain yourself.
6. [ib_async](https://stockmarketstack.com/tools/ib-async.md) — The way out of Schwab altogether. A full broker API — orders, positions, history, chains and streams — at Interactive Brokers, through TWS or IB Gateway.

## 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](https://stockmarketstack.com/tools/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](https://stockmarketstack.com/tools/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](https://stockmarketstack.com/tools/lumibot) is a free Python library
whose `lumibot.brokers` ships a Schwab class alongside Alpaca, Interactive Brokers and Tradier;
[QuantConnect](https://stockmarketstack.com/tools/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](https://stockmarketstack.com/tools/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](https://stockmarketstack.com/tools/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.

## 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.
