NAV
API Documentation V2.1.0

Introduction

Welcome to the Cape Crypto API Documentation. You can use our full API suite to integrate with us.

Create and cancel orders, view your account balance, stream orderbook and account updates over websocket, and perform all other actions you can perform from the apps.

🚀 Looking for trading features that we haven't added yet? We'll add them for you! Reach out to us

Hummingbot icon Looking for a Hummingbot connector for Cape Crypto? We have one! Reach out to us

Getting started

The API suite consists of public and private endpoints. Private endpoints require your requests to be signed for authentication. In order to sign your requests, you will need to create and API key and secret, and have 2FA enabled:

  1. Sign into your account Cape Crypto
  2. Head to the Profile page by clicking the profile icon at the top right
  3. Enable 2FA
  4. Create a new API key
  5. Save your new API key and Secret and do not share it with anyone

Use your API key and secret to sign your requests for all private endpoints. (Public endpoints do not require authentication)

Authentication

Authentication:

// generateHeaders.js

const crypto = require("crypto");
const apiKey = "123456...";
const secret = "ABCDEF...";

module.exports = async () => {
  const timeStamp = new Date().getTime();
  const queryString = `${timeStamp}${apikey}`;
  const signature = crypto
    .createHmac("sha256", secret)
    .update(queryString)
    .digest("hex");

  return {
    "Content-Type": "application/json;charset=utf-8",
    "X-Auth-Apikey": apikey,
    "X-Auth-Nonce": timeStamp,
    "X-Auth-Signature": signature,
  };
};

To securely access the private endpoints, each request requires authentication headers.

Generate a new signature for each new request, and add these headers to the request.

  1. X-Auth-Nonce: Current timestamp in milliseconds UTC time.
  2. X-Auth-Apikey: Your API key
  3. X-Auth-Signature: HMAC-SHA256 encrypted string of the combined timestamp, apikey and secret (see JS example)

Example using Authentication

POST Create order

// generateHeaders.js

const crypto = require("crypto");
const apiKey = "123456...";
const secret = "ABCDEF...";

module.exports = async () => {
  const timeStamp = new Date().getTime();
  const queryString = `${timeStamp}${apikey}`;
  const signature = crypto
    .createHmac("sha256", secret)
    .update(queryString)
    .digest("hex");

  return {
    "Content-Type": "application/json;charset=utf-8",
    "X-Auth-Apikey": apikey,
    "X-Auth-Nonce": timeStamp,
    "X-Auth-Signature": signature,
  };
};

Send the authenticated request:

// createOrder.js
const axios = require("axios");
const generateHeaders = require("./generateHeaders");

createOrder = async () => {
  const baseUrl = "https://trade.capecrypto.com";
  const method = "POST";
  const path = `/api/v2/trade/market/orders`;
  const url = `${baseUrl}${path}`;
  const headers = await generateHeaders();

  const orderData = {
    market: "btczar",
    side: "sell",
    volume: "0.00001",
    ord_type: "limit",
    price: "800000",
    post_only: true,
    custom_order_id: "302b0494-1a06-4089-846c-0c6b13f1b661",
  };

  const axiosConfig = {
    method: method,
    url: url,
    headers: headers,
    data: orderData,
  };

  try {
    const results = await axios(axiosConfig);
    console.log(JSON.stringify(results.data, undefined, 2));
  } catch (err) {
    console.log(err);
  }
};

Create order response:

{
  "id": 173757,
  "uuid": "7e86a4fa-fcae-4953-b9bc-d6f328beea48",
  "side": "sell",
  "ord_type": "limit",
  "price": "800000.0",
  "avg_price": "0.0",
  "state": "pending",
  "market": "btczar",
  "created_at": "2023-12-08T08:46:59+01:00",
  "updated_at": "2023-12-08T08:46:59+01:00",
  "origin_volume": "0.00001",
  "remaining_volume": "0.00001",
  "executed_volume": "0.0",
  "trades_count": 0,
  "custom_order_id": "302b0494-1a06-4089-846c-0c6b13f1b661"
}

https://trade.capecrypto.com/api/v2/trade/market/orders

Create a new order on your account by signing your request and submitting the request

Public request example

GET Get available markets

const axios = require("axios");

