json

Change Log

Version 1.1.1 (24th November 2021)

Version 1.1.0 (17th September 2021)

Overview

Generating API Key

You will need to create an API key on the BTSE platform before you can use authenticated APIs. To create API keys, you can follow the steps below:

Endpoints

Authentication

Example 1: Query Quote

HMAC SHA384 Signature

$ echo -n "/api/v1/quote1624985375123{\"orderSizeInBaseCurrency\":1,\"orderAmountInOrderCurrency\":0,\"side\":\"buy\",\"baseCurrency\":\"BTC\",\"orderCurrency\":\"USD\"}" | openssl dgst -sha384 -hmac "848db84ac252b6726e5f6e7a711d9c96d9fd77d020151b45839a5b59c37203bx"
(stdin)= 8ee43810606da581fb6ce03e10370f89125c2269a64de832a55cea219795e9ae0c3df86b51afbafdd28c03b16acd1427

Rate Limits

Rate limits for BTSE is as follows:

Query

Orders

API Status Codes

Each API will return one of the following HTTP status:

Workflow

OTC Endpoints

Market Summary

Response

{
  "assetName": "BTC",
  "maxOrderSizes": [
    5000,
    5000,
    5000
  ],
  "maxOrderValues": [
    100000,
    100000,
    100000
  ],
  "minOrderSizes": [
    0.05,
    0.05,
    0.05
  ],
  "minOrderValues": [
    0.0025,
    0.0025,
    0.0025
  ],
  "supportQuoteCurrencies": [
  ]
}

GET /api/v1/getMarket

Gets OTC market information

Response Content

Name Type Required Description
assetName string Yes Asset name
maxOrderSizes Double Array Yes Maximum order size
maxOrderValues Double Array Yes Maximum order notional value
minOrderSizes Double Array Yes Minimum order size
minOrderValues Double Array Yes Minimum order notional value
supportQuoteCurrencies string Array Yes Supported quote currencies

Request for Quote

Request

{
  "baseCurrency": "BTC, USDT",
  "clientOrderId": "BTCUSD0304",
  "orderAmountInOrderCurrency": 2350,
  "orderCurrency": "USD, EUR",
  "orderSizeInBaseCurrency": 20.05,
  "side": "buy, sell"
}

Response

{
  "markets": [
    {
      "assetName": "string",
      "id": 0,
      "maxOrderSizes": [
        0
      ],
      "maxOrderValues": [
        0
      ],
      "minOrderSizes": [
        0
      ],
      "minOrderValues": [
        0
      ],
      "originTimestamp": 0,
      "packetID": 0,
      "packetTimestamp": 0,
      "parametersMap": {
        "property1": {},
        "property2": {}
      },
      "processingTimestamp": 0,
      "requestId": 0,
      "supportQuoteCurrencies": [
        "string"
      ],
      "trackingID": 0
    }
  ],
  "quoteAmountToDeduct": 21563.143,
  "quoteAmountToReceive": 0.311,
  "quoteCurrencyToDeductIn": "EUR",
  "quoteCurrencyToReceiveIn": "BTC",
  "quoteId": "1e5e9ec8-dfb1-****-****-99e20d476c21",
  "quotePriceInOrderCurrency": 6431,
  "quotePriceInUSD": 6431,
  "quoteTimestamp": 1586225934778,
  "quoteValidDurationMs": 10000,
  "status": 30001
}

POST /api/v1/quote

Request for a quote

Request Parameters

Name Type Required Description
baseCurrency string Yes Base currency (eg. BTC)
orderCurrency string Yes Order currency
orderSizeInBaseCurrency Double Array Yes Size of order in base currency
orderAmountInOrderCurrency Double Array Yes Order amount in order currency
clientOrderId Double Array Yes Custom client order ID
side string Yes Order side, BUY or SELL

Response Content

