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:
EndpointParameter
POST v1/orderssmp_type
POST /orders/cancel_and_newnew_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

  • reduce

  • cancel_maker

  • cancel_taker

prevented_volume

Total volume canceled by SMP

prevented_locked

(Bid) The amount canceled due to the Self-Match Prevention (SMP) setting.
(Ask) The volume canceled due to the Self-Match Prevention (SMP) setting.

  • When subscribing to MyOrder data via WebSocket, if the state field is set to prevented, 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 as cancel.

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.
  • In REST API responses, if an SMP-related field is null, the field will not appear at all.
    • However, prevented_locked and prevented_volume always appear with a default value of 0.
{  
  "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