getMarkets = async () => {
  const baseUrl = "https://trade.capecrypto.com";
  const method = "GET";
  const path = `/api/v2/trade/public/markets`;
  const url = `${baseUrl}${path}`;

  const axiosConfig = {
    method: method,
    url: url,
  };

  try {
    const results = await axios(axiosConfig);
    console.log(JSON.stringify(results.data, undefined, 2));
  } catch (err) {
    console.log(err);
  }
};

getMarkets();

Markets response:

[
  {
    "id": "btczar",
    "name": "BTC/ZAR",
    "base_unit": "btc",
    "quote_unit": "zar",
    "min_price": "200000.0",
    "max_price": "1200000.0",
    "min_amount": "0.00001",
    "amount_precision": 8,
    "price_precision": 2,
    "state": "enabled"
  },
  {
    "id": "ethzar",
    "name": "ETH/ZAR",
    "base_unit": "eth",
    "quote_unit": "zar",
    "min_price": "10000.0",
    "max_price": "100000.0",
    "min_amount": "0.0001",
    "amount_precision": 8,
    "price_precision": 2,
    "state": "enabled"
  },
  {
    "id": "xrpzar",
    "name": "XRP/ZAR",
    "base_unit": "xrp",
    "quote_unit": "zar",
    "min_price": "1.0",
    "max_price": "100.0",
    "min_amount": "1.0",
    "amount_precision": 6,
    "price_precision": 2,
    "state": "enabled"
  },
  {
    "id": "usdczar",
    "name": "USDC/ZAR",
    "base_unit": "usdc",
    "quote_unit": "zar",
    "min_price": "14.0",
    "max_price": "29.0",
    "min_amount": "0.5",
    "amount_precision": 2,
    "price_precision": 2,
    "state": "enabled"
  }
]

GET https://trade.capecrypto.com/api/v2/trade/public/markets

Returns a list of all available markets

Public

GET Alive

/public/health/alive

Description

Check that the trade engine is running. Occasionally the trade engine will be temporarily taken offline for udpates and general maintenance. Maintenence will usually not take longer than a few minutes.

Responses

Code Description
200 Trade engine is running, trading is available

GET Ticker

/public/markets/{market}/tickers

Description

Get ticker of specific market.

Parameters

Name Located in Description Required Schema
market path Yes string

Responses

Code Description Schema
200 Returns a ticker. Ticker

GET All tickers

/public/markets/tickers

Description

Get ticker of all markets

Responses

Code Description Schema
200 Returns an array of tickers. Ticker

GET K Line

/public/markets/{market}/k-line

Description

Get K-Line (OHLC) of specific market.

Parameters

Name Located in Description Required Schema
market path Yes string
period query Time period of K line, default to 1. You can choose between 1, 5, 15, 30, 60, 120, 240, 360, 720, 1440, 4320, 10080 No integer
time_from query Timestamp in ms. If set, only k-line data after that time will be returned. No integer
time_to query Timestamp in ms. If set, only k-line data till that time will be returned. No integer
limit query Limit the number of returned data points default to 30. Ignored if time_from and time_to are given. No integer

Responses

Code Description
200 Returns K-Line (OHLC) of market.

GET Orderbook

/public/markets/{market}/depth

Description

Get the orderbook for the specified market eg. 'btczar'. Asks and bids are sorted away from the spread, ie asks are sorted low to high, and bids are sorted high to low. Results are returned in tupples of [price, amount] in the base currency eg. 'btc'.

Parameters

Name Located in Description Required Schema
market path Yes string
limit query Limit the number of returned price levels. Default 100. No integer

Responses

Code Description
200 Get orderbook of specified market

GET Market trades

/public/markets/{market}/trades

Description

Get recent trades for the specified market, results are paginated

Parameters

Name Located in Description Required Schema
market path Yes string
limit query Limit the number of returned trades. Default to 100. No integer
time_from query Timestamp in ms. Return trades executed after the timestamp. No integer
time_to query Timestamp in ms. Return trades executed before the timestamp. No integer
page query Paginated page number. No integer
order_by query Default is desc (newest to oldest). Options are [asc desc] No string

Responses

Code Description Schema
200 Get recent trades on market. [ Trade ]

GET Markets

/public/markets

Description

Get all available markets.