Name Type Required Description
markets Asset Yes Asset information
quoteAmountToDeduct double Yes Quote amount to deduct
quoteAmountToReceive double Yes Quote amount to receive
quoteCurrencyToDeductIn string Yes Quote currency to deduct in
quoteCurrencyToReceiveIn string Yes Quote currency to receive
quoteId string Yes Quote ID
quotePriceInOrderCurrency double Yes Quote price in order currency
quotePriceInUSD long Yes Quote price in USD
quoteTimestamp long Yes Quote timestamp
quoteValidDurationMs long Yes Quote validity
status integer Yes Order status with values:
8: Insufficient Balance
30001: Order Quote
30008: OTC Order Requote
30007: OTC Order completed successfully
40001: Service Unavailable
40003: Rejected

Accept Quote

Response

{
  "markets": [
    {
      "assetName": "string",
      "id": 0,
      "maxOrderSizes": [
        0
      ],
      "maxOrderValues": [
        0
      ],
      "minOrderSizes": [
        0
      ],
      "minOrderValues": [
        0
      ],
      "originTimestamp": 0,
      "packetID": 0,
      "packetTimestamp": 0,
      "parametersMap": {
        "property1": {},
        "property2": {}
      },
      "processingTimestamp": 0,
      "requestId": 0,
      "supportQuoteCurrencies": [
        "string"
      ],
      "trackingID": 0
    }
  ],
  "quoteAmountToDeduct": 21563.143,
  "quoteAmountToReceive": 0.311,
  "quoteCurrencyToDeductIn": "EUR",
  "quoteCurrencyToReceiveIn": "BTC",
  "quoteId": "1e5e9ec8-dfb1-****-****-99e20d476c21",
  "quotePriceInOrderCurrency": 6431,
  "quotePriceInUSD": 6431,
  "quoteTimestamp": 1586225934778,
  "quoteValidDurationMs": 10000,
  "status": 30001
}

POST /api/v1/accept/{quoteId}

Accepts a quote

Request Parameter

Name Type Required Description
quoteId string Yes Quote ID to supplied as a path parameter

Response Content

Name Type Required Description
markets Asset Yes Asset information
quoteAmountToDeduct double Yes Quote amount to deduct
quoteAmountToReceive double Yes Quote amount to receive
quoteCurrencyToDeductIn string Yes Quote currency to deduct in
quoteCurrencyToReceiveIn string Yes Quote currency to receive
quoteId string Yes Quote ID
quotePriceInOrderCurrency double Yes Quote price in order currency
quotePriceInUSD long Yes Quote price in USD
quoteTimestamp long Yes Quote timestamp
quoteValidDurationMs long Yes Quote validity
status integer Yes Order status with values:
8: Insufficient Balance
30001: Order Quote
30008: OTC Order Requote
30007: OTC Order completed successfully
40001: Service Unavailable
40003: Rejected

Reject Quote

Response

{
  "errorCode": -1,
  "message": "string",
  "status": 0
}

POST /otc/api/v1/reject/{quoteId}

Reject current quote

Request Parameter

Name Type Required Description
quoteId string Yes Quote ID to supplied as a path parameter

Query Order

Response

{
  "markets": [
    {
      "assetName": "string",
      "id": 0,
      "maxOrderSizes": [
        0
      ],
      "maxOrderValues": [
        0
      ],
      "minOrderSizes": [
        0
      ],
      "minOrderValues": [
        0
      ],
      "originTimestamp": 0,
      "packetID": 0,
      "packetTimestamp": 0,
      "parametersMap": {
        "property1": {},
        "property2": {}
      },
      "processingTimestamp": 0,
      "requestId": 0,
      "supportQuoteCurrencies": [
        "string"
      ],
      "trackingID": 0
    }
  ],
  "quoteAmountToDeduct": 21563.143,
  "quoteAmountToReceive": 0.311,
  "quoteCurrencyToDeductIn": "EUR",
  "quoteCurrencyToReceiveIn": "BTC",
  "quoteId": "1e5e9ec8-dfb1-****-****-99e20d476c21",
  "quotePriceInOrderCurrency": 6431,
  "quotePriceInUSD": 6431,
  "quoteTimestamp": 1586225934778,
  "quoteValidDurationMs": 10000,
  "status": 30001
}

POST /api/v1/queryOrder/{quoteId}

Query order information

Request Parameter

Name Type Required Description
quoteId string Yes Quote ID to supplied as a path parameter

Response Content

