class Webull::Account

Account defines a user account object for the Webull API

Public Class Methods

new(params = {}) click to toggle source
# File lib/webull/account.rb, line 7
def initialize(params = {})
  @tokens = params[:tokens] || raise('API tokens not provided')
  @udid = params[:udid] || raise('Device ID (udid) not provided')
end

Public Instance Methods

account_id() click to toggle source
# File lib/webull/account.rb, line 22
def account_id
  return @account_id if @account_id
  resp = HTTParty.get(
    'https://tradeapi.webullbroker.com/api/trade/account/getSecAccountList/v4',
    headers: headers
  )
  raise("Account ID request failed: #{resp.code}") unless resp.success?
  raise("Account ID error received: #{resp['msg']}") unless resp['success']
  @account_id = resp['data'].first['secAccountId']
end
orders(params = {}) click to toggle source
# File lib/webull/account.rb, line 33
def orders(params = {})
  HTTParty.get(
    'https://tradeapi.webullbroker.com/api/trade/v2/option/list',
    query: { secAccountId: account_id }.merge(params),
    headers: headers
  )
end
refresh() click to toggle source
# File lib/webull/account.rb, line 12
def refresh
  resp = HTTParty.post(
    'https://userapi.webull.com/api/passport/refreshToken',
    query: { refreshToken: @tokens.refresh },
    headers: headers
  )
  raise("Refresh request failed: #{resp.code}") unless resp.success?
  @tokens = Tokens.from_resp(resp)
end

Private Instance Methods

headers() click to toggle source
# File lib/webull/account.rb, line 43
def headers
  {
    'did' => @udid,
    'access_token' => @tokens.access,
    'Accept' => '*/*',
    'Accept-Encoding' => 'gzip, deflate',
    'Content-Type' => 'application/json'
  }
end