Upcoming Changes
None at the moment.
2026-09-09
Trailing Stop Order
Trailing stop orders are now live in the Open API, aligning API capabilities with the existing App/Web feature. A trailing stop order tracks favorable price movements using the last price and submits a market order when the price retraces by a preset callback amount from the extreme price reached after activation. The feature is built on the existing algo order framework — no new endpoints or channels are introduced. See the Trailing Stop Order section for full details.
- Place Algo Order (
POST /api/v1/trade/order-algo): added theorderTypeenumeration valuetrailing_stop, together with the request parameterscallbackRatio(callback rate,0.001–1, step0.001),callbackSpread(callback price distance) andactivePrice(activation price; if omitted, the order is activated immediately upon placement). EithercallbackRatioorcallbackSpreadis required, but not both.size=-1refers to the entire position: the triggered market order is placed with the actual position size at the moment of triggering.positionIdis required in Multi-Position mode. - Activation and tracking both use the last price. The
activePricedirection is not validated — make sure the activation price is on the intended side of the current price. Trailing stop orders are executed at market price only;orderPriceis not applicable and is ignored if passed.reduceOnlyis not validated at placement: if no position exists at the moment of triggering, the order fails (order_failed). - Amend Algo Order (
POST /api/v1/trade/amend-algo): addedorderType,newCallbackRatio,newCallbackSpreadandnewActivePrice.newSizeaccepts positive values only (-1is not supported — full-position vs. fixed-quantity is chosen at placement);newActivePricecan only be amended before activation. Amending the callback of an activated order preserves the recorded extreme price and does not reset tracking. The existingrequestIdandttlsemantics apply. - Cancel Algo Order (
POST /api/v1/trade/cancel-algo): added theorderTyperequest parameter. The default istrigger, so existing requests are not affected. - GET Active Algo Orders / GET Algo Order History:
orderType=trailing_stopis supported for filtering. Added the response fieldscallbackRatio,callbackSpread,activePriceandmoveTriggerPrice(current dynamic trigger price; empty = not yet activated, non-empty = activated and tracking). The existingstateenumeration is reused — no new state values are introduced. - WebSocket
orders-algochannel: trailing stop updates are pushed via the existing private channel with the new fields above. Messages are pushed on state changes and at the moment of activation; while tracking, an update is pushed only whenmoveTriggerPricechanges, at a granularity of approximately 5 seconds — not tick by tick. TheamendResultfield is not included in this channel; use the Amend Algo Order REST response to confirm the amendment result. - The triggered market order enters the regular order system and may be split into multiple child orders. Child order IDs are not returned in the algo order; correlate them by
instIdand the triggering time window. - Limits: up to
50pending (untriggered) partial-position trailing stop orders per account, of which at most10per instrument. In addition, each position may hold1full-position (size=-1) trailing stop order, which does not count toward the 50-order limit. - Error codes: added
152422(exactly one ofcallbackRatioandcallbackSpreadmust be provided; returned at the top level),148082(callbackRatioout of range) and148083(callbackSpreadout of range); the latter two are returned indata.code. Multi-Position related errors reuse the unified Multi-Position error codes.
When querying, amending, or canceling a trailing stop order, orderType=trailing_stop must always be passed. If orderType is not specified it defaults to trigger, and the request will be validated against trigger-order rules or fail to find the order.
Python SDK & MCP Server
- Added documentation for the official Python SDK (blofin/blofin-sdk-python), which covers REST and WebSocket access across trading, market data, copy trading, and the affiliate API.
- Added documentation for the BloFin MCP Server (blofin/blofin-mcp), a Model Context Protocol server that exposes the BloFin API to AI agents and LLM-powered applications, covering market data, account, trading, and asset management.
2026-09-04
Broker API Launch
The BloFin Broker API documentation is now public. See the Broker API documentation for details.
- Broker Program: documented broker types (API Broker and OAuth Broker), broker benefits, the application process, and the rebate guide.
- API Broker: documented the integration flow and the APIs commonly used by brokers, where
brokerIdis attached to orders for attribution. - OAuth Broker (Fast API): documented the full OAuth 2.0 authorization flow — Get Authorization Code, Get Refresh Token, token usage, and permission scopes (including the second-level scopes of
create:apikey) — plus the resource APIs Get Authorized User Info and Create API Key. - Broker Commission API, broker error codes, supported chains and coins, and the legacy Check First Deposit Status / Get Deposit Address endpoints are also documented.
2026-08-27
Spot API Launch
BloFin Spot API is now live and open to the public. It provides full REST and WebSocket support for spot trading. See the Spot API documentation for details.
- Endpoints
- REST root URL:
https://openapi.blofin.com - Public WebSocket:
wss://openapi.blofin.com/ws/spot/public - Private WebSocket:
wss://openapi.blofin.com/ws/spot/private - Demo trading is supported via
https://demo-trading-openapi.blofin.comand the correspondingws/spot/public,ws/spot/privateendpoints.
- REST root URL:
- Public Data (no authentication required)
- Added market data endpoints: GET Instruments (
/api/v1/spot/market/instruments), GET Tickers (/api/v1/spot/market/tickers), GET Order Book (/api/v1/spot/market/books), GET Trades (/api/v1/spot/market/trades), and GET Candlesticks (/api/v1/spot/market/candles). - Added public WebSocket channels:
trades,candle*(1m–1M),books/books5(with incremental order book updates viaseqId/prevSeqId), andtickers. All spot subscriptions requireinstType: SPOT.
- Added market data endpoints: GET Instruments (
- Trading
- Added order endpoints: Place Order (
/api/v1/spot/trade/order), Place Multiple Orders (/api/v1/spot/trade/batch-orders), and Place Algo Order (/api/v1/spot/trade/order-algo,triggertype). - Added cancellation endpoints: Cancel Order (
/api/v1/spot/trade/cancel-order), Cancel Multiple Orders (/api/v1/spot/trade/cancel-batch-orders), and Cancel Algo Order (/api/v1/spot/trade/cancel-algo). - Added query endpoints: GET Active Orders (
/api/v1/spot/trade/orders-pending), GET Order Detail (/api/v1/spot/trade/order-detail), GET Active Algo Orders (/api/v1/spot/trade/orders-algo-pending), GET Order History (/api/v1/spot/trade/orders-history), GET Algo Order History (/api/v1/spot/trade/orders-algo-history), GET Trade History (/api/v1/spot/trade/fills-history), and GET Trade Order Price Range (/api/v1/spot/trade/order/price-range). - Supported order types:
market,limit,post_only,fok,ioc; market orders supporttargetCurrency(base_currency/quote_currency). - Added private WebSocket channels:
orders,orders-algo,spot-account, andaccount.
- Added order endpoints: Place Order (
- Account
- GET Balance (
/api/v1/asset/balances) and Funds Transfer (/api/v1/asset/transfer) support thespotaccount type.
- GET Balance (
- User
- Added GET API Key Info (
/api/v1/user/query-apikey).
- Added GET API Key Info (
Authentication, signature algorithm, and rate limits are consistent with the existing Futures API.
Delisted Instruments
- Added Get Instruments History (
GET /api/v1/market/instruments-history): a public endpoint returning the metadata of all delisted USDT-margined contracts. All historically delisted contracts are backfilled; metadata is permanently retained, with field values frozen at the values effective at delisting. - Response fields are consistent with
GET /api/v1/market/instruments, except thatlistTime,expireTime,offTime,thresholdX,thresholdYandthresholdZare not returned;stateis alwaysdelisted. instIdis supported for querying a single delisted instrument; an unmatchedinstId(never existed, or still live) returnscode=0with an emptydataarray. The endpoint returns the full list; pagination is not supported and the order of results is not guaranteed.- At any moment, an
instIdappears in exactly one ofGET /api/v1/market/instrumentsand this endpoint. Contract specifications (contractValue,settleCurrency,contractType) remain unchanged across delisting and relisting — any specification change requires a new instrument ID. GET /api/v1/market/instrumentsis not affected.
Multi-Position Mode (Position-by-Order)
Multi-Position mode is now supported in the Open API. When enabled, each opening order creates an independent position with its own positionId, entry price, margin, leverage, and TP/SL, instead of being merged into a single position per instrument and direction. Available under Hedge Mode (long_short_mode) only; both cross and isolated are supported. Accounts that do not enable Multi-Position are not affected — new response fields return an empty string. See the Multi-Position Mode section for full details.
- Set / GET Position Mode: added the account-level switch
multiPosition(trueonly underlong_short_mode; switching requires no open orders or positions; sub-accounts are configured independently). - Place Order / Place Multiple Orders: added the
positionIdrequest parameter (required for closing orders; optional for opening orders — omit to open a new position, or pass to add to an existing position, inheriting its leverage). Pending add-position orders are automatically canceled when the target position is fully closed or liquidated. Responses now returnpositionIdper order result (echoed for close/add orders; empty for new opening orders until filled). - Place TPSL Order / Place Algo Order: added the
positionIdparameter, required in Multi-Position mode;size=-1refers to the entire specified position. - Close Positions: added the
positionIdparameter, required in Multi-Position mode; the response echoespositionId. There is no close-all semantic. - Set Leverage: added the optional
positionIdparameter to adjust a single position’s leverage; instrument-level leverage can be modified while holding positions and applies to newly opened positions only. Positions on the same instrument and direction may hold different leverage. - GET Positions: multiple entries may be returned per
instIdandpositionSide, keyed bypositionId; added the optionalpositionIdrequest parameter. - Order queries (Order Detail / Active Orders / Order History, TP/SL and algo queries): added the
positionIdresponse field. - WebSocket: the
positionschannel pushes atpositionIdgranularity and pushes a finalpositions=0message when a position is fully closed; theorderschannel adds thepositionIdfield. - Limits: up to
10positions per instrument; exceeding the limit rejects the opening order. reduceOnlyis not supported under Hedge Mode and is ignored if passed.
2026-08-19
Order Amendment
- Added order amendment APIs: Amend Order (
/api/v1/trade/amend-order), Amend Multiple Orders (/api/v1/trade/amend-batch-orders), Amend TP/SL Order (/api/v1/trade/amend-tpsl), and Amend Algo Order (/api/v1/trade/amend-algo). - Amend supports modifying price, size, and take-profit / stop-loss;
requestId(idempotency) andttl(request validity) are supported. - Added amend-related fields to the private
ordersWebSocket channel:amendResult,amendSource,requestId. - Added amend error codes:
102067,102148,152420,152421,152423,152428,152429.