EXPIRE_TAKER is the preferred choice for most scenarios. If your goal is to "keep your resting order alive," choose it. If you want to make sure "the resting order doesn't get eaten," go with EXPIRE_MAKER. The difference lies in which order gets sacrificed to avoid self-trading.

The world's largest cryptocurrency exchange by trading volume,leading in security and liquidity.
New user benefit: Enjoy 20% off trading fees upon registration!
1. Understand How the Two STP Modes Work
Self-trading happens when two of your own orders (one buy, one sell) end up matching against each other on the order book. Usually this is unintentional and merely costs you fees while messing up your positions. Binance's STP mechanism is designed to prevent that.
When the system detects that your taker order is about to match against one of your maker orders:
EXPIRE_TAKER: The system will immediately expire the remaining quantity of the taker order, leaving the resting (maker) order intact. Think of it as "the new order gets out of the way and leaves my resting order alone."
EXPIRE_MAKER: The system will immediately expire the maker order on the book, letting the taker order continue to execute. In other words, the old resting order steps aside so the new order can fill.
The core difference is simply "which order gets sacrificed" to prevent the self-trade.
2. When to Choose EXPIRE_TAKER
For most regular Binance users, the default STP mode is EXPIRE_MAKER, but that isn't always the best fit.
Scenarios for EXPIRE_TAKER:
You have an important resting order (like a limit order) already sitting on the book and you don't want it accidentally canceled when a self-trade is triggered. If you're running a quant or grid strategy, your resting order was placed at a carefully calculated level; EXPIRE_TAKER ensures that order stays safe.
You're executing a taker strategy, willing to absorb liquidity, but you don't want to "eat your own order." Suppose you have a buy limit order waiting to catch a dip and simultaneously send a market sell order. Choosing EXPIRE_TAKER will cause the sell order to expire, keeping your buy order alive.
Example: You placed a BTC buy limit order at 60,000, waiting for a pullback. Suddenly you need cash and submit a market sell order. If the system defaults to EXPIRE_MAKER, your 60,000 buy order gets canceled by the system. You get your cash, but your dip-buy order is gone. By choosing EXPIRE_TAKER, the market sell order expires (or partially expires) and your buy order at 60,000 remains on the book.
3. When to Choose EXPIRE_MAKER
Scenarios for EXPIRE_MAKER:
You care more about getting your taker order filled and are willing to sacrifice the existing resting order. For instance, that resting order no longer fits your current strategy, so letting it be wiped out is actually a plus.
You want to actively cancel an old limit order without the operational hassle of manual cancellation. Using EXPIRE_MAKER lets the new order "eat" the old one, acting as a "zero-cost cancellation."
Important note: Binance's documentation clearly states that the STP behavior is determined by the taker order's STP mode. The STP mode you set on a maker order when placing it will be ignored later during matching. So the key is to select the right mode at the moment you initiate the taker order, not what you filled in when placing the maker order.
Prerequisite: You need to be trading via the Binance Spot, Margin, or Futures API. For regular users placing orders through the App or Web interface, the STP mode is typically system-default and cannot be manually switched.

The world's largest cryptocurrency exchange by trading volume,leading in security and liquidity.
New user benefit: Enjoy 20% off trading fees upon registration!
4. When to Use the Other Two Modes
Two more modes exist, though most ordinary users won't need them:
EXPIRE_BOTH: Both the taker and the maker orders are canceled when a self-trade is detected. Use this if you want a "total wipeout" to prevent any accidental matching.
NONE: Turns off STP protection, allowing self-trading. Not recommended unless you fully understand what you're doing. Self-trading may be considered market manipulation in some regions.
Common mistake: Thinking "the mode I set when placing the order stays in effect forever." In reality, the STP event is decided by the taker order's mode, and the maker order's STP mode becomes irrelevant once it's on the book.
Risk reminder: Self-trading costs you fees without adding to your net position. In high-frequency trading or grid strategies, frequent self-trades can significantly raise transaction costs. If you use multiple sub-accounts under the same tradeGroupId, they are also subject to STP rules.
After making your choice, how do you confirm you got it right?
If you want the "old resting order" to be protected and the "new taker order" to be knocked out — use EXPIRE_TAKER. If you want the "new taker order" to fill as a priority and are willing to give up the "old resting order" — use EXPIRE_MAKER. The next time you place an API order, just add "selfTradePreventionMode": "EXPIRE_TAKER" or "EXPIRE_MAKER" to your request. If you're unsure, run it on the testnet first and see which order the system actually cancels.


