Self-Match Prevention (SMP)
Prevents order matching between orders placed by the same user.
What is the Self-Match(SMP) Prevention feature?
This feature prevents unintentional self-trading by blocking order matches when a user’s own orders meet in the order book. It reduces unnecessary fees and helps ensure regulatory compliance in a more efficient and stable way.
How to Set SMP?
- This feature is supported through the following API endpoints and parameters:
Endpoint | Parameter |
---|---|
POST v1/orders | smp_type |
POST /orders/cancel_and_new | new_smp_type |
What modes are available?
There are three types of SMP settings available. The SMP mode is applied based on the taker order. Therefore, once an order is already placed in the order book, its SMP mode is no longer effective.
cancel_taker
: Keeps the maker order and cancels the taker order to prevent self-trading.cancel_maker
: Keeps the taker order and cancels the maker order to prevent self-trading.reduce
: Reduces the overlapping quantity from both maker and taker orders to prevent self-trading.- If any remaining quantity exists, the orders stay open.
How can I check if an order was canceled due to SMP?
If an order is canceled because of the SMP setting, the following fields will appear in the order response:
Parameter | Description |
---|---|
smp_type | Self-Match Prevention (SMP) mode
|
prevented_volume | Total volume canceled by SMP |
prevented_locked | (Bid) The amount canceled due to the Self-Match Prevention (SMP) setting. |
- When subscribing to MyOrder data via WebSocket, if the
state
field is set toprevented
, it means the order (amount or volume) was canceled due to SMP.- If the remaining order quantity (or amount) is completely canceled, the
state
field will be sent ascancel
.
- If the remaining order quantity (or amount) is completely canceled, the
Notes
- This feature is optional. If you do not specify
smp_type
, the SMP feature will not be applied. In this case, orders from the same user may be matched and executed. - Self-match is checked at the time of trade execution, not at the time the order is placed.
- SMP can be used with all order types (
ord_type
), including market, limit, stop-limit, IOC/FOK, and cancel-and-replace orders. - The post_only setting in the
time_in_force
parameter cannot be used together with SMP. prevented_locked
- For bid orders, this is the prevented order amount including fees. For example, if the fee rate is 0.25%, the value is calculated by multiplying the
prevented order amount by 1.0025
. - For ask orders, the value is not affected by fees and represents the quantity canceled by SMP. It is identical to prevented_volume.
- For bid orders, this is the prevented order amount including fees. For example, if the fee rate is 0.25%, the value is calculated by multiplying the
- In REST API responses, if an SMP-related field is null, the field will not appear at all.
- However,
prevented_locked
andprevented_volume
always appear with a default value of 0.
- However,
{
"uuid": "53afa136-8882-46e5-8119-614ae10e623b",
"side": "bid",
"...": "...",
"smp_type": "cancel_maker", // only included when not null
"prevented_volume": 1.174291929,
"prevented_locked": 0.001706246173
}
When subscribing to MyOrder data via WebSocket, the related fields are always included in the payload, even if their values are null. This allows you to check the information consistently, even when no values are present.
{
"type": "myOrder",
"code": "SGD-XRP",
"uuid": "ac2dc2a3-fce9-40a2-a4f6-5987c25c438f",
"ask_bid": "BID",
"order_type": "limit",
"...": "...",
"smp_type": null, // always included, even if the value is null
"prevented_volume": "0",
"prevented_locked": "0"
...
}
Example

Updated 15 days ago