Parameters

Name Located in Description Required Schema
limit query Limit the number of returned paginations. Defaults to 100. No integer
page query Paginated page number. No integer
ordering query Order of results by field name (see order_by below), defaults to 'asc'. No string
order_by query Name of the field to order by. [id position] No string
base_unit query Return only markets that have this currency as the base unit eg. 'btc' No string
quote_unit query Return only markets that have this currency as the quote unit eg. 'zar' No string

Responses

Code Description Schema
200 Get all available markets. [ Market ]

GET All Currencies

/public/currencies

Description

Get list of currencies

Parameters

Name Located in Description Required Schema
limit query Limit the number of returned paginations. Defaults to 100. No integer
page query Paginated page number. No integer
type query Currency type No string

Responses

Code Description Schema
200 Get list of currencies [ Currency ]

GET Single Currency

/public/currencies/{id}

Description

Get a single currency

Parameters

Name Located in Description Required Schema
id path Currency code. Yes string

Responses

Code Description Schema
200 Get a currency Currency

Account

POST Create new beneficiary

/account/beneficiaries

Description

Create a new beneficiary

Parameters

Name Located in Description Required Schema
currency formData Beneficiary currency code. Yes string
name formData Human rememberable name which refer beneficiary. Yes string
description formData Human rememberable name which refer beneficiary. No string
data formData Beneficiary data in JSON format Yes json

Responses

Code Description Schema
201 Create new beneficiary Beneficiary

PATCH Activate new neneficiary

/account/beneficiaries/{id}/activate

Description

Activates a new beneficiary with pin emailed during beneficiary creation

Parameters

Name Located in Description Required Schema
id path Beneficiary Identifier Yes integer
pin formData Pin code for beneficiary activation Yes integer

Responses

Code Description Schema
200 Activates beneficiary with pin Beneficiary

DELETE Delete beneficiary

/account/beneficiaries/{id}

Description

Delete beneficiary

Parameters

Name Located in Description Required Schema
id path Beneficiary Identifier Yes integer

Responses

Code Description
204 Delete beneficiary

GET Beneficiary by id

/account/beneficiaries/{id}

Description

Get beneficiary by id

Parameters

Name Located in Description Required Schema
id path Beneficiary Identifier Yes integer

Responses

Code Description Schema
200 Get beneficiary by id Beneficiary

GET List Beneficiaries

/account/beneficiaries

Description

Get list of user beneficiaries

Parameters

Name Located in Description Required Schema
currency query Beneficiary currency code. No string
state query Defines either beneficiary active - user can use it to withdraw moneyor pending - requires beneficiary activation with pin. No string

Responses

Code Description Schema
200 Get list of user beneficiaries [ Beneficiary ]

GET Withdraw quote

/account/withdraws/{currency}

/account/withdraws/{currency}?bolt=ln...

Description

Get the expected fee to withdraw the specified currency. Submit the quote_id with your withdraw request payload to honor that fee during the withdrawal. Quotes are currently valid for 90 seconds, ensure you submit the withdrawal request before the expires_at parameter.

Parameters

Name Located in Description Required Schema
currency path Currency code. Yes string
bolt query For BTC Lightning payments, supply the Bolt11 invoice. Fees are returned in BTC. No integer

Responses

Code Description Schema
200 Returns a withdraw quote [ Withdraw quote ]

POST New withdrawal

/account/withdraws

Description

Creates new withdrawal to active beneficiary.

Parameters

Name Located in Description Required Schema
otp formData OTP to perform action Yes integer
beneficiary_id formData ID of active Beneficiary. Yes integer
currency formData The currency code matching the beneficiary. Yes string
amount formData The amount to withdraw. Yes double
note formData ZAR withdrawals only. Use 'same_day_rtc' for Faster withdraws No string

Responses

Code Description
201 Creates new withdrawal.

GET Withdrawal history

/account/withdraws

Description

Get your withdraw history, paginated.

Parameters

Name Located in Description Required Schema
currency query Currency code. No string
limit query Number of withdraws per page (defaults to 100, maximum is 100). No integer
state query Filter by withdraw state. [ Withdraw states ] No string
rid query Destination address (blockchain withdraws only). No string
page query Page number (defaults to 1). No integer

Responses

