0.0
Low commit activity in last 3 years
This is a gem for connecting to the OAuth/JSON-based Schwab API. See
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

>= 0
>= 3.2

Runtime

>= 2.0
>= 0.20
>= 0
 Project Readme

Schwab API (formerly TD Ameritrade API) gem for Ruby

This is a gem for connecting to the OAuth/JSON-based Schwab API released in 2018. Go to https://beta-developer.schwab.com/ to create your OAuth application login and view the official documentation.

For a gem that allows you to connect to the older version of the TDAmeritrade API, go to https://github.com/wakproductions/tdameritrade_api

Installation

In your Gemfile

gem 'schwab-api-ruby', git: 'https://github.com/wakproductions/schwab-api-ruby.git'

Authenticating

Currently this gem is designed for local app authorization of the "Trader API - Individual". It is based on the assumption that you will be using https://127.0.0.1 as the OAuth redirect_uri, as that is the only value that's been tested and verified to work

Basic Usage

client = SchwabAPI::Client.new(
  client_id: <client_id>, 
  redirect_uri: 'https://127.0.0.1', 
  refresh_token: '<refresh_token>'
)

client.get_instrument_fundamentals('MSFT')
#=> {"MSFT"=>
      {"fundamental"=>
        {"symbol"=>"MSFT",
         "high52"=>425.24,
         "low52"=>340.33,
         ...

Current State of Functionality

The official API is documented here. This gem currently implements the following functionality. If you would like to expand its functionality, then please submit a pull request.

  • Authentication
  • Accounts and Trading
  • Instruments
  • Price History
  • Real-time Quotes

The following functions correspond to the Schwab Individual Trader API specification found in the online docs:

  • get_accounts(fields=nil)
  • get_account_numbers
  • get_instrument(symbol, projection)
  • get_instrument_by_cusip(cusip)
  • get_price_history(symbol, **options)
  • get_quotes(symbols, **options)
  • get_transactions(...)

Example usage

client = Schwab::Client.new(
  client_id: ENV.fetch('SCHWAB_CLIENT_ID'),
  secret: ENV.fetch('SCHWAB_SECRET'),
  redirect_uri: ENV.fetch('SCHWAB_REDIRECT_URI'),
  access_token: '<access token you received after running the OAuth authentication step>',
  refresh_token: '<access token you received after running the OAuth authentication step>',
  access_token_expires_at:,
  refresh_token_expires_at:
)

symbols = %w[SCHW HOOD MS]
result = client.get_quotes(symbols, fields: :quote)
#=> {"SCHW" =>
# {"assetMainType" => "EQUITY",
#  "assetSubType" => "COE",
#  "quoteType" => "NBBO",
#  "realtime" => true,
#  "ssid" => 1516105793,
#  "symbol" => "SCHW",
#  "quote" =>
#    {"52WeekHigh" => 93.35,
#     "52WeekLow" => 61.01,
#     "askMICId" => "ARCX",
#     "askPrice" => 92.0,
#     "askSize" => 1,
#     "askTime" => 1752276764663,
#     "bidMICId" => "ARCX",
#     "bidPrice" => 91.5,
#     "bidSize" => 1,
#     "bidTime" => 1752278152374,
#     "closePrice" => 93.04,
#     "highPrice" => 92.99,
#     "lastMICId" => "ARCX",
#     "lastPrice" => 91.8,
#     "lastSize" => 5,
#     "lowPrice" => 91.825,
#     "mark" => 91.97,
#     "markChange" => -1.07,
#     "markPercentChange" => -1.15004299,
#     "netChange" => -1.24,
#     "netPercentChange" => -1.3327601,
#     "openPrice" => 92.53,
#     "postMarketChange" => -0.17,
#     "postMarketPercentChange" => -0.18484288,
#     "quoteTime" => 1752278152374,
#     "securityStatus" => "Normal",
#     "totalVolume" => 6815842,
#     "tradeTime" => 1752277607998}}}

Contributions

If you would like to make a contribution, please submit a pull request to the original branch. Feel free to email me Winston Kotzan at wak@wakproductions.com with any feature requests, bug reports, or feedback.

Wish List

  • Test Coverage in RSpec

Support

Please open an issue on Github if you have any problems or questions.

Release Notes

See CHANGELOG.md