CoinJar Exchange operates a 24/7 digital currency market powered by a proprietary, ultra-low latency matching engine called CoreMatch. This page outlines the mechanics of CoreMatch and the operational specifications of CoinJar Exchange.
CoinJar reserves the right to update this page at any time without notice so it’s your responsibility to be aware of the latest Trading Rules. These Trading Rules complement CoinJar’s Terms of Service which you must accept if you use or continue to use any CoinJar services, including via APIs.
CoinJar Exchange runs 3 discrete trading sessions every UTC day. During each trading session, the market sequentially enters into each of
|Start Time (inc.)||End Time (exc.)||Session||State||Duration|
|00:00:00||07:50:00||First Session||Continuous||7 hours 50 minutes|
|07:50:00||07:58:00||First Session||Auction||8 minutes|
|07:58:00||07:59:55||First Session||Auction, No Cancel||1 minute 55 seconds|
|07:59:55||08:00:00||First Session||Closing Padding||5 seconds|
|08:00:00||15:50:00||Second Session||Continuous||7 hours 50 minutes|
|15:50:00||15:58:00||Second Session||Auction||8 minutes|
|15:58:00||15:59:55||Second Session||Auction, No Cancel||1 minute 55 seconds|
|15:59:55||16:00:00||Second Session||Closing Padding||5 seconds|
|16:00:00||23:50:00||Third Session||Continuous||7 hours 50 minutes|
|16:50:00||23:58:00||Third Session||Auction||8 minutes|
|16:58:00||23:59:55||Third Session||Auction, No Cancel||1 minute 55 seconds|
|23:59:55||00:00:00 +1||Third Session||Closing Padding||5 seconds|
All times referenced are in UTC.
- Continuous: Orders are matched on a first-come, first-served basis, as received by the matching engine.
- Auction: Orders are accepted but not matched. Orders may be cancelled.
- Auction No Cancel: Orders are accepted only if they are less aggressive than the current best bid/ask. Orders are not matched and cannot be cancelled.
- Closing: Orders are not accepted or matched.
- Trading Halt: Orders are not accepted or matched.
All orders on the order book participate in auctions, along with additional orders received during the auction. The best bid must be greater than or equal to the best ask to result in any match. All matched orders are filled at a single price, as determined by CoreMatch to be the price that maximises the volume matched.
If there’s more than one price that fulfills the criteria, the final auction price is taken to be the median of all possible prices. If not all orders can be filled at the auction price, orders are sorted by price and then time received to determine which orders receive the fill. Auction prices may not be in whole multiples of a tick.
Market orders are not possible during auctions and they will be rejected immediately.
Due to the non-continuous nature of auctions, it is important to be aware that the auction price has the potential to deviate significantly from the market prices immediately before or after the auction. While indicative prices are announced throughout the auction period, they are only indicative of the state of the auction order book at any given time and they may change quickly and significantly when large orders are placed or cancelled.
CoinJar Exchange guarantees that all orders that receive a fill during the auction are filled at the same fill price regardless of limit order prices, and that this fill price is not worse than the limit order price of each order.
During continuous trading, orders are crossed as they are received by the trading engine, therefore the market spread is never zero or negative. Orders are filled at the price set by the maker, resulting in potential price improvement for the taker.
The full order book is visible at all times, including during auctions. Orders at the same price levels are aggregated with only the total size displayed.
Prices and Sizes
All prices and sizes on CoinJar Exchange have finite precisions, and CoinJar Exchange has a systematic way of determining the tick sizes and trade sizes.
All order prices can only have 4 significant figures, and the unit of the 4th significant figure is the tick size (or minimum price increment). For example, if a product is traded at between 1000 and 9999, the tick size is 1.
Minimum trade size (or size increment) is determined by the tick size such that trade size multiplied by tick size has 2 decimal places (AUD-denominated pairs) or 6 decimal places (BTC-denominated pairs). For example, if BTC/AUD is between 1000 and 9999, the tick size is $1 and minimum trade size is 0.01 BTC.
To maintain an orderly market, prices of new orders cannot deviate too significantly from the market price. Currently, CoinJar Exchange requires the price of new orders to be within 80% and 125% of the last tick. For example, if the last price is $500, the minimum order price is $400 and the maximum order price is $625, regardless of buying or selling.
The only native order type supported by CoreMatch is limit (
LMT). CoinJar Exchange also provides simulated market (
MKT) orders by generating a series of
IOC orders, but these generated orders are not blocking or atomic.
LMT) orders can have the following time-in-force options:
- Good Till Cancelled (
GTC): Default option. Orders are active until cancellation.
- Immediate Or Cancel (
IOC): Order is filled immediately and the remaining portion is cancelled.
- Maker Or Cancel (
MOC): Order is cancelled immediately if any part of the order would fill immediately.
In the future, CoinJar Exchange may introduce additional order types, such as Stop-Limit (
STL) or algo order types.
Self-Trade Prevention (STP)
CoinJar Exchange does not permit self-trading. If a trader trades against his/her own order, both orders will be cancelled out. If one order is larger than the other, the larger order will have the size difference remaining.
For example, a trader places a 2 BTC sell order and then a 1.5 BTC buy order at the same price, the buy order will be cancelled immediately and the sell order will have 0.5 BTC remaining.
No fees are charged for STP cancellations, and the crossed volume is not reported as a fill (although in the Orders API it will be counted as “filled size”). No settlement occurs for STP crosses.
All trades on CoinJar Exchange are final, unless we are required by law to reverse certain trades or where a significant technical error has occured to cause trades that are not consistent with our Terms of Service or Trading Rules.
Settlement involves the simultaneous transfer of the base currency from seller’s account to buyer’s account, and the counter currency from buyer’s account to seller’s account. The amount in base currency is equal to the size of the trade, whereas the amount in counter currency is equal to the value of the trade (price multiplied by size). When the amount in counter currency is not whole multiples of a subunit of the currency (e.g. 0.01 AUD or 0.00000001 BTC), it will be rounded to the nearest subunit. CoinJar has the discretion to select a suitable rounding method but the same amount applies to both the buyer and the seller.
The settlement of any trades takes place after the trade has occurred. While in most cases CoinJar Exchange ensures that settlement takes place within 10 seconds of the trade, during periods with extremely high trading volume, settlement may be delayed by up to an hour.
Before the trades are settled, you can place new orders with unsettled funds, but you won’t be allowed to withdraw unsettled funds. For example, if you sell 2 BTC @ $10,000, you will receive $20,000 in unsettled funds immediately after the trade which you can use to place a new order, but you will have to wait for the settlement to occur to withdraw this $20,000 from CoinJar Exchange.
CoinJar Exchange performs fee billing post-settlement and trading fees are charged daily in arrears. Generally, fees are charged everyday after 02:00 UTC for trades matched during the previous UTC day. Fee invoices are automatically charged to CoinJar Exchange accounts. If an account has a negative balance after fee invoices are paid, withdrawals from CoinJar Exchange will be restricted until the account deficits are covered by deposits or trades.
If you plan to implement automated trading strategies or run your trading algorithms against CoinJar Exchange, you may want to consider the topics in this section.
CoreMatch is capable of processing tens of thousands of requests per second with extremely low latencies. However, not all actions on CoinJar Exchange happen instantly. This table outlines the expected latencies for various actions in the trading lifecycle.
|#||Stage||Description||Expected latency (excluding network)|
|1||Order Placement||REST API returns initial order status. Order information is available in orders API.||<10ms|
|2||Trade Match||WebSocket API sends order update, new fill, new trade, account balance updates, ticker update and orderbook updates.||<10ms|
|3||Trade Record||Trade information is archived and available in trades API and candles API.||<1s|
|4||Order Record||Order information is archived and available in historical orders API.||<1s|
|5||Fill Record||Fill information is archived and available in fills API.||<60s|
|6||Settlement||Settlement occurs with buyer’s and seller’s settled account balance adjusted. Funds become withdrawable.||<60s|
To minimise network latency, you may choose to co-locate with the CoinJar Exchange servers in AWS Sydney (
Some (but not all) CoinJar Exchange API endpoints have rate limits. Generally, most API calls are rate limited to 600 requests every 10 minutes. For example, if you make 40 API calls between 12:40:00 and 12:41:00, you will only have 560 API calls left until the rate limit resets at 12:50:00.
API calls for order placements, order cancellation and market data are not rate limited. However, CoinJar reserves the right to restrict your API access if we determine (in our sole discretion) that your usage of non-rate-limited APIs is excessive compared to your settled trading activities.
Requests from all sources are counted towards the API rate limits per user, including API calls made on the CoinJar Exchange web interface. Therefore, if you develop and use multiple trading applications to access the same CoinJar Exchange account, you may need to consider the combined API call volume from all of these applications.
Each API key generated on CoinJar Exchange has full control of your CoinJar Exchange account, including transfers to and from CoinJar. All activities performed with your API key are considered irrevocably authorised by you. CoinJar Exchange API keys cannot be used to control your non-Exchange CoinJar accounts.
You are solely responsible for keeping API keys secure and confidential. You may revoke API keys at any time using the CoinJar Exchange web interface.