Code Description Schema
200 List your withdraws. [ Withdraw ]

GET Instant deposit methods

/payments/methods

Description

Gets your available instant FIAT deposit methods, including voucher providers whose vouchers you can use to redeem (deposit). Use the id of the provider when creating the deposit request for the specific method.

Responses

Code Description Schema
201 Array of instant FIAT deposit methods. Instant Deposit Method

POST Redeem voucher

/payments/vouchers/new

Description

Redeem a voucher code.

Parameters

Name Located in Description Required Schema
payment_method_id query The id of this deposit method (see Instant FIAT deposit methods) Yes integer
amount query The amount to redeem, eg 10 redeems R10 Yes double
voucher_pin query The voucher redemption code. Yes string

Responses

Code Description Schema
201 Voucher redemption. Voucher redemption

GET Deposit address

/account/deposit_address/{currency}

Description

Fetch the deposit address for the specified currency.

Note: If your currency deposit address has not been created yet, the result may return empty while the address is being created. If it is empty, please try again in a few seconds.

Parameters

Name Located in Description Required Schema
currency path The currency to receive. Yes string

Responses

Code Description Schema
200 Deposit address. (May be empty on first request for new accounts, see note above). Deposit

GET Deposit history by txid

/account/deposits/{txid}

Description

Get details of a specific blockchain deposit by the txid.

Parameters

Name Located in Description Required Schema
txid path Deposit transaction id Yes string

Responses

Code Description Schema
200 Get details of specific deposit. Deposit

GET Deposit history

/account/deposits

Description

Get your deposit history

Parameters

Name Located in Description Required Schema
currency query Currency code No string
state query Filter deposits by deposit state States No string
txid query Deposit transaction id. No string
limit query Number of deposits per page (defaults to 100, maximum is 100). No integer
page query Page number (defaults to 1). No integer

Responses

Code Description Schema
200 Get your deposit history. [ Deposit ]

GET Balance

/account/balances/{currency}

Description

Get single account balance by currency code eg. 'btc'

Parameters

Name Located in Description Required Schema
currency path The currency code. Yes string

Responses

Code Description Schema
200 Get account balance by currency Account

GET All balances

/account/balances

Description

Get account balances for all currencies

Parameters

Name Located in Description Required Schema
limit query Limit the number of returned paginations. Defaults to 100. No integer
page query Paginated page number. No integer
nonzero query Filter non zero balances. No Boolean

Responses

Code Description Schema
200 Array of balances [ Account ]

POST New lightning payment

/account/lightning/pays

Description

Submits a payment request to pay a BTC Lightning BOLT11 invoice (withdraws this balance from your BTC account).

As the payment is requested and validated on the lightning network, please query your withdrawal history to confirm that the payment succeeded.

Parameters

Name Located in Description Required Schema
bolt query The bolt11 invoice to pay. Yes string
amount query The amount to of the invoice in SATs. Sanity check is performed against the supplied bolt11 Yes double
quote_id query The quote_id of the withdrawal quote, see Withdraw quote No string
member_description query Personal description of this payment for your records No string

Responses

Code Description Schema
201 Lightning payment. [ Lightning payment ]

POST Create a Lightning invoice

/account/lightning/invoices

Description

Create a new lightning invoice to be paid (receive) over the BTC Lightning network.

You can optionally specify a conversion_percent (1 = 100%, 0.1 = 10%) to automatically convert once the invoice is paid. The conversion percent should be such that the conversion amount is greater than or equal to the minimum order amount for the market eg. 'btczar'. For example if receiving BTC 0.00001, and the minimum order amount on 'btczar' is 0.00001, your conversion percent would have to be 1 (100%). Anything less would cause the invoice creation to fail, as the conversion amount would be below the minimum market order amount.

The invoice expires in 1 hour.

Parameters

Name Located in Description Required Schema
amount query The amount to of the invoice in SATs. Sanity check is performed against the supplied bolt11 Yes double
conversion_percent query Percent of the received amount to be automatically converted to FIAT No double
description query The description for the invoice (visible on the Bolt11 invoice to the payer). If left blank the default Cape Crypto Invoice is used No string
member_description query Personal description of this invoice for your records No string

Responses

Code Description Schema
201 Lightning invoice. [ Lightning invoice ]