Name Type Required Description
markets Asset Yes Asset information
quoteAmountToDeduct double Yes Quote amount to deduct
quoteAmountToReceive double Yes Quote amount to receive
quoteCurrencyToDeductIn string Yes Quote currency to deduct in
quoteCurrencyToReceiveIn string Yes Quote currency to receive
quoteId string Yes Quote ID
quotePriceInOrderCurrency double Yes Quote price in order currency
quotePriceInUSD long Yes Quote price in USD
quoteTimestamp long Yes Quote timestamp
quoteValidDurationMs long Yes Quote validity
status integer Yes Order status with values:
8: Insufficient Balance
30001: Order Quote
30008: OTC Order Requote
30007: OTC Order completed successfully
40001: Service Unavailable
40003: Rejected

Websocket Streams

Authentication

Request

{
  "op":"authKeyExpires",
  "args":["APIKey", "nonce", "signature"]}
}

Authenticate the websocket session to subscribe to authenticated websocket topics. Assume we have values as follows:

Our subscription request will be:

{
  "op":"authKeyExpires",
  "args":["4e9536c79f0fdd72bf04f2430982d3f61d9d76c996f0175bbba470d69d59816x", "1624985375123", "c410d38c681579adb335885800cff24c66171b7cc8376cfe43da1408c581748156b89bcc5a115bb496413bda481139fb"]}
}

Request Parameters

Below details the arguments needed to be sent in.

Index Type Required Description
0 string Yes First argument is the API key
1 long Yes Nonce which is the current timestamp
2 string Yes Generated signature

Generating a signature

echo -n "/ws/otc1624985375123"  | openssl dgst -sha384 -hmac "848db84ac252b6726e5f6e7a711d9c96d9fd77d020151b45839a5b59c37203bx"
(stdin)= c410d38c681579adb335885800cff24c66171b7cc8376cfe43da1408c581748156b89bcc5a115bb496413bda481139fb

Quote Stream

Request

{
  "op": "quote",
  "symbol": "BTC-USD",
  "clOrderId": "ClientOrder1",
  "quantity": {
    "quantity": 1,
    "currency": "BTC"
  }
}
{
  "op": "unsubscribe-quote",
  "symbol": "BTC-USD",
  "clOrderId": "ClientOrder1",
  "quantity": {
    "quantity": 1,
    "currency": "BTC"
  }
}
{
  "op": "unsubscribe-quote-all"
}

Response

{
  "topic": "quote",
  "buyQuoteId": "015f05ba-1d55-46d7-94d9-214229414ae7",
  "sellQuoteId": "0683a41a-a2ad-467b-99b3-241f3ab0cec4",
  "clOrderId": null,
  "buyQuantity": 10,
  "buyUnitPrice": 47865.580838,
  "buyTotalAmount": 478655.80838,
  "sellQuantity": 10,
  "sellUnitPrice": 47649.40351972,
  "sellTotalAmount": 476494.0352,
  "status": null,
  "reason": null
}

Receive quote streams by subscribing to the quote websocket. The websocket topic will constantly push new prices to the subscriber. To accept the quote, indicate the buy or sell quote Id using the /accept API.

Request Parameters

Name Type Required Description
op string Yes Operation, in this case it is quote, unsubscribe-quote, or unsubscribe-quote-all
symbol string Yes Market symbol, refer to getMarkets API
clOrderId string No Client custom order Id
quantity double Yes Order quantity
currency string Yes Can be either in the base or quote currency. If specified in the base currency, then the quote stream will respond with

Response Content

Name Type Required Description
topic string Yes Websocket topic
buyQuoteId string Yes Quote Id for the buy side. If the value is empty / null, it means that you websocket stream is not authenticated
sellQuoteId string Yes Quote Id for the sell side. If the value is empty / null, it means that you websocket stream is not authenticated
clOrderId string Yes User customer Order Id
buyQuantity double Yes Quantity to purchase based on the quote request
buyUnitPrice double Yes Unit price per unit of the base symbol
buyTotalAmount double Yes Total price to pay in quote currency
sellQuantity double Yes Quantity to sell based on the quote request
sellUnitPrice double Yes Unit price per unit of the base symbol
sellTotalAmount double Yes Total price to pay in quote currency
status string No Status of the response
reason string No If an error is returned, the reason field will contain the reasons for the error