openapi: 3.0.0 info: title: Bakkt Crypto Solutions Accounts Orders API version: '2.0' description: The Bakkt Crypto Solutions API is a REST-based API that provides a platform for clients, so their investors can purchase, hold, sell, and transfer digital assets. Clients must have authorization to use the APIs, secure endpoints, and facilities to ensure safe, fast execution and tracking of orders. Users must specify all date and time units using epoch time in UTC. The URL path includes a version number to indicate major versions which retain backward compatibility to other URLs with the same version prefix. This document is reconstructed by the API Evangelist enrichment pipeline from the per-endpoint OpenAPI fragments Bakkt publishes on its ReadMe developer hub (bakkt.readme.io); it merges the Crypto Solutions (/apex-crypto/api/v2) and Fiat/Partner (/partner/v1) endpoint families. termsOfService: https://bakkt.com/user-agreement contact: name: Bakkt User Account Agreement url: https://bakkt.com/user-agreement servers: - url: https://api.bakkt.com description: Bakkt API gateway (dedicated per-client, IP-whitelisted; base paths /apex-crypto/api/v2 and /partner/v1) tags: - description: Orders enables customers to buy or sell crypto. name: Orders paths: /apex-crypto/api/v2/orders/{clientOrderId}/cancel: post: description: Use this endpoint to submit a request to cancel an order. Requests to cancel orders are subject to the status of the order and if the order has not already processed. operationId: cancelOrder parameters: - description: The `clientOrderId` of order to cancel (submitted when the order was originally created) in: path name: clientOrderId required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/CancelRequest' description: Additional information regarding the order to cancel required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/CancelResponse' '400': description: This response returns if the order could not be found to cancel it. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: This response returns if the system could not complete this request, because the system could not find the order. content: application/json: schema: $ref: '#/components/schemas/Error' default: description: This response returns if the system encounteres an unexpected error while handling this request. content: application/json: schema: $ref: '#/components/schemas/Error' security: - api_key: [] summary: Submit a Request to Cancel an Order tags: - Orders /apex-crypto/api/v2/orders/{clientOrderId}: get: description: Use this endpoint to retrieve an order by its `clientOrderId.` operationId: getOrder parameters: - description: Client Order ID of the order to retrieve in: path name: clientOrderId required: true schema: type: string responses: '200': description: This response returns the full details of the order. content: application/json: schema: $ref: '#/components/schemas/Order' '404': description: This response returns if the system could not complete this request because the order could not be found. content: application/json: schema: $ref: '#/components/schemas/Error' security: - api_key: [] summary: Retrieve an Order by Client Order ID tags: - Orders /apex-crypto/api/v2/orders: post: description: 'Client systems use this endpoint to submit new order instructions to buy or sell crypto on behalf of an investor.

The order processes asynchronously. The system allows duplicate submissions; however, order details must NOT change in subsequent requests. Orders are uniquely tracked for idempotency by the submitting system providing the `clientOrderId` field.

Clients can provide the amounts to purchase or sell crypto in two different ways:

`Notional` - Using the notional field, an investor may place an order for crypto given a USD amount to purchase. For example, an investor can buy $100 of BTCUSD at market price by entering 100 in the notional field.
`Absolute` - Using the quantity field, an investor may place an order for an exact amount of crypto. For example, an investor can sell 0.05 BTC for USD by entering 0.05 in the quantity field. ' operationId: submitOrder requestBody: content: application/json: schema: $ref: '#/components/schemas/NewOrderRequest' description: Submits a new order to fill given the terms provided by the investor required: true responses: '200': description: This response returns when the order already exists. content: application/json: schema: $ref: '#/components/schemas/Order' '201': description: This response returns the newly created order. content: application/json: schema: $ref: '#/components/schemas/Order' '400': description: This response returns when the request to submit the order was submitted improperly. content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: This response returns if the system encounters an unexpected error while handling this request. content: application/json: schema: $ref: '#/components/schemas/Error' default: description: This response returns if the system encounters an unexpected error while handling this request. content: application/json: schema: $ref: '#/components/schemas/Error' security: - api_key: [] summary: Submit an Order to Buy or Sell Crypto tags: - Orders components: schemas: CancelRequest: description: A request to stop attempting to serve an order; a `clientOrderId` is identified alongside this request object in order to target a specific order to cancel properties: id: description: An ID that uniquely identifies a request to cancel format: uuid type: string required: - id type: object OrderType: description: '
`MARKET` - Fill the order using current MARKET price
`LIMIT` - Fill the order matching the price constraints provided ' enum: - LIMIT - MARKET - STOP_LIMIT type: string OrderCancel: properties: rejectReason: type: string request: $ref: '#/components/schemas/CancelRequest' transactTime: format: date-time type: string required: - request type: object OrderStatus: enum: - IN_PROGRESS - COMPLETE type: string TimeInForce: description: '
`IOC` - Fill immediately and cancel any amount that can''t be filled
`DAY` - Fill order until the end of the current trading day
`GTC` - Fill order until canceled or after 90 days
`GTD` - Fill order until the good-till date ' enum: - IOC - DAY - GTC - GTD type: string Order: description: An Order represents a request to buy or sell crypto. Orders can be placed with various criteria that include, but are not limited to, how much to purchase, how long the purchase order should stand, what price is acceptable in the case of limit orders, etc. Orders are sent to one or more liquidity providers for fullfillment using a best-bid, offer-match methodology in order to acquire the best market execution for investors' orders. properties: averagePrice: description: The price of the order averaged across all filled quantities for the order type: string cancels: items: $ref: '#/components/schemas/OrderCancel' type: array createdAt: description: The time the order was submitted on the Apex Crypto platform format: date-time type: string cumulativeQuantity: description: The total amount of quantity filled for an order; if subsequent orders are filled, this value may increase commensurately type: string executions: description: The results of the order's attempt(s) to execute items: $ref: '#/components/schemas/Execution' type: array id: description: Unique `clientOrderId` that represents this order type: string leavesQuantity: description: In the case that your order is not yet or cannot be fully filled, this amount indicates the order's open quantity remaining type: string rejectReason: description: Provided when an order is rejected in the course of attempting to serve the request type: string request: $ref: '#/components/schemas/NewOrderRequest' status: $ref: '#/components/schemas/OrderStatus' working: default: false description: True if the order is actively being worked type: boolean required: - id - request type: object Execution: description: An execution captures the results of an attempt to fill an order. There may be zero or more execution reports associated with an order to track its attempts to purchase or sell a crypto asset. properties: commission: description: 'In order to ensure that any configured minimum trade fee is met by any trading scenario, the first execution fill is charged the minimum fee. The Apex Crypto system maintains a running total of any bps commission charges as other fills are executed for that order. Once the minimum fee has been satisfied by the bps commission charges for all of the fills on the order, the bps commission charges apply to any subsequent fills. ' type: string executedAt: description: Time the execution was completed format: date-time type: string id: description: A unique identifier for the execution report type: string netMoney: type: string price: description: The price at which the execution filled type: string quantity: description: The amount that was filled in this execution type: string side: $ref: '#/components/schemas/Side' symbol: description: The symbol filled type: string tradeDate: description: Trading date the execution was completed on format: date type: string required: - id - side - symbol - quantity - price - netMoney - executedAt type: object Error: properties: code: description: This code represents an HTTP style error code. Error codes in the 4xx range indicate errors made in the way the client made the request. Error codes in the 5xx range indicate errors that the Apex Crypto system encountered in handling the request. format: int32 type: integer message: description: This error message provides additional insight into the nature of the error encountered. type: string required: - code - message type: object NewOrderRequest: properties: account: description: Investor account identifier example: ABC12345 type: string bpsCommission: description: Clients use this parameter to add commission (in basis points) to the investor's executed trade cost type: integer bpsMarkup: description: Clients use this parameter to add markup (in basis points) to the investor's ordered asset price type: integer clientOrderId: description: Client-specified unique identifier used to track, manage, and retrieve details about the order once it's submitted. example: d3adb33f-some-guid-here-fcaf3b33f maxLength: 64 type: string expireTime: description: Time the order expires for GTD orders format: date-time type: string nullable: true fixedCommission: description: Clients use this parameter to add fixed commission (in USD) to the investor's executed trade cost type: string fixedMarkup: description: Clients use this parameter to add fixed markup (in USD) to the investor's ordered asset price type: string notional: description: Order size in approximate monetary units; mutually exclusive with quantity type: string price: description: All float fields must accommodate up to fifteen significant digits type: string quantity: description: Order size in number of product units; mutually exclusive with notional type: string side: $ref: '#/components/schemas/Side' stopPrice: description: The stop price for stop limit order. type: string symbol: description: The symbol representing a crypto asset on the platform example: BTCUSD type: string timeInForce: $ref: '#/components/schemas/TimeInForce' type: $ref: '#/components/schemas/OrderType' required: - symbol - clientOrderId - type - timeInForce - account - side type: object Side: description: '
`BUY` - Buy crypto assets
`SELL` - Sell crypto assets ' enum: - BUY - SELL type: string CancelResponse: properties: receivedAt: description: The time the request to cancel the order was received format: date-time type: string request: $ref: '#/components/schemas/CancelRequest' required: - request type: object