Trading

POST Create Order

/market/orders

Description

Submits a Buy/Sell order to the order book. Orders should be confirmed that they have been created either by querying the order ID that is returned in the response, or subscribing to the websockets for order updates.

You can supply your own custom_order_id for tracking purposes for you own system.

For limit orders, you can specify post_only to ensure that orders wont complete if they would have matched. The order request will fail if post_only is true, and the order would have matched.

Parameters

Name Description Required Schema
market The market name eg 'btczar' Yes string
side The direction of the order eg buy Yes string
volume The order size in base currency Yes double
ord_type Limit / Market No string
price The limit order price No double
post_only Fail limit order if matched No boolean
custom_order_id Your custom order id No string

Responses

Code Description Schema
201 Order submitted Order

GET Order by id

/market/orders/{id}

Description

Get single order details.

Parameters

Name Located in Description Required Schema
id path Yes string

Responses

Code Description Schema
200 Order details. Order

GET All orders

/market/orders

Description

Get orders, result is paginated.

Parameters

Name Located in Description Required Schema
market query No string
base_unit query No string
quote_unit query No string
state query Filter order by state. No string
limit query Limit the number of returned orders, default to 100. No integer
page query Paginated page number. No integer
order_by query If set, returned orders will be sorted in specific order, default to "desc". No string
ord_type query Filter order by ord_type. No string
type query Filter order by type. No string
time_from query Timestamp in ms.If set, only orders created after the time will be returned. No integer
time_to query Timestamp in ms.If set, only orders created before the time will be returned. No integer

Responses

Code Description Schema
200 Get your orders, result is paginated. [ Order ]

GET Trades

/market/trades

Description

Fetch your executed trades.

Parameters

Name Located in Description Required Schema
market query No string
limit query Limit the number of returned trades. Default to 100. No integer
page query Paginated page number. No integer
time_from query Timestamp in ms. Return trades executed after the timestamp. No integer
time_to query Timestamp in ms. Return trades executed after the timestamp. No integer
order_by query Order by created_at, defaults to 'desc'. [asc desc] No string

Responses

Code Description Schema
200 Get your executed trades.. [ Trade ]

POST Cancel Order

/market/orders/{id}/cancel

Description

Cancel a specific order by Order id.

Parameters

Name Located in Description Required Schema
id path Yes string

Responses

Code Description
201 Cancel an order.

POST Cancel All Orders

/market/orders/cancel

Description

Cancel all of your open orders.

Parameters

Name Located in Description Required Schema
market formData No string
side formData Only cancel orders on this side [buy sell] No string

Responses

Code Description Schema
201 Cancel all my orders. Order

Websocket

// generateHeaders.js

const crypto = require("crypto");
const apiKey = "123456...";
const secret = "ABCDEF...";

module.exports = async () => {
  const timeStamp = new Date().getTime();
  const queryString = `${timeStamp}${apikey}`;
  const signature = crypto
    .createHmac("sha256", secret)
    .update(queryString)
    .digest("hex");

  return {
    "Content-Type": "application/json;charset=utf-8",
    "X-Auth-Apikey": apikey,
    "X-Auth-Nonce": timeStamp,
    "X-Auth-Signature": signature,
  };
};

The high performance websocket provides near realtime updates on the orderbook, your orders and balances.

The orderbook endpoint does not require authenticaiton, while the private endpoints (orders, trades, and balances) do require authentication.

To connect to the private endpoints on the websocket, send the authentication headers with the connection request, similar to the REST authentication, and subscribe to the streams you are interested in. You can combine multiple subscriptions in one request, and also provide the subscriptions at the same time as connecting - ie. you only need 1x request to get fully connected.

You can also combine the public and private streams into one so that you only need to maintain 1x connection for example ?stream=btczar.ob-inc&stream=order&stream=trade&stream=balance

SUBSCRIBE Orderbook

const WebSocket = require("ws");

