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.