Skip to main content

Recent changes

Trade history, paging defaults and error names

Breaking — id in Get User Trade Transactions is a string (for example "1181163798924649598"). Trade ids have 19 digits, which JavaScript and many JSON parsers round when they are sent as numbers. orderId is unchanged. See Number formats.

Breaking — error 1091 is named WITHDRAWAL_ADDRESS_NOT_WHITELISTED instead of RECEIVER_ADDRESS_COULD_NOT_FOUND; the code is unchanged. Handle errors by code, not by message.

Breaking — error 1227 is named PRICE_MUST_BE_GREATER_THAN_MINPRICE instead of PRICE_MUST_BE_LESS_THAN_MINPRICE. It is returned when a limit sell price is below filters[].minPrice; the code is unchanged.

Breaking — GET /api/v1/exchanges is removed and returns 404.

Trade history: pairSymbol accepts BTC_USDT, and an unknown pairSymbol returns 400 PAIR_NOT_FOUND_ERROR (1027) instead of every pair's trades. Each trade has role (maker or taker), and so does User Trade (423) on the WebSocket feed.

Get Trades returns 400 PAIR_NOT_FOUND_ERROR (1027) for an unknown pair, like Get Tickers and Get OrderBook.

Paging defaults: limit on Get All Orders is optional (1–50, default 50). List Withdrawal Addresses defaults to page 1 and pageSize 100.

Get Crypto Transactions: preciseAmount carries the amount, and confirmationCount is null for withdrawals.

Get Exchange Info: currencies lists only currencies that appear in at least one pair, and message is null.

Breaking — stop orders are not accepted: stoplimit and stopmarket in Submit Order return 400 ORDER_METHOD_NOT_SUPPORTED (1134), and Get Exchange Info no longer lists STOP_LIMIT or STOP_MARKET. Stop orders placed on the website still appear in order lists with their stopPrice.

Withdrawals confirmed by e-mail, trade side, rate limits and error format

Withdrawals are confirmed only from the e-mail. POST /api/v1/crypto-withdrawals/{id}/confirmations is no longer available and returns 404. Crypto Withdrawals now describes the e-mail confirmation (valid for 1 hour) and every status value.

Breaking — Get Trades reports the taker's side. side now matches the WebSocket trade channel: buy means the buyer took liquidity.

Rate limits changed to 3 requests per 500 ms and 60 per 10 seconds; every 429 carries a Retry-After header, and repeated invalid signatures are throttled. See Rate Limits.

New — duplicate client order ids are rejected. A newOrderClientId reused within 24 hours returns DUPLICATE_CLIENT_ORDER_ID (1246) with the existing order's id. See Retry Strategy Guideline.

Malformed requests use the documented error format. See Error Codes.

Ticker: dailyPercent is rounded to 2 decimals and timestamp is an integer.

WebSocket feed moved to its own host

The WebSocket feed is now served at wss://ws.global.btcturk.com. The former address wss://global.btcturk.com/ws-feed-pro is no longer available. The feed accepts HTTP/1.1 connections only; see Connection & Message Format.

Withdrawal addresses are read-only through the API

POST /api/v1/crypto-withdrawal-addresses and DELETE /api/v1/crypto-withdrawal-addresses/{id} are no longer available and return 404. Add and remove withdrawal addresses in the BtcTurk Global app, with two-factor authentication; List Withdrawal Addresses and Get Withdrawal Address by Id are unchanged.

Documentation restructured: API and WebSocket sections

Endpoint documentation now lives under a single API section. Authentication, Public Endpoints and Private Endpoints moved beneath it, so their URLs gained an /api prefix — for example /public-endpoints/ticker is now /api/public-endpoints/ticker. Update any bookmarks.

The WebSocket section was split into one page per message: connection and envelope, subscribing, authentication, Public Messages (401, 402, 422, 431, 432) and Private Messages (201, 423, 441, 451, 452), plus reconnect guidance. The former single /websocket-feed/overview page is gone; start at Connection & Message Format.

WebSocket feed documented

BtcTurk Global API's WebSocket feed is now documented at WebSocket / Realtime Feed: connection URL, the [type, payload] message envelope, subscribing and unsubscribing, the four public market-data channels (ticker, trade, orderbook, obdiff) with full field tables, HMAC authentication, and the private order/trade/balance messages pushed to authenticated connections.

This replaces the previous statement that no public realtime feed existed. Related pages were updated: the FAQ entry on WebSocket support, the cancellation note on Cancel Orders (a cancellation now produces a 452 push), and the polling note on Get OrderBook.

Authenticating on the feed requires the new WebSocket API key permission, now listed in API Access Permissions.

Cancel-order route changed, withdrawal confirmation and currencies documented

Breaking — cancel an order by path, not query string. The single-order cancel moved to DELETE /api/v1/order/{id}. The bare DELETE /api/v1/order route is now Cancel Multiple Orders and expects a JSON body of order ids, so the previous DELETE /api/v1/order?id=... call is rejected with 400 INVALID_REQUEST_ERROR. Cancel-multiple is not atomic: a partial failure returns 200 with success: false and an uncancelledOrders array.

Breaking — unknown symbol on balances is now an error. Get Account Balance rejects an unrecognised symbol with 400 symbol-not-found; it previously ignored the filter and returned every balance.

New — withdrawals are confirmed explicitly. Confirm Crypto Withdrawal (POST /api/v1/crypto-withdrawals/{id}/confirmations) released a created withdrawal and returned 202 with isRequireAdminApproval. This endpoint has since been removed; withdrawals are confirmed from the e-mail, see the entry above.

New — Get Currencies (GET /api/v1/currencies) is now documented; it was already live but missing from these docs.

Clearer errors. Several failures that previously surfaced as 500 internal-server-error now return specific 400 problem documents: tag-can-not-be-empty, tag-must-be-empty and address-cannot-be-deposit-address when adding a withdrawal address, and currency-channel-not-found when listing deposit addresses.