async function connectWssPublic() {
  try {
    const baseUrl = `wss://trade.capecrypto.com/api/v2`;
    const streams = "?stream=btczar.ob-inc&stream=ethzar.ob-inc";
    const path = `/stream/public${streams}`;

    ws = new WebSocket(`${baseUrl}${path}`);
  } catch (err) {
    console.log(err);
  }

  ws.on("open", () => {
    console.log("Connected to websocket");
  });

  ws.on("message", function message(data) {
    data = JSON.parse(data);
    console.log(JSON.stringify(data, undefined, 2));

    if (["ob-snap", "ob-inc"].includes(data)) {
      // handle all subscribed markets
      // updateOrderBook(data);
    }
  });
}

connectWssPublic();

?stream={market}.ob-inc

Description

Subscribe to orderbook updates for the specified market. You can subscribe to multiple markets at the same time by adding each market as a param, eg

?stream=btczar.ob-inc&ethzar.ob-inc

Note: if the amount is empty "", the order has been removed from the orderbook

Parameters

Name Located in Description Required Schema
{market}-ob.inc query Name of the market to subscribe to yes string

Responses

Description Schema
snapshot [ Snapshot ]
increment [ Increment ]

SUBSCRIBE K-Line

const WebSocket = require("ws");

async function connectWssPublic() {
  try {
    const baseUrl = `wss://trade.capecrypto.com/api/v2`;
    const streams = "?stream=btczar.kline-15m";
    const path = `/stream/public${streams}`;

    ws = new WebSocket(`${baseUrl}${path}`);
  } catch (err) {
    console.log(err);
  }

  ws.on("open", () => {
    console.log("Connected to websocket");
  });

  ws.on("message", function message(data) {
    data = JSON.parse(data);
    console.log(JSON.stringify(data, undefined, 2));

    if (["kline-"].includes(data)) {
      // handle all subscribed markets
      // updateOrderBook(data);
    }
  });
}

connectWssPublic();

?stream={market}.kline-{period}

Description

Subscribe to the K-LINE (OHLC) for the specified market to get updates on the OHLC for each period. Similary to the otherendpoints, you can combine streams into a single subscription request.

Parameters

Name Located in Description Required Schema
{market} query Name of the market to subscribe to yes string
{period} query The period to get updates at "1m", "5m", "15m", "30m", "1h", "2h", "4h", "6h", "12h", "1d", "3d", "1w" yes string

Responses

Name Type Description
{market}.kline-{period} object Key name of the OHLC for the market and period
OHLC for that period [number] Array of Timestamp, Open, High, Low, Close, Volume

SUBSCRIBE Private

async function connectWssPrivate() {
  try {
    const baseUrl = `wss://trade.capecrypto.com/api/v2`;
    const headers = await generateHeaders();
    const streams =
      "?stream=btczar.ob-inc&stream=ethzar.ob-inc&stream=order&stream=trade&stream=balance";
    const path = `/stream/private?${streams}`;

    ws = new WebSocket(`${baseUrl}${path}`, { headers });
  } catch (err) {
    console.log(err);
  }

  ws.on("open", () => {
    console.log("Connected to websocket");
  });

  ws.on("message", (data) => {
    data = JSON.parse(data);
    console.log(JSON.stringify(data, undefined, 2));

    if (["ob-snap", "ob-inc"].includes(data)) {
      // handle all subscribed markets
      // updateOrderBook(data);
    }
    if (data["trade"]) {
      // handleOwnTradeUpdate(data);
    }
    if (data["order"]) {
      // handleOwnOrderUpdate(data);
    }

    if (data["balance"]) {
      // handleBalanceUpdate(data);
    }
  });
}

connectWssPrivate();

?stream={subscription}

Combined into 1x: ?stream={order}&stream={trade}&stream={balance}

Description

Subscribe to your account, and receive updates on your placed orders, trades executed, and balance updates.

Parameters

Name Located in Description Required Schema
order query Subscribe to order updates for your orders No string
trade query Subscribe to trade executions for your orders No string
balance query Subscribe to balance updates on your account No string

Responses

Name Located in Description Required Schema
market query No string
limit query Limit the number of returned trades. Default to 100. No integer
page query Paginated page number. No integer
time_from query Timestamp in ms. Return trades executed after the timestamp. No integer
time_to query Timestamp in ms. Return trades executed after the timestamp. No integer
order_by query Order by created_at, defaults to 'desc'. [asc desc] No string

Models

Ticker

Name Type Description
at integer Timestamp of ticker
ticker TickerEntry Ticker entry for specified time

TickerEntry

