Expand description

SDK for interacting with the TD Ameritrade API.

Developer Documentation

Important: Before starting, you will need to make sure you have a developer application created (thus a client ID), and a valid refresh token. If you need help with either of these steps, you should refer to the following API Guide Pages:

Create a Client and Fetch a New Token

After creating a Client, you will need to give it an access token. You can either use an existing one from your database or filesystem, or fetch a new one from the API.

let mut client = Client::new("CLIENT_ID", "REFRESH_TOKEN", None);

let access_token = client.get_access_token().unwrap();

// We must convert the token response into a token usable by the client.
client.set_access_token(&Some(access_token.into()));

Create a Client and Use an Old Token

use tda_sdk::{AccessToken, Client};

let access_token = AccessToken {
    expires_at: 0,
    token: "YOUR_TOKEN_STRING".to_string(),
    scope: Vec::new(),
};

let client = Client::new("CLIENT_ID", "REFRESH_TOKEN", Some(access_token));

Full Example for Fetching All Accounts

After a token has been set, you may call any of the API methods. You can view all request parameters in the params module.

use tda_sdk::{
    Client,
    params::GetAccountsParams,
    responses::SecuritiesAccount,
};

let mut client = Client::new("CLIENT_ID", "REFRESH_TOKEN", None);

let access_token = client.get_access_token().unwrap();
client.set_access_token(&Some(access_token.into()));

let accounts = client.get_accounts(GetAccountsParams::default()).unwrap();

for account in accounts {
    match account.securities_account {
        SecuritiesAccount::MarginAccount { r#type, account_id, .. } => {
            println!("Account ID: {}", account_id);
            println!("Account Type: {}", r#type);
        }
    }
}

Token Structure and Expiration

This library does not handle token expirations, that is up to the user. However, the AccessToken struct has a handy method for detecting its expiration status.

Note: The get_access_token() response has a different structure than the token expected by the client. You will need to parse the response.

let access_token: AccessToken = client.get_access_token().unwrap().into();

if access_token.has_expired() {
    panic!("Token has expired!");
}

Modules

Structs and utilities for building API request parameters.

Structs and utilities for handling API response data.

Structs

API access token.

Client for interacting with the TDA API.

Enums

Represents all possible errors the Client might encounter.

Constants

Base path for the TDA API.