GitHunt
AL

alexgolec/tda-api

A TD Ameritrade API client for Python. Includes historical data for equities and ETFs, options chains, streaming order book data, complex order construction, and more.

TDAmeritrade is now defunct

On May 10th, 2024, Charles Schwab officially turned down the TDAmeritrade
service and migrated its last batch of customers to Charles Schwab. With this
change, tda-api and the API that backed it stopped working.

Fortunately, a new API is available, and it's quite similar to tda-api.
We've been hard at work on schwab-py, a replacement for tda-api. Here is
the documentation, complete with getting started and migration guides <https://schwab-py.readthedocs.io/en/latest/>. If you have any
questions, please ask them on our Discord server <https://discord.gg/BEr6y6Xqyv>

The old tda-api project is now defunct, and this repo is provided for
archival purposes only.

tda-api: A TD Ameritrade API Wrapper

.. image:: https://img.shields.io/discord/720378361880248621.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2
:target: https://discord.gg/BEr6y6Xqyv

.. image:: https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dalexgolec%26type%3Dpatrons&style=flat
:target: https://patreon.com/TDAAPI

.. image:: https://readthedocs.org/projects/tda-api/badge/?version=latest
:target: https://tda-api.readthedocs.io/en/latest/?badge=latest

.. image:: https://github.com/alexgolec/tda-api/workflows/tests/badge.svg
:target: https://github.com/alexgolec/tda-api/actions?query=workflow%3Atests

.. image:: https://badge.fury.io/py/tda-api.svg
:target: https://badge.fury.io/py/tda-api

.. image:: http://codecov.io/github/alexgolec/tda-api/coverage.svg?branch=master
:target: http://codecov.io/github/alexgolec/tda-api?branch=master

What is tda-api?

tda-api is an unofficial wrapper around the TD Ameritrade APIs <https://developer.tdameritrade.com/apis>__. It strives to be as thin and
unopinionated as possible, offering an elegant programmatic interface over each
endpoint. Notable functionality includes:

  • Login and authentication
  • Quotes, fundamentals, and historical pricing data
  • Options chains
  • Streaming quotes and order book depth data
  • Trades and trade management
  • Account info and preferences

How do I use tda-api?

For a full description of tda-api's functionality, check out the
documentation <https://tda-api.readthedocs.io/en/latest/>__. Meawhile, here's
a quick getting started guide:

Before you do anything, create an account and an application on the
TD Ameritrade developer website <https://developer.tdameritrade.com/>__.
You'll receive an API key, also known as a Client Id, which you can pass to this
wrapper. You'll also want to take note of your callback URI, as the login flow
requires it.

Next, install tda-api:

.. code-block:: python

pip install tda-api

You're good to go! To demonstrate, here's how you can authenticate and fetch
daily historical price data for the past twenty years:

.. code-block:: python

from tda import auth, client
import json

token_path = '/path/to/token.json'
api_key = 'YOUR_API_KEY@AMER.OAUTHAP'
redirect_uri = 'https://your.redirecturi.com'
try:
c = auth.client_from_token_file(token_path, api_key)
except FileNotFoundError:
from selenium import webdriver
with webdriver.Chrome() as driver:
c = auth.client_from_login_flow(
driver, api_key, redirect_uri, token_path)

r = c.get_price_history('AAPL',
period_type=client.Client.PriceHistory.PeriodType.YEAR,
period=client.Client.PriceHistory.Period.TWENTY_YEARS,
frequency_type=client.Client.PriceHistory.FrequencyType.DAILY,
frequency=client.Client.PriceHistory.Frequency.DAILY)
assert r.status_code == 200, r.raise_for_status()
print(json.dumps(r.json(), indent=4))

Why should I use tda-api?

tda-api was designed to provide a few important pieces of functionality:

  1. Safe Authentication: TD Ameritrade's API supports OAuth authentication,
    but too many people online end up rolling their own implementation of the
    OAuth callback flow. This is both unnecessarily complex and dangerous.
    tda-api handles token fetch and refreshing for you.

  2. Minimal API Wrapping: Unlike some other API wrappers, which build in lots
    of logic and validation, tda-api takes raw values and returns raw
    responses, allowing you to interpret the complex API responses as you see
    fit. Anything you can do with raw HTTP requests you can do with tda-api,
    only more easily.

Why should I not use tda-api?

As excellent as TD Ameritrade's API is, there are a few popular features it does
not offer:

  • Unfortunately, the TD Ameritrade API does not seem to expose any endpoints
    around the papermoney <https://tickertape.tdameritrade.com/tools/papermoney -stock-market-simulator-16834>__ simulated trading product. tda-api can
    only be used to perform real trades using a TD Ameritrade account. Note:
    trades made through the API appear in thinkorswim and vice versa.
  • The API only supports trading in equities, mutual funds, ETFs, and options
    (both simple contracts and complex composite positions). Futures and futures
    options trading is not supported. Some data is provided for futures, but not
    for futures options.
  • Historical options pricing data is not available.

What else?

We have a Discord server <https://discord.gg/BEr6y6Xqyv>__! You can join to
get help using tda-api or just to chat with interesting people.

Bug reports, suggestions, and patches are always welcome! Submit issues
here <https://github.com/alexgolec/tda-api/issues>__ and pull requests
here <https://github.com/alexgolec/tda-api/pulls>__.

tda-api is released under the
MIT license <https://github.com/alexgolec/tda-api/blob/master/LICENSE>__.

Disclaimer: tda-api is an unofficial API wrapper. It is in no way
endorsed by or affiliated with TD Ameritrade or any associated organization.
Make sure to read and understand the terms of service of the underlying API
before using this package. This authors accept no responsibility for any
damage that might stem from use of this package. See the LICENSE file for
more details.

alexgolec/tda-api | GitHunt