Name Type Description
low double The lowest trade price during last 24 hours (0.0 if no trades executed during last 24 hours)
high double The highest trade price during last 24 hours (0.0 if no trades executed during last 24 hours)
open double Price of the first trade executed 24 hours ago or less
last double The last executed trade price
volume double Total volume of trades executed during last 24 hours
amount double Total amount of trades executed during last 24 hours
vol double Alias to volume
avg_price double Average price more precisely VWAP (volume weighted average price)
price_change_percent string Price change over the last 24 hours
at integer Timestamp of ticker

Orderbook entry

Name Type Description
price number The price of the order
amount number The amount of the order at that price. Note: if the amount is empty "", the order has been removed from the orderbook

Trade

Name Type Description
id string Trade ID.
price double Trade price.
amount double Trade amount.
total double Trade total (Amount * Price).
fee_currency double Currency user's fees were charged in.
fee double Percentage of fee user was charged for performed trade.
fee_amount double Amount of fee user was charged for performed trade.
market string Trade market id.
created_at string Trade create time in iso8601 format.
taker_type string Trade taker order type (sell or buy).
side string Trade side.
order_id integer Order id.
custom_order_id integer Optional custom Order id if supplied.

Order

Name Type Description
id integer Unique order id.
uuid string Unique order UUID.
custom_order_id string Custom order id if supplied during order creation.
side string Either 'sell' or 'buy'.
ord_type string Type of order, either 'limit' or 'market'.
post_only boolean If the Limit order was submitted as post_only .
price double Price for 1x base unit.
avg_price double Average execution price over all executed trades.
state string Current state of the order Order states
market string The market in which the order is placed, e.g. 'btczar'.
created_at string Order create time in iso8601 format.
updated_at string Order updated time in iso8601 format.
origin_volume double The original amount of the order.
remaining_volume double The remaining amount of the original order volume.
executed_volume double The executed volume of the original order volume.
trades_count integer Number of trades executed against this limit order.
trades [Trade] Array of trades executed against this order.

Market

Name Type Description
id string Unique market id eg 'btczar'
name string Market name.
base_unit string Market Base unit.
quote_unit string Market Quote unit.
min_price double Minimum order price.
max_price double Maximum order price.
min_amount double Minimum order amount.
amount_precision double Precision for order amount.
price_precision double Precision for order price.
state string If the market is enabled for trading or not.

Currency

Name Type Description
id string Currency code.
name string Currency name
symbol string Currency symbol
explorer_transaction string Currency transaction exprorer url template
explorer_address string Currency address exprorer url template
type string Currency type
deposit_enabled string Currency deposit possibility status (true/false).
withdrawal_enabled string Currency withdrawal possibility status (true/false).
deposit_fee string Currency deposit fee
min_deposit_amount string Minimal deposit amount
withdraw_fee string Currency withdraw fee
min_withdraw_amount string Minimal withdraw amount
withdraw_limit_24h string Currency 24h withdraw limit
withdraw_limit_72h string Currency 72h withdraw limit
base_factor string Currency base factor
precision string Currency precision
position string Position used for defining currencies order
icon_url string Currency icon
min_confirmations string Number of confirmations required for confirming deposit or withdrawal

Withdraw

Name Type Description
id integer The withdrawal id.
currency string The currency code.
type string The withdrawal type
amount string The withdrawal amount
fee double The exchange fee.
blockchain_txid string The withdrawal transaction id.
rid string The beneficiary ID or wallet address on the Blockchain.
state string The withdrawal state.
confirmations integer Number of confirmations.
note string Optional withdraw note.
created_at string The datetime for the withdrawal.
updated_at string The datetime for the withdrawal.
done_at string The datetime when withdraw was completed

Withdraw quote

Name Type Description
id string The id of the quote. Submit this with your withdrawal request
currency string The currency code.
fee string The fee for the withdrawal
blockchain string The blockchain for this quote
created_at string The datetime the quote was created.
expires_at string The datetime the quote expires.

Beneficiary

Name Type Description
uuid integer Beneficiary Identifier
currency string Beneficiary currency code.
name string Name of the beneficiary.
description string A personal description of the beneficiary for your records.
data json Bank Account details for FIAT Beneficiary in JSON format. For crypto it's blockchain address.
state string Pending, Active, Archived (0,1,2)

Deposit

Name Type Description
id integer Unique deposit id.
currency string Deposit currency id.
amount double Deposit amount.
fee double Deposit fee.
txid string Deposit transaction id.
confirmations integer Number of deposit confirmations.
state string Deposit state.
created_at string The datetime when deposit was created.
completed_at string The datetime when deposit was completed..
tid string The shared transaction ID

Account

Name Type Description
currency string Currency code.
balance double Account balance.
locked double Account locked funds.

Instant Deposit Method

Name Type Description
id string Method id, used when redeeming voucher
provider_id string ID of the provider
name string Name of the provider method
type string Type of method [voucher instanteft]
description string Description of this provider
min_amount number Minimum deposit / redemption amount
max_amount number Maximum deposit / redemption amount

Voucher Redemption

Name Type Description
amount number The amount deposited after fees.
origin_amount number The original amount of the voucher.
change_voucher Change voucher Optional if provider offers this, a new voucher for the remaining amount

Change voucher

Name Type Description
change_amount number Amount of change from the redeemed voucher, available to be spent
change_expiry string Expiry date of the new voucher.
change_pin number The new voucher_pin to be used for redemption.

Lightning payment

Name Type Description
bolt String The invoice bolt11.
address String The address of the invoice if not bolt11.
amount number Invoice amount paid in SAT.
description String Description for this invoice in the bolt11.
member_description String Private member description for this invoice provided by member.
state String Payment state.
created_at String (ISO8601 formatted) The datetime when payment was created.

Lightning invoice

Name Type Description
bolt String The invoice in bolt11.
amount BigDecimal Invoice amount to be paid in SAT.
conversion_percent BigDecimal The amount to automatically convert to FIAT.
amount_msat BigDecimal Invoice amount to be paid in Mili SAT.
description String Description for this invoice.
member_description String Private member Description for this invoice.
state String Payment state.
created_at String (ISO8601 formatted) The datetime when invoice was created.
expires_at String (ISO8601 formatted) The datetime when invoice expires.
paid_at String (ISO8601 formatted) The datetime when invoice was paid.

Websocket orderbook snapshot

Name Type Description
{market}.ob-snap Object The object key for the subscription
asks [Orderbook entry] Array of ask / sell orderbook entries.
bids [Orderbook entry] Array of bid / buy orderbook entries.
sequence integer The current sequence of the orderbook, used to ensure updates are sequential

Websocket orderbook increment

Name Type Description
{market}.ob-inc Object The object key for the subscription
asks [Orderbook entry] Array of ask / sell orderbook entries.
bids [Orderbook entry] Array of bid / buy orderbook entries.
sequence integer The current sequence of the orderbook, used to ensure updates are sequential
{
  "btczar.ob-snap": {
    "asks": [
      ["841039.73", "0.156431"],
      ["845402.1", "0.004389"],
      ["900000.0", "0.00001"]
    ],
    "bids": [
      ["835956.8", "0.047756"],
      ["831012.48", "0.03749"],
      ["829990.51", "0.019462"],
      ["400000.0", "0.0001"]
    ],
    "sequence": 9712
  }
}

States

Order states Description
pending Initial state - order has been submitted (but is not yet placed / confirmed)
wait Order has been placed and is available on the orderbook
done Order has been completely filled
cancel The order has been cancelled (A cancelled limit order may still have executed trades against it)
reject The order submission was rejected
Deposit states
submitted
canceled
rejected
accepted
collected
skipped
Withdraw states
prepared
submitted
rejected
accepted
skipped
processing
succeed
canceled
failed
errored
confirming

Errors

Code Reason Description
400 Bad Request Your request is invalid.
401 Unauthorized Apikey / secret / HMAC signature incorrect
403 Forbidden You are authenticated, but unauthorized to access this endpoint.
404 Not Found Invalid endpoint.
405 Method Not Allowed Invalid method for endpoint eg POST instead of GET.
422 Unprocessible Entity The server understood the request, but the data provided is incorrect.
429 Too Many Requests You're sending too many requests too quickly. Slow down!
500 Internal Server Error We had a problem with our server. Try again later.
503 Service Unavailable We're temporarily offline for maintenance. Please try again later.