Crypto Trading Order Management

Bakkt supports FIX and REST APIs that give clients access to all of the various Order Types and Time-in-Force (TIF) combinations described below. Our FIX and REST APIs both give complete access to all order management functions. Clients should decide between FIX and REST APIs based on their teams experience level with each of the two solutions.


For the current list of supported cryptocurrencies and their symbols, refer to the Request the Instruments List API endpoint and AWS S3 resources, where these symbols are integrated into various lists, reports, and notifications.

Note: This list is subject to change at Bakkt's discretion at any time.


Order Types

  • Market Order: Executes immediately at the current market price.
  • Limit order: Will only execute at a specified price.
  • Stop limit: Executes (becomes a limit order) when the stop price is reached.

Time-in-Force (TIF)

Time in force is how long the order stays live.

  • Immediate or Cancel (IOC): Executes all or part of the order immediately, with unfulfilled parts canceled. The rapid execution of IOC orders means cancellation requests cannot be processed by the system, making all market orders effectively immediate or cancel.
  • Good Till Canceled (GTC): Each order remains active for up to 90 days or unless specified otherwise by the client's implementation via Bakkt's API. To maintain market efficiency, Bakkt only accepts those GTC orders that are within a predefined percentage near the market price.
  • Day: Orders stay in force until the next maintenance window, but this TIF order is being deprecated in favor of GTC orders, which accommodate longer durations.
  • Cancellations: Orders can be cancelled if they have not been executed using the Submit a Request to Cancel an Order API. The process for cancellation depends on the order type and timing of the cancellation request.

Notional vs. Quantity

Orders can be specified in terms of notional value (in dollars) or quantity (in cryptocurrency units). When liquidating an entire position, specifying the order in quantity is recommended to avoid leaving residual amounts of cryptocurrency ("dust") in the account.


Workflow

Managing and creating orders is streamlined through an API integration with Bakkt. See the following:

  1. Begin by using Bakkt's Submit an Order to Buy or Sell Crypto API endpoint to place limit, GTC, or market orders. This is the first step in initiating a trade.
  2. If an order needs to be cancelled before its executed, clients can use the Submit a Request to Cancel an Order API endpoint. Only limit and GTC orders can be cancelled.
  3. Bakkt leverages the AWS SQS messaging event queue to communicate with clients about the status of their orders, including details about order types, time-in-force parameters, and notional or quantity based orders.

Order Samples

Order TypeTIFSample Curl
MarketIOCcurl -X 'POST'
'https://XXXX-api.uat.apexcrypto.com/apex-crypto/api/v2/orders'
-H 'accept: application/json'
-H 'Authorization: TOKEN'
-H 'Content-Type: application/json'
-d '{"type": "MARKET","symbol": "BTCUSD","account": "ABC123","side": "BUY","timeInForce": "IOC","notional": "5","clientOrderId": "d3adb33f-some-guid-here-fcaf3b33f"}'
LimitDAYcurl -X 'POST'
'https://XXXX-api.uat.apexcrypto.com/apex-crypto/api/v2/orders'
-H 'accept: application/json'
-H 'Authorization: TOKEN'
-H 'Content-Type: application/json'
-d '{"type": "LIMIT","symbol": "BTCUSD","account": "ABC123","side": "BUY","timeInForce": "DAY","quantity": "5","clientOrderId": "d3adb33f-some-guid-here-fcaf3b33f","price": "0.5"}''
LimitIOCcurl -X 'POST'
'https://XXXX-api.uat.apexcrypto.com/apex-crypto/api/v2/orders'
-H 'accept: application/json'
-H 'Authorization: TOKEN'
-H 'Content-Type: application/json'
-d '{"type": "LIMIT","symbol": "BTCUSD","account": "ABC123","side": "BUY","timeInForce": "IOC","quantity": "5","clientOrderId": "d3adb33f-some-guid-here-fcaf3b33f","price": "0.5"}'
LimitGTCcurl -X 'POST'
'https://XXXX-api.uat.apexcrypto.com/apex-crypto/api/v2/orders'
-H 'accept: application/json'
-H 'Authorization: TOKEN'
-H 'Content-Type: application/json'
-d '{"type": "LIMIT","symbol": "BTCUSD","account": "9YN05004","side": "BUY","timeInForce": "GTC","quantity": "5","clientOrderId": "e4dc05d9-e15d-47ec-8ee2-7b3a269f0666","price": "0.5"}'
Stop LimitDaycurl -X 'POST'
'https://XXXX-api.uat.apexcrypto.com/apex-crypto/api/v2/orders'
-H 'accept: application/json'
-H 'Authorization: TOKEN'
-H 'Content-Type: application/json'
-d '{"type": "STOP_LIMIT","symbol": "BTCUSD", "account": "ABC123","side": "BUY","stopPrice": "0.4","timeInForce": "DAY","quantity": "5","clientOrderId": "d3adb33f-some-guid-here-fcaf3b33f","price": "0.5"}'
Stop LimitGTCcurl -X 'POST'
'https://XXXX-api.uat.apexcrypto.com/apex-crypto/api/v2/orders'
-H 'accept: application/json'
-H 'Authorization: TOKEN'
-H 'Content-Type: application/json'
-d '{"type": "STOP_LIMIT","symbol": "BTCUSD","account": "ABC123","side": "BUY","timeInForce": "GTC","notional": "5","clientOrderId": "e4dc05d9-e15d-47ec-8ee2-7b3a269f0625","price": "0.5"}'