FTX::API

This gem is a ruby SDK for the FTX crypto exchange REST API.

API docs can be found on the FTX developer site

Installation

Add this line to your application's Gemfile:

gem 'ftx-api'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install ftx-api

Usage

Markets (public)

Initialize a markets session:

markets = FXT::API::Markets.new

Query for all current prices:

markets.list

Fetch a single market price:

markets.get('BTC/USD')

Check for market depth:

markets.orderbook('BTC/USD', depth: 3)

View historic prices:

markets.historic('BTC/USD', resolution: 86400*30)

Check the FTX API docs for additional parameters such as start_time and end_time

Note: resolution is in seconds so 86,400 would be the number of seconds in a day. As a default, the API responds with 12 months of historical prices.

Futures (public)

Initialize a futures session:

futures = FXT::API::Futures.new

Query for all current prices:

futures.list

Fetch a single market price:

futures.get('BTC-PERP')

Fetch stats for a future:

futures.stats('BTC-PERP')

Fetch all or one funding rates:

futures.funding_rates(future: 'BTC-PERP')

Note: future is optional, start_time and end_time are also accepted per the FTX API docs

Account

Initialize an account session:

 = FXT::API::Account.new(key: 'YOUR FTX KEY', secret: 'YOUR FTX SECRET')

Fetch information about account associated with key/secret:

.get

Query for all current account positions:

.positions

Wallet

Initialize a wallet session:

wallet = FXT::API::Wallet.new(key: 'YOUR FTX KEY', secret: 'YOUR FTX SECRET')

Query for all available coins:

wallet.coins

Query for all current coin balances in your account:

wallet.balances

Query for all current coin balances split into a hash by subaccount:

wallet.all_balances

Orders

Initialize an orders session:

orders = FXT::API::Orders.new(key: 'YOUR FTX KEY', secret: 'YOUR FTX SECRET')

Query for all open orders:

orders.open

Query for all historical orders:

orders.history

Fetch a specific order by FTX orderId:

orders.get(order_id)

Fetch a specific order by clientId:

orders.get_by_client_id(clientId)

Create a new order:

args = {
      market:       "XRP-PERP",     # coin or futures name
      side:         "sell",         # "buy" or "sell"
      price:        0.306525,       # Send nil for market orders.
      type:         "limit",        # "limit" or "market"
      size:         31431.0,
      reduceOnly:   false,          # optional; default is false
      ioc:          false,          # optional; default is false
      postOnly:     false,          # optional; default is false
      clientId:     nil             # optional; client order id
    }

orders.create(args)

Note: the create order method is not included as a test, because I have not been able to find FTX test keys and it seems a bit ridiculous to execute a live order for testing.

Check the FTX API docs for all parameters

Fills

Initialize a fills session:

fills = FXT::API::Fills.new(key: 'YOUR FTX KEY', secret: 'YOUR FTX SECRET')

Query for all fills:

fills.list

or

fills.list(market: 'BTC/USD')

Note: market is optional

Funding

Initialize a funding session:

funding = FXT::API::Funding.new(key: 'YOUR FTX KEY', secret: 'YOUR FTX SECRET')

Query for all or one funding payments:

funding.payments(future: 'BTC-PERP')

Query for all or one funding rates:

funding.rates(future: 'BTC-PERP')

Note: future is optional, start_time and end_time are also accepted per the FTX API docs

Convert Coins

Initialize an convert session:

convert = FXT::API::Convert.new(key: 'YOUR FTX KEY', secret: 'YOUR FTX SECRET')

Create a new quote:

args = {
      size:         0.01,   # 0.01 is the smallest increment
      fromCoin:     "USD",
      toCoin:       "BTC",
    }

convert.new_quote(args)

Response:

{:quoteId=>2*******3}

Fetch a quote:

convert.get_quote('quoteId')

Accept a quote:

convert.accept_quote('quoteId')

Development

After checking out the repo, run bin/setup to install dependencies.

You'll then need to add environment variables ENV['FTX_KEY'] and ENV['FTX_SECRET']. API keys can be created in your FTX settings page.

Then, run rake test to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/benrs44/ftx-api. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the Ftx::Api project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.