okx-api
Version:
Complete Node.js SDK for OKX's REST APIs and WebSockets, with TypeScript & end-to-end tests
268 lines (267 loc) • 8.65 kB
TypeScript
import { AlgoOrderState, AlgoOrderType, AlgoPositionSide, InstrumentType, MarginMode, numberInString, OrderSide, OrderType, PositionSide, PriceTriggerType, TradeMode } from '../shared.js';
export interface AlgoRecentHistoryRequest {
ordType: AlgoOrderType;
algoId?: string;
instType?: InstrumentType;
instId?: string;
after?: string;
before?: string;
limit?: string;
}
export interface AlgoLongHistoryRequest {
ordType: AlgoOrderType;
state?: AlgoOrderState;
algoId?: string;
instType?: InstrumentType;
instId?: string;
after?: string;
before?: string;
limit?: string;
}
/**
* When amending an attached trailing stop via amend algo / attach block (2026-04-13).
* Only one of newCallbackRatio or newCallbackSpread.
*/
export interface AmendAttachedTrailingStop {
newCallbackRatio?: string;
newCallbackSpread?: string;
newActivePx?: string;
}
interface AlgoTriggerOrder {
newTpTriggerPx?: string;
newTpTriggerPxType?: 'last' | 'index' | 'mark';
newTpOrdPx?: string;
newSlTriggerPx?: string;
newSlTriggerPxType?: 'last' | 'index' | 'mark';
newSlOrdPx?: string;
newCallbackRatio?: string;
newCallbackSpread?: string;
newActivePx?: string;
}
/**
* TP/SL and trailing (move_order_stop) attached to a parent `order` (2026-04-13: callbackRatio | callbackSpread, activePx).
*/
export interface AttachAlgoOrdRequest {
attachAlgoClOrdId?: string;
tpTriggerPx?: string;
/** Only one of tpTriggerPx and tpTriggerRatio (FUTURES/SWAP). */
tpTriggerRatio?: string;
tpOrdPx?: string;
tpOrdKind?: 'condition' | 'limit';
slTriggerPx?: string;
slTriggerRatio?: string;
slOrdPx?: string;
tpTriggerPxType?: 'last' | 'index' | 'mark';
slTriggerPxType?: 'last' | 'index' | 'mark';
sz?: string;
amendPxOnTriggerType?: '0' | '1';
/**
* Trailing stop: one of `callbackRatio` or `callbackSpread` when attached ordType is `move_order_stop`.
* e.g. 0.05 = 5%
*/
callbackRatio?: string;
/** Trailing: price distance (alternative to callbackRatio). */
callbackSpread?: string;
/** Trailing: activation; omit = activate immediately. */
activePx?: string;
}
export interface AlgoOrderRequest {
instId: string;
tdMode: TradeMode;
ccy?: string;
side: OrderSide;
posSide?: AlgoPositionSide;
ordType: AlgoOrderType;
algoClOrdId?: string;
sz: numberInString;
tag?: string;
reduceOnly?: boolean;
tgtCcy?: string;
tpTriggerPx?: numberInString;
tpTriggerPxType?: PriceTriggerType;
tpOrdPx?: numberInString;
tpOrdKind?: string;
slTriggerPx?: numberInString;
slTriggerPxType?: PriceTriggerType;
slOrdPx?: numberInString;
cxlOnClosePos?: boolean;
triggerPx?: numberInString;
triggerPxType?: PriceTriggerType;
orderPx?: numberInString;
chaseType?: string;
chaseVal?: numberInString;
maxChaseType?: string;
maxChaseVal?: numberInString;
callbackRatio?: numberInString;
callbackSpread?: numberInString;
activePx?: numberInString;
pxVar?: numberInString;
pxSpread?: numberInString;
szLimit?: numberInString;
pxLimit?: numberInString;
timeInterval?: string;
quickMgnType?: string;
closeFraction?: numberInString;
advanceOrdType?: 'fok' | 'ioc' | '';
attachAlgoOrds?: AttachAlgoOrdRequest[];
}
export interface AmendOrderRequest {
instId: string;
cxlOnFail?: boolean;
ordId?: string;
clOrdId?: string;
reqId?: string;
newSz?: string;
newPx?: string;
/** EVENTS: `"1"` for non-`post_only` amends when applicable. */
speedBump?: string;
/**
* Amend attached trailing stop (or related attach algo) — only one of newCallbackRatio / newCallbackSpread per item (2026-04-13).
*/
attachAlgoOrds?: AmendAttachedTrailingStop[];
}
export type AlgoOrderDetailsRequest = {
algoId: string;
} | {
algoClOrdId: string;
};
export interface AmendAlgoOrderRequest {
instId: string;
algoId?: string;
algoClOrdId?: string;
cxlOnFail?: boolean;
reqId?: string;
newSz?: string;
newTpTriggerPx?: string;
newTpOrdPx?: string;
newSlTriggerPx?: string;
newSlOrdPx?: string;
newTpTriggerPxType?: 'last' | 'index' | 'mark';
newSlTriggerPxType?: 'last' | 'index' | 'mark';
newTriggerPx: string;
newOrdPx: string;
newTriggerPxType?: 'last' | 'index' | 'mark';
attachAlgoOrds?: AlgoTriggerOrder[];
}
export interface CancelAlgoOrderRequest {
instId: string;
algoId?: string;
algoClOrdId?: string;
}
export interface ClosePositionRequest {
instId: string;
posSide?: PositionSide;
mgnMode: MarginMode;
ccy?: string;
autoCxl?: boolean;
clOrdId?: string;
tag?: string;
}
export interface FillsHistoryRequest {
instType?: InstrumentType;
uly?: string;
instId?: string;
ordId?: string;
after?: string;
before?: string;
begin?: string;
end?: string;
limit?: string;
}
export interface OrderIdRequest {
/**
* REST: use as in trade docs. WebSocket `cancel-order` / `batch-cancel-orders`: deprecated (2026-04-07) — if sent, ignored; use
* `ordId` or `clOrdId`. Optional `instIdCode` may still be used to map the instrument.
*/
instId?: string;
/**
* Where supported, may take precedence over `instId` if both are present. Get instruments to map.
*/
instIdCode?: number;
ordId?: string;
clOrdId?: string;
}
export interface OrderHistoryRequest {
instType: InstrumentType;
uly?: string;
instId?: string;
ordType?: OrderType;
state?: string;
category?: string;
after?: string;
before?: string;
begin?: string;
end?: string;
limit?: string;
}
export interface OrderRequest {
instId: string;
tdMode: TradeMode;
ccy?: string;
clOrdId?: string;
tag?: string;
side: OrderSide;
posSide?: PositionSide;
ordType: OrderType;
/** Quantity to buy or sell */
sz: numberInString;
px?: string;
/** Place options orders in USD. Only applicable to options. One of px/pxUsd/pxVol must be filled for option orders */
pxUsd?: string;
/** Place options orders based on implied volatility, where 1 represents 100%. Only applicable to options */
pxVol?: string;
reduceOnly?: boolean;
/** A spot buy on BTC-USDT with "base_ccy" would mean the QTY (sz) is in USDT */
tgtCcy?: 'base_ccy' | 'quote_ccy';
/**
* Maximum acceptable slippage for spot and spot margin market-side orders, where tgtCcy is the received currency (base_ccy for buy, quote_ccy for sell).
* Range: 0 to 0.05 (0% to 5%, inclusive). Up to 2 decimal places, e.g. 0.01 (1%) and 0.0123 (1.23%). Defaults to 0.00% if not specified.
* Only applicable to SPOT and SPOT margin market orders. Cannot be amended on an existing order.
*/
slippagePct?: string;
banAmend?: boolean;
/** Price amendment type: "0" = do not allow amendment, "1" = allow amendment within price limit. Default is "0" */
pxAmendType?: '0' | '1';
/** Quote currency used for trading. Only applicable to SPOT. Default is quote currency of instId */
tradeQuoteCcy?: string;
/** Self trade prevention mode: cancel_maker, cancel_taker, cancel_both. Default is cancel_maker */
stpMode?: 'cancel_maker' | 'cancel_taker' | 'cancel_both';
/** ELP taker access. true = can trade with ELP orders (speed bump applied). Default false. Only applicable to ioc orders */
isElpTakerAccess?: boolean;
/**
* EVENTS: set to `"1"` for non-`post_only` orders. Error 54086 if missing when required.
*/
speedBump?: string;
/** EVENTS: `yes` or `no`. */
outcome?: string;
/** Take Profit & Stop Loss params */
tpTriggerPx?: string;
tpOrdPx?: string;
slTriggerPx?: string;
slOrdPx?: string;
tpTriggerPxType?: PriceTriggerType;
slTriggerPxType?: PriceTriggerType;
/** TP/SL / trailing (attach) when placing the parent order */
attachAlgoOrds?: AttachAlgoOrdRequest[];
/** Quick margin type */
quickMgnType?: 'manual' | 'auto_borrow' | 'auto_repay';
}
export interface GetTransactionDetailsArchiveRequest {
year: string;
quarter: 'Q1' | 'Q2' | 'Q3' | 'Q4';
}
export interface OrderPrecheckRequest {
instId: string;
tdMode: string;
side: string;
posSide?: string;
ordType: string;
sz: string;
px?: string;
reduceOnly?: boolean;
tgtCcy?: string;
/** EVENTS: `yes` / `no`. */
outcome?: string;
attachAlgoOrds?: AttachAlgoOrdRequest[];